给定Blah.dll的AssemblyInfo.cs中的以下代码片段:
[assembly: AssemblyVersion("3.3.3.3")]
[assembly: AssemblyFileVersion("2.2.2.2")]然后在一个单独的.exe中:
var fileInfo = FileVersionInfo.GetVersionInfo("/path/to/Blah.dll");
fileInfo.ProductVersion == fileInfo.FileVersion == true;其他的问题显示ProductVersion是“正确的”,好奇我使用它的方式是否有什么奇怪的地方。
ProductVersion不应该是"3.3.3.3“,FileVersion不应该是"2.2.2.2”吗?是什么原因导致它将这两个属性都报告为AssemblyFileVersion?
发布于 2010-12-17 07:41:15
我找到了最初的答案here。为了便于参考,我重复了一遍细节。
AssemblyInfo.cs文件中可以包含三个“版本”:
[assembly: AssemblyVersion("1.1.1.1")]
[assembly: AssemblyInformationalVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]如果未指定AssemblyInformationalVersion,则默认为AssemblyFileVersion。同样,如果未指定AssemblyInformationalVersion 和 AssemblyFileVersion,则默认为AssemblyVersion。
在您的示例中,AssemblyInfo.cs文件不包含AssemblyInformationalVersion,因此它的默认值为AssemblyFileVersion。正如您将在下面看到的,AssemblyInformationalVersion映射到FileVersionInfo.ProductVersion属性,这解释了为什么测试返回true。
显然,这其中有几个令人沮丧的方面。首先,(据我所知)无法从Visual Studio中设置AssemblyInformationalVersion。您必须直接修改AssemblyInfo.cs文件以包含此属性。其次,AssemblyInformationalVersion映射到FileVersionInfo.ProductVersion属性,这是不直观的。该属性应该更恰当地命名为AssemblyProductVersion。显然,标题也是一种描述,等等。
也就是说,我们如何在代码中检索这些(和相关的)值?如下所示:
System.Diagnostics.FileVersionInfo.FileVersion System.Diagnostics.FileVersionInfo.ProductVersion
AssemblyFileVersion => AssemblyInformationalVersion => AssemblyVersion => System.Reflection.Assembly.Version /其他...System.Diagnostics.FileVersionInfo.LegalCopyright System.Diagnostics.FileVersionInfo.ProductName System.Diagnostics.FileVersionInfo.CompanyName => AssemblyDescription System.Diagnostics.FileVersionInfo.LegalTrademarks AssemblyTitle => AssemblyDescription => System.Diagnostics.FileVersionInfo.Comments AssemblyProduct => AssemblyCompany => AssemblyCopyright => AssemblyTrademark =>=>
在AssemblyVersion的情况下,使用以下命令:
string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();https://stackoverflow.com/questions/4466019
复制相似问题