Domanda

Vorrei che la proprietà della versione della mia applicazione venisse incrementata per ogni build, ma non sono sicuro di come abilitare questa funzionalità in Visual Studio (2005/2008).Ho provato a specificare AssemblyVersion come 1.0.* ma non ottengo esattamente quello che voglio.

Sto anche utilizzando un file di impostazioni e nei tentativi precedenti, quando la versione dell'assembly è stata modificata, le mie impostazioni sono state ripristinate sui valori predefiniti poiché l'applicazione ha cercato il file di impostazioni in un'altra directory.

Mi piacerebbe essere in grado di visualizzare un numero di versione sotto forma di 1.1.38 in modo che quando un utente rileva un problema posso registrare la versione che sta utilizzando e dirgli di aggiornare se ha una versione precedente.

Sarebbe apprezzata anche una breve spiegazione di come funziona il controllo delle versioni.Quando vengono incrementati il ​​numero di build e di revisione?

È stato utile?

Soluzione

Con il materiale "integrato" non è possibile, poiché l'utilizzo di 1.0.* o 1.0.0.* sostituirà la revisione e i numeri di build con una data/timestamp codificata, che di solito è anche un buon modo.

Per ulteriori informazioni, vedere il Collegamento di assiemi Documentazione nel tag /v.

Per quanto riguarda l'incremento automatico dei numeri, utilizzare l'attività AssemblyInfo:

Attività AssemblyInfo

Questo può essere configurato per incrementare automaticamente il numero di build.

Ci sono 2 trucchi:

  1. Ciascuno dei 4 numeri nella stringa Versione è limitato a 65535.Si tratta di una limitazione di Windows ed è improbabile che venga risolta.
  2. L'utilizzo con Subversion richiede una piccola modifica:

Recuperare il numero di versione è quindi abbastanza semplice:

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);

E, per chiarire:In .net o almeno in C#, la build è in realtà il TERZO numero, non il quarto come alcune persone (ad esempio gli sviluppatori Delphi abituati a Major.Minor.Release.Build) potrebbero aspettarsi.

In .net è Major.Minor.Build.Revision.

Altri suggerimenti

VS.NET imposta per impostazione predefinita la versione Assembly su 1.0.* e utilizza la seguente logica durante l'incremento automatico:imposta la parte di compilazione sul numero di giorni a partire dal 1 gennaio 2000 e imposta la parte di revisione sul numero di secondi a partire dalla mezzanotte, ora locale, diviso per due.Guarda questo Articolo MSDN.

La versione dell'assembly si trova in un file assemblyinfo.vb o assemblyinfo.cs.Dal dossier:

' 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")> 

Ho scoperto che funziona bene visualizzare semplicemente la data dell'ultima build utilizzando quanto segue ovunque sia necessaria una versione del prodotto:

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

Piuttosto che tentare di ottenere la versione da qualcosa di simile al seguente:

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;
}

Quale sistema di controllo del codice sorgente stai utilizzando?

Quasi tutti hanno una qualche forma di tag $ Id $ che viene espanso quando il file viene archiviato.

Di solito utilizzo qualche forma di hacking per visualizzarlo come numero di versione.

L'altra alternativa è utilizzare la data come numero di build:080803-1448

[Studio visivo 2017, .csproj proprietà]

Per aggiornare automaticamente la proprietà PackageVersion/Version/AssemblyVersion (o qualsiasi altra proprietà), crearne innanzitutto una nuova Microsoft.Build.Utilities.Task classe che riceverà il numero di build corrente e restituirà il numero aggiornato (ti consiglio di creare un progetto separato solo per quella classe).

Aggiorno manualmente i numeri major.minor, ma consento a MSBuild di aggiornare automaticamente il numero di build (1.1.1, 1.1.2, 1.1.3, eccetera.:)

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;
    }

}

Quindi chiama il processo Task on MSBuild creato di recente aggiungendo il codice successivo sul file .csproj:

<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>
 ..

Quando si sceglie l'opzione di progetto Visual Studio Pack (basta cambiare in BeforeTargets="Build" per eseguire l'attività prima della compilazione) verrà attivato il codice RefreshVersion per calcolare il nuovo numero di versione e XmlPoke task aggiornerà la tua proprietà .csproj di conseguenza (sì, modificherà il file).

Quando lavoro con le librerie NuGet, invio il pacchetto anche al repository NuGet semplicemente aggiungendo l'attività di compilazione successiva all'esempio precedente.

<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 è dove ho il client NuGet (ricordati di salvare la chiave API NuGet chiamando nuget SetApiKey <my-api-key> o per includere la chiave nella chiamata push NuGet).

Nel caso possa aiutare qualcuno ^_^.

Qualche tempo fa ho scritto un exe veloce e sporco che aggiornava i numeri di versione in un assemblyinfo.{cs/vb} - Ho anche usato rxfind.exe (uno strumento di sostituzione della ricerca basato su regex semplice e potente) per eseguire il aggiornamento da una riga di comando come parte del processo di compilazione.Un paio di altri suggerimenti utili:

  1. separare le informazioni sull'assieme in parti del prodotto (nome dell'azienda, versione, ecc.) e parti specifiche dell'assieme (nome dell'assieme, ecc.).Vedere Qui
  2. Inoltre, utilizzo subversion, quindi ho trovato utile impostare il numero di build sul numero di revisione di subversion, rendendo così davvero semplice tornare sempre alla base di codice che ha generato l'assembly (ad es.1.4.100.1502 è stato costruito a partire dalla revisione 1502).

Se desideri un numero con incremento automatico che si aggiorni ogni volta che viene completata una compilazione, puoi utilizzare VersionUpdater da un evento pre-costruzione.Il tuo evento di pre-compilazione può controllare la configurazione della build, se preferisci, in modo che il numero di versione aumenti solo per una build di rilascio (ad esempio).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top