AssemblyInformationalVersion

AssemblyInformationalVersion

在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/

10-13 08:35