首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileVersionInfo和AssemblyInfo

FileVersionInfo和AssemblyInfo
EN

Stack Overflow用户
提问于 2010-12-17 06:31:00
回答 1查看 16K关注 0票数 31

给定Blah.dll的AssemblyInfo.cs中的以下代码片段:

代码语言:javascript
复制
[assembly: AssemblyVersion("3.3.3.3")]
[assembly: AssemblyFileVersion("2.2.2.2")]

然后在一个单独的.exe中:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-17 07:41:15

我找到了最初的答案here。为了便于参考,我重复了一遍细节。

AssemblyInfo.cs文件中可以包含三个“版本”:

代码语言:javascript
复制
[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的情况下,使用以下命令:

代码语言:javascript
复制
string ver = Assembly.GetExecutingAssembly().GetName().Version.ToString();
票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4466019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档