Pregunta

Me gustaría que la propiedad de versión de mi aplicación se incrementara para cada compilación, pero no estoy seguro de cómo habilitar esta funcionalidad en Visual Studio (2005/2008).Intenté especificar la versión de ensamblaje como 1.0.* pero no obtengo exactamente lo que quiero.

También estoy usando un archivo de configuración y en intentos anteriores, cuando la versión ensamblada cambió, mi configuración se restableció a la predeterminada ya que la aplicación buscó el archivo de configuración en otro directorio.

Me gustaría poder mostrar un número de versión en el formato 1.1.38 para que cuando un usuario encuentre un problema pueda registrar la versión que está usando y decirle que actualice si tiene una versión anterior.

También se agradecería una breve explicación de cómo funciona el control de versiones.¿Cuándo se incrementa el número de compilación y revisión?

¿Fue útil?

Solución

Con las cosas "integradas", no puedes, ya que usar 1.0.* o 1.0.0.* reemplazará los números de revisión y compilación con una fecha/marca de tiempo codificada, lo que generalmente también es una buena manera.

Para obtener más información, consulte el Vinculador de ensamblaje Documentación en la etiqueta /v.

En cuanto a incrementar números automáticamente, use la tarea AssemblyInfo:

Tarea de información de ensamblaje

Esto se puede configurar para incrementar automáticamente el número de compilación.

Hay 2 trampas:

  1. Cada uno de los 4 números de la cadena Versión está limitado a 65535.Esta es una limitación de Windows y es poco probable que se solucione.
  2. Usar con Subversion requiere un pequeño cambio:

Recuperar el número de versión es bastante fácil:

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

Y, para aclarar:En .net o al menos en C#, la compilación es en realidad el TERCER número, no el cuarto como podrían esperar algunas personas (por ejemplo, los desarrolladores de Delphi que están acostumbrados a Major.Minor.Release.Build).

En .net, es Revisión.de.compilación.menor.mayor.

Otros consejos

VS.NET tiene por defecto la versión de ensamblaje 1.0.* y utiliza la siguiente lógica cuando realiza el incremento automático:establece la parte de compilación en el número de días desde el 1 de enero de 2000 y establece la parte de revisión en el número de segundos desde la medianoche, hora local, dividido por dos.Mira esto artículo de MSDN.

La versión ensamblada se encuentra en un archivo ensambladorinfo.vb o ensambladorinfo.cs.Del archivo:

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

Descubrí que funciona bien simplemente mostrar la fecha de la última compilación usando lo siguiente siempre que se necesite una versión del producto:

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

En lugar de intentar obtener la versión de algo como lo siguiente:

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

¿Qué sistema de control de fuente estás usando?

Casi todos tienen algún tipo de etiqueta $ Id $ que se expande cuando se registra el archivo.

Normalmente uso algún tipo de piratería para mostrar esto como el número de versión.

La otra alternativa es utilizar la fecha como número de compilación:080803-1448

[Estudio visual 2017, .csproj propiedades]

Para actualizar automáticamente su propiedad PackageVersion/Version/AssemblyVersion (o cualquier otra propiedad), primero, cree una nueva Microsoft.Build.Utilities.Task clase que obtendrá su número de compilación actual y devolverá el número actualizado (recomiendo crear un proyecto separado solo para esa clase).

Actualizo manualmente los números principales y menores, pero dejo que MSBuild actualice automáticamente el número de compilación (1.1.1, 1.1.2, 1.1.3, etc.:)

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

}

Luego llame a su tarea recientemente creada en el proceso MSBuild agregando el siguiente código en su archivo .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>
 ..

Al elegir la opción de proyecto Visual Studio Pack (simplemente cambie a BeforeTargets="Build" para ejecutar la tarea antes de la compilación) se activará el código RefreshVersion para calcular el nuevo número de versión, y XmlPoke La tarea actualizará su propiedad .csproj en consecuencia (sí, modificará el archivo).

Cuando trabajo con bibliotecas NuGet, también envío el paquete al repositorio de NuGet simplemente agregando la siguiente tarea de compilación al ejemplo anterior.

<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 es donde tengo el cliente NuGet (recuerde guardar su clave API de NuGet llamando nuget SetApiKey <my-api-key> o para incluir la clave en la llamada push de NuGet).

Por si a alguien le sirve ^_^.

Hace algún tiempo escribí un archivo ejecutable rápido y sucio que actualizaría los números de versión en una información de ensamblaje. {cs/vb} - También usé rxfind.exe (una herramienta de reemplazo de búsqueda basada en expresiones regulares simple y poderosa) para hacer el actualizar desde una línea de comando como parte del proceso de compilación.Un par de otros consejos útiles:

  1. separe la información del ensamblaje en partes del producto (nombre de la empresa, versión, etc.) y partes específicas del ensamblaje (nombre del ensamblaje, etc.).Ver aquí
  2. Además, uso Subversion, por lo que me resultó útil establecer el número de compilación en el número de revisión de Subversion, lo que hace que sea realmente fácil volver siempre al código base que generó el ensamblaje (p. ej.1.4.100.1502 se creó a partir de la revisión 1502).

Si desea un número de incremento automático que se actualice cada vez que se realiza una compilación, puede usar Actualizador de versiones de un evento previo a la construcción.Su evento previo a la compilación puede verificar la configuración de compilación si lo prefiere, de modo que el número de versión solo aumente para una compilación de lanzamiento (por ejemplo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top