visual versiones tutorial tool team studio source control book c# .net version-control version versioning

c# - versiones - FileVersionInfo y AssemblyInfo



team foundation version control tool (1)

Dado este fragmento de código de Blah.dll''s AssemblyInfo.cs:

[assembly: AssemblyVersion("3.3.3.3")] [assembly: AssemblyFileVersion("2.2.2.2")]

Y luego en un .exe separado:

var fileInfo = FileVersionInfo.GetVersionInfo("/path/to/Blah.dll"); fileInfo.ProductVersion == fileInfo.FileVersion == true;

Otras preguntas de SO muestran que ProductVersion es "correcto", curiosidad por saber si hay algo extraño acerca de cómo lo estoy usando.

¿No debería ser ProductVersion "3.3.3.3" y FileVersion ser "2.2.2.2"? ¿Qué haría que reportara ambas propiedades como AssemblyFileVersion?


Encontré la respuesta originalmente here . Estoy repitiendo los detalles para facilitar la referencia.

Hay tres ''versiones'' que pueden incluirse en el archivo AssemblyInfo.cs:

[assembly: AssemblyVersion("1.1.1.1")] [assembly: AssemblyInformationalVersion("2.2.2.2")] [assembly: AssemblyFileVersion("3.3.3.3")]

AssemblyInformationalVersion defecto es AssemblyFileVersion si no se especifica. Del mismo modo, AssemblyInformationalVersion y AssemblyFileVersion predeterminan a AssemblyVersion si no se especifican ambos.

En su ejemplo, el archivo AssemblyInfo.cs no incluyó AssemblyInformationalVersion , por lo que el valor predeterminado es AssemblyFileVersion . Como verá a continuación, AssemblyInformationalVersion asigna a la propiedad FileVersionInfo.ProductVersion , lo que explica por qué la prueba devuelve true.

Obviamente, hay un par de aspectos frustrantes de esto. Primero, no hay forma (que yo sepa) de establecer la AssemblyInformationalVersion desde Visual Studio. Debe modificar el archivo AssemblyInfo.cs directamente para incluir este atributo. En segundo lugar, AssemblyInformationalVersion asigna a la propiedad FileVersionInfo.ProductVersion , que no es intuitiva. El atributo debería ser más apropiadamente llamado AssemblyProductVersion . Y al parecer, un título es también una descripción , etc.

Dicho esto, ¿cómo recuperamos estos valores (y los relacionados) en el código? Me gusta esto:

AssemblyFileVersion => System.Diagnostics.FileVersionInfo.FileVersion AssemblyInformationalVersion => System.Diagnostics.FileVersionInfo.ProductVersion AssemblyVersion => System.Reflection.Assembly.Version /// others... AssemblyTitle => System.Diagnostics.FileVersionInfo.FileDescription AssemblyDescription => System.Diagnostics.FileVersionInfo.Comments AssemblyProduct => System.Diagnostics.FileVersionInfo.ProductName AssemblyCompany => System.Diagnostics.FileVersionInfo.CompanyName AssemblyCopyright => System.Diagnostics.FileVersionInfo.LegalCopyright AssemblyTrademark => System.Diagnostics.FileVersionInfo.LegalTrademarks

En el caso de AssemblyVersion , usa esto:

string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();