FileVersionInfo y AssemblyInfo

Dado este fragment de AssemblyInfo.cs de Blah.dll:

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

Y luego en un .exe por separado:

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

Otras preguntas de SO muestran que ProductVersion es "correcto", curioso 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é provocaría que informe ambas properties como AssemblyFileVersion?

¡Gracias!

Encontré la respuesta originalmente aquí . Estoy repitiendo los detalles para facilitar la reference.

Hay tres 'versiones' que se pueden include en el file AssemblyInfo.cs:

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

AssemblyInformationalVersion pnetworkingeterminada en AssemblyFileVersion si no está especificado. Del mismo modo, AssemblyInformationalVersion y AssemblyFileVersion configuran por defecto en AssemblyVersion si no se especifican ambos.

En su ejemplo, el file AssemblyInfo.cs no incluía AssemblyInformationalVersion , por lo que tiene el valor pnetworkingeterminado de AssemblyFileVersion . Como verá a continuación, AssemblyInformationalVersion asigna a la propiedad FileVersionInfo.ProductVersion , lo que explica por qué la testing es verdadera.

Obviamente, hay un par de aspectos frustrantes en esto. En primer lugar, no hay forma (que yo sepa) de configurar AssemblyInformationalVersion desde Visual Studio. Debe modificar el file AssemblyInfo.cs directamente para include este atributo. En segundo lugar, AssemblyInformationalVersion asigna a la propiedad FileVersionInfo.ProductVersion , que no es intuitiva. El atributo debería llamarse apropiadamente AssemblyProductVersion .

Dicho esto, ¿cómo recuperamos estos valores en el código? Me gusta esto:

 AssemblyFileVersion => System.Diagnostics.FileVersionInfo.FileVersion AssemblyInformationalVersion => System.Diagnostics.FileVersionInfo.ProductVersion AssemblyVersion => System.Reflection.Assembly.Version 

En el caso de AssemblyVersion , use esto:

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