Encontré la respuesta originalmente here. Estoy repitiendo los detalles para facilitar la referencia.
Hay tres 'versiones' que se pueden incluir en el archivo AssemblyInfo.cs:
[assembly: AssemblyVersion("1.1.1.1")]
[assembly: AssemblyInformationalVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]
AssemblyInformationalVersion
por defecto AssemblyFileVersion
si no se especifica. Del mismo modo, AssemblyInformationalVersion
yAssemblyFileVersion
por defecto a AssemblyVersion
si ambos no se especifican.
En su ejemplo, el archivo AssemblyInfo.cs no incluía AssemblyInformationalVersion
, por lo que su valor predeterminado es AssemblyFileVersion
. Como verá a continuación, AssemblyInformationalVersion
se mapea en la propiedad FileVersionInfo.ProductVersion
, lo que explica por qué la prueba es verdadera.
Obviamente, hay un par de aspectos frustrantes en esto. En primer lugar, no hay forma (que yo sepa) de establecer el AssemblyInformationalVersion
desde Visual Studio. Debe modificar el archivo AssemblyInfo.cs directamente para incluir este atributo. En segundo lugar, AssemblyInformationalVersion
se asigna a la propiedad FileVersionInfo.ProductVersion
, que no es intuitiva. El atributo debería llamarse más apropiadamente AssemblyProductVersion
.
Dicho esto, ¿cómo recuperamos estos valores en el código? De esta manera:
AssemblyFileVersion => System.Diagnostics.FileVersionInfo.FileVersion
AssemblyInformationalVersion => System.Diagnostics.FileVersionInfo.ProductVersion
AssemblyVersion => System.Reflection.Assembly.Version
En el caso de AssemblyVersion
, utilice esto:
string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();
... y ¿cuál es la pregunta? – Vlad
aclarado, gracias :-) – ecoffey