在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;
其他的SO问题显示ProductVersion是“正确的”,好奇我的使用方式是否有些奇怪。
ProductVersion不应为“3.3.3.3”,FileVersion为“2.2.2.2”吗?是什么导致它将两个属性都报告为AssemblyFileVersion?
最佳答案
我最初找到了答案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
。显然,标题也是描述等。也就是说,我们如何在代码中检索这些(和相关的)值?像这样:
对于
AssemblyVersion
,请使用以下命令:string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();
关于c# - FileVersionInfo和AssemblyInfo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4466019/