我最初找到了答案here http://bytes.com/topic/visual-basic-net/answers/368348-assemblyversion-fileversion。为了便于参考,我重复了一些细节。
AssemblyInfo.cs 文件中可以包含三个“版本”:
[assembly: AssemblyVersion("1.1.1.1")]
[assembly: AssemblyInformationalVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]
AssemblyInformationalVersion
默认为AssemblyFileVersion
如果没有指定。同样地,AssemblyInformationalVersion
and AssemblyFileVersion
默认为AssemblyVersion
如果两者均未指定。
在您的示例中,AssemblyInfo.cs 文件不包括AssemblyInformationalVersion
,所以它的默认值为AssemblyFileVersion
。正如您将在下面看到的,AssemblyInformationalVersion
映射到FileVersionInfo.ProductVersion
属性,这解释了为什么测试返回 true。
显然,这有几个令人沮丧的方面。首先,(据我所知)没有办法设置AssemblyInformationalVersion
来自视觉工作室。您必须直接修改 AssemblyInfo.cs 文件以包含此属性。第二,AssemblyInformationalVersion
映射到FileVersionInfo.ProductVersion
属性,这是非直观的。该属性应该更合适地命名AssemblyProductVersion
。显然,一个title也是一个描述, etc.
也就是说,我们如何在代码中检索这些(和相关的)值?像这样:
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
如果是AssemblyVersion
, 用这个:
string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();