Vra

Ek wil graag hê dat die weergawe-eienskap van my toepassing vir elke bou verhoog moet word, maar ek is nie seker hoe om hierdie funksionaliteit in Visual Studio (2005/2008) te aktiveer nie.Ek het probeer om die AssemblyVersion as 1.0.* te spesifiseer, maar dit kry my nie presies wat ek wil hê nie.

Ek gebruik ook 'n instellingslêer en in vroeëre pogings toe die samestellingweergawe verander het, is my instellings na die verstek teruggestel aangesien die toepassing na die instellingslêer in 'n ander gids gesoek het.

Ek wil graag 'n weergawenommer in die vorm van 1.1.38 kan vertoon, so wanneer 'n gebruiker 'n probleem vind, kan ek die weergawe wat hulle gebruik aanteken, asook vir hulle sê om op te gradeer as hulle 'n ou weergawe het.

'n Kort verduideliking van hoe die weergawe werk sal ook waardeer word.Wanneer word die bou- en hersieningsnommer verhoog?

Was dit nuttig?

Oplossing

Met die "Ingeboude" goed kan jy nie, aangesien die gebruik van 1.0.* of 1.0.0.* die hersiening en bounommers sal vervang met 'n gekodeerde datum/tydstempel, wat gewoonlik ook 'n goeie manier is.

Vir meer inligting, sien die Montageskakelaar Dokumentasie in die /v tag.

Wat die outomatiese verhoging van getalle betref, gebruik die AssemblyInfo-taak:

AssemblyInfo Taak

Dit kan gekonfigureer word om die bounommer outomaties te verhoog.

Daar is 2 Gotchas:

  1. Elk van die 4 nommers in die Weergawe-string is beperk tot 65535.Dit is 'n Windows-beperking en sal waarskynlik nie reggestel word nie.
  2. Gebruik met met Subversion vereis 'n klein verandering:

Die herwinning van die weergawenommer is dan redelik maklik:

Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);

En om te verduidelik:In .net of ten minste in C# is die bou eintlik die DERDE nommer, nie die vierde een soos sommige mense (byvoorbeeld Delphi-ontwikkelaars wat gewoond is aan Major.Minor.Release.Build) kan verwag nie.

In .net is dit Major.Minor.Build.Revision.

Ander wenke

VS.NET stel die Assembly-weergawe as verstek na 1.0.* en gebruik die volgende logika wanneer dit outomaties verhoog word:dit stel die boudeel op die aantal dae sedert 1 Januarie 2000, en stel die hersieningsdeel na die aantal sekondes sedert middernag, plaaslike tyd, gedeel deur twee.Kyk hier MSDN artikel.

Assembly weergawe is geleë in 'n assemblyinfo.vb of assemblyinfo.cs lêer.Uit die lêer:

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> 

<Assembly: AssemblyVersion("1.0.0.0")> 
<Assembly: AssemblyFileVersion("1.0.0.0")> 

Ek het gevind dat dit goed werk om bloot die datum van die laaste bouwerk te vertoon deur die volgende te gebruik waar 'n produkweergawe ook al benodig word:

System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")

Eerder as om die weergawe van iets soos die volgende te probeer kry:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;

if (attributes.Length > 0)
{
    attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}

Watter bronbeheerstelsel gebruik jy?

Byna almal van hulle het een of ander vorm van $ Id $-merker wat uitgebrei word wanneer die lêer ingeboek word.

Ek gebruik gewoonlik een of ander vorm van hackery om dit as die weergawenommer te vertoon.

Die ander alternatief is om die datum as die bounommer te gebruik:080803-1448

[Visual Studio 2017, .csproj eiendomme]

Om jou PackageVersion/Weergawe/AssemblyVersion-eiendom (of enige ander eiendom) outomaties op te dateer, skep eers 'n nuwe Microsoft.Build.Utilities.Task klas wat jou huidige bounommer sal kry en die opgedateerde nommer sal terugstuur (ek beveel aan om 'n aparte projek net vir daardie klas te skep).

Ek werk die major.minor-nommers handmatig op, maar laat MSBuild die bounommer outomaties opdateer (1.1.1, 1.1.2, 1.1.3, ens.:)

using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Text;

public class RefreshVersion : Microsoft.Build.Utilities.Task
{
    [Output]
    public string NewVersionString { get; set; }
    public string CurrentVersionString { get; set; } 

    public override bool Execute()
    {       
        Version currentVersion = new Version(CurrentVersionString ?? "1.0.0");

        DateTime d = DateTime.Now;
        NewVersionString = new Version(currentVersion.Major, 
            currentVersion.Minor, currentVersion.Build+1).ToString();
        return true;
    }

}

Bel dan jou onlangs geskepte Taak op MSBuild-proses en voeg die volgende kode op jou .csproj-lêer by:

<Project Sdk="Microsoft.NET.Sdk">    
...
<UsingTask TaskName="RefreshVersion" AssemblyFile="$(MSBuildThisFileFullPath)\..\..\<dll path>\BuildTasks.dll" />
<Target Name="RefreshVersionBuildTask" BeforeTargets="Pack" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
   <RefreshVersion CurrentVersionString="$(PackageVersion)">
          <Output TaskParameter="NewVersionString" PropertyName="NewVersionString" />             
   </RefreshVersion>
   <Message Text="Updating package version number to $(NewVersionString)..." Importance="high" />
   <XmlPoke XmlInputPath="$(MSBuildProjectDirectory)\mustache.website.sdk.dotNET.csproj" Query="/Project/PropertyGroup/PackageVersion" Value="$(NewVersionString)" />
</Target>
...
<PropertyGroup>
 ..
 <PackageVersion>1.1.4</PackageVersion>
 ..

As u Visual Studio Pack-projekopsie kies (verander net na BeforeTargets="Build" vir die uitvoering van die taak voor Bou) sal die RefreshVersion-kode geaktiveer word om die nuwe weergawenommer te bereken, en XmlPoke taak sal jou .csproj eiendom dienooreenkomstig opdateer (ja, dit sal die lêer wysig).

Wanneer ek met NuGet-biblioteke werk, stuur ek ook die pakket na NuGet-bewaarplek deur net die volgende boutaak by die vorige voorbeeld te voeg.

<Message Text="Uploading package to NuGet..." Importance="high" />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\bin\release" Command="c:\nuget\nuget push *.nupkg -Source https://www.nuget.org/api/v2/package" IgnoreExitCode="true" />

c:\nuget\nuget is waar ek die NuGet-kliënt het (onthou om jou NuGet API-sleutel te stoor deur te bel nuget SetApiKey <my-api-key> of om die sleutel op die NuGet-drukoproep in te sluit).

Net ingeval dit iemand help ^_^.

Ek het 'n ruk gelede 'n vinnige en vuil exe geskryf wat die weergawe #'s in 'n assemblyinfo sou opdateer.{cs/vb} - Ek het ook rxfind.exe ('n eenvoudige en kragtige regex-gebaseerde soekvervangingsnutsding) gebruik om die werk vanaf 'n opdragreël op as deel van die bouproses.'n Paar ander nuttige wenke:

  1. skei die monteerinligting in produkonderdele (maatskappynaam, weergawe, ens.) en monteer spesifieke dele (samestellingnaam ens.).Sien hier
  2. Ook - ek gebruik subversion, so ek het dit nuttig gevind om die bounommer op subversion-hersieningsnommer te stel, waardeur dit baie maklik is om altyd terug te keer na die kodebasis wat die samestelling gegenereer het (bv.1.4.100.1502 is gebou vanaf hersiening 1502).

As jy 'n outomatiese inkrementerende nommer wil hê wat bywerk elke keer as 'n samestelling gedoen word, kan jy dit gebruik Weergawe-opdatering van 'n voorafbougeleentheid.Jou voorbou-gebeurtenis kan die boukonfigurasie nagaan as jy dit verkies sodat die weergawenommer net sal toeneem vir 'n vrystellingbou (byvoorbeeld).

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top