Aquí podría ser tu PUBLICIDAD


Actualiza automáticamente el número de versión

votos
95

Me gustaría que la propiedad de la versión de mi aplicación se incremente para cada compilación, pero no estoy seguro de cómo habilitar esta funcionalidad en Visual Studio (2005/2008). He intentado especificar AssemblyVersion como 1.0. * Pero no me da exactamente lo que quiero.

También estoy usando un archivo de configuración y en intentos anteriores cuando la versión del ensamblaje cambió mi configuración, restablecí a la predeterminada ya que la aplicación buscaba el archivo de configuración en otro directorio.

Me gustaría poder mostrar un número de versión en la forma de 1.1.38 para que cuando un usuario encuentre un problema pueda registrar la versión que están utilizando y decirles que actualicen si tienen una versión anterior.

También se apreciará una breve explicación de cómo funcionan las versiones. ¿Cuándo se incrementa el número de compilación y revisión?

Publicado el 03/08/2008 a las 12:12
fuente por usuario Robert Höglund
En otros idiomas...        العربية       

7 respuestas

votos
85

Con las cosas "integradas", no se puede, ya que el uso de 1.0. * O 1.0.0. * Reemplazará los números de revisión y compilación con una fecha / indicación de tiempo codificada, que generalmente también es una buena manera.

Para obtener más información, consulte la documentación de Ensamblador ensamblador en la etiqueta / v.

En cuanto a los números que se incrementan automáticamente, use la tarea de AssemblyInfo:

Tarea de AssemblyInfo

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

Hay 2 Gotchas:

  1. Cada uno de los 4 números en 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 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 algunas personas (por ejemplo, Desarrolladores de Delphi que están acostumbrados a Major.Minor.Release.Build) pueden esperar.

En .net, es Major.Minor.Build.Revision.

Respondida el 03/08/2008 a las 12:41
fuente por usuario Michael Stum


Aquí podría ser tu PUBLICIDAD


votos
19

VS.NET predetermina la versión de ensamblaje a 1.0. * Y utiliza la siguiente lógica cuando se autoincrementa: establece la parte de compilación en la cantidad 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. Vea este artículo de MSDN .

La versión de ensamblaje se encuentra en un archivo assemblyinfo.vb o assemblyinfo.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")> 
Respondida el 30/09/2008 a las 09:58
fuente por usuario Solracnapod

votos
8

He encontrado que funciona bien para simplemente mostrar la fecha de la última acumulación utilizando la siguiente dondequiera que se necesite una versión de 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;
}
Respondida el 04/03/2013 a las 09:58
fuente por usuario Roger

votos
6

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

Casi todos ellos tienen algún tipo de $ Id $ tag que se expande cuando el archivo está registrado.

Usualmente uso alguna forma de hackeo para mostrar esto como el número de versión.

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

Respondida el 03/08/2008 a las 07:46
fuente por usuario engtech

votos
2

[Visual Studio 2017, Csproj propiedades]

Para actualizar automáticamente su propiedad PackageVersion / Versión / AssemblyVersion (o cualquier otra propiedad), en primer lugar, crear una nueva Microsoft.Build.Utilities.Taskclase que hará que su número de versión actual y enviar de vuelta el número actualizado (recomiendo para crear un proyecto separado sólo por esa clase).

Puedo actualizar manualmente los números MAJOR.MINOR, ¡pero MSBuild para actualizar 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;
    }

}

A continuación, llame a su reciente creación de tareas en proceso de MSBuild de añadir el siguiente código en el archivo de .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 escoger la opción de proyecto de Visual Studio Pack (sólo cambia a BeforeTargets="Build"para la ejecución de la tarea antes de la Estructura) el código RefreshVersion se activará para calcular el nuevo número de versión y XmlPokela tarea se actualizará su propiedad .csproj en consecuencia (sí, va a modificar el archivo).

Cuando se trabaja con bibliotecas NuGet, también enviar el paquete a repositorio NuGet con sólo añadir la siguiente tarea de construcción para el 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\nugetes donde tengo el cliente NuGet (no olvide guardar su clave API NuGet llamando nuget SetApiKey <my-api-key>o incluir la clave en el impulso de llamadas NuGet).

Sólo en caso de que ayuda a alguien ^ _ ^.

Respondida el 10/05/2017 a las 11:08
fuente por usuario Nacho Coll

votos
1

Hace algún tiempo escribí un exe rápido y sucio que actualizaría los # de la versión en un assemblyinfo. {Cs / vb} - También he usado 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 consejos sobre otras herramientas de ayuda:

  1. separe la información de montaje en partes del producto (nombre de la empresa, versión, etc.) y piezas específicas del ensamblaje (nombre del ensamblaje, etc.). Mira aquí
  2. Además, utilizo subversión, por lo que me pareció útil establecer el número de compilación en el número de revisión de subversión, lo que hace que sea realmente fácil volver siempre a la base de código que generó el ensamblado (por ejemplo, 1.4.100.1502 se creó a partir de la revisión 1502).
Respondida el 04/08/2008 a las 08:51
fuente por usuario caryden

votos
0

Si desea un número incremental de automóviles que se actualiza cada vez que se realiza una compilación, puede utilizar VersionUpdater de un evento de pre-construcción. Su evento pre-build puede comprobar la configuración de generación, si lo prefiere de manera que el número de versión sólo se incrementará para una versión de lanzamiento (por ejemplo).

Respondida el 28/02/2010 a las 10:16
fuente por usuario user283258