C#中的AssemblyFileVersion有什么用?

11
在 assemblyInfo.cs 文件中,我有 AssemblyVersion 和 AssemblyFileVersion 两项。
通常我只增加 AssemblyVersion,例如: 第一位数字:主要更改 第二位数字:次要更改 第三位数字:修复 bug 第四位数字:子版本修订号
然而,我想知道 AssemblyFileVersion 是用来干什么的,以及何时需要增加它?它应该与 assemblyVersion 相同吗?
如果我不使用 AssemblyFileVersion,是否应该将其注释掉?
非常感谢任何建议。
5个回答

15

AssemblyVersion用于.NET类加载器,用于标识程序集的.NET版本。AssemblyFileVersion代表Windows PE文件中标准VERSION_INFO块中包含的文件版本...换句话说,它代表在文件属性对话框中看到的文件版本。

如果您省略了AssemblyFileVersion,则编译器将默认其与AssemblyVersion相同。


我没有使用它。所以只是将其注释掉是完全安全的吗? - ant2009
它不会破坏你的构建。从维护的角度来看,能够识别程序集文件版本是很好的(例如将错误与版本映射)。 - Russell
它还可以帮助在运行时防止依赖问题,因为如果依赖项具有不正确的文件版本,则您的项目将无法构建。 - Russell
1
@robUK:是的,你可以将其注释掉。编译器会为您处理并将其放入VERSION_INFO块中,其值与AssemblyVersion中的值相同。 - Scott Dorman
2
@Russell:从维护角度来看,文件版本可以很有帮助,但如果未提供的话,它将默认为程序集版本,因此您仍然可以识别版本。至于依赖项问题,这基于程序集版本,而不是文件版本。 - Scott Dorman

5
通常,文件版本比程序集版本更加精确。例如:System.Windows.Form.dll - 程序集版本:2.0.0.0,文件版本:2.0.50727.3053。
当加载一个程序集时,程序集版本是一个重要的信息。
所以,如果你在引用的程序集中发现了一个小错误,你可以修复该错误,更新文件版本,但保持相同的程序集版本。这样做的好处是:你不需要将对该程序集的引用重新链接到新版本,并且通过文件版本可以知道你的文件的当前修订版。

这件事情真正令人恼火的是,Assembly.cs文件中的文件版本条目不像程序集版本那样接受“.*”。 - AnthonyWJones

3
我不是专家,也许我引用的也不是专家,但据我理解,AssemblyVersion大体上是关于“接口”的——即程序集的功能、向后兼容等等。而AssemblyFileVersion则更多地涉及实现方面,如构建等。
使用AssemblyVersion属性指定“最后兼容版本”,使用AssemblyFileVersion属性指定构建版本。
-> http://www.shitalshah.com/blog/IsJeffRichterScrewingUpTheNetVersioning.aspx //还有一件事。
在某些情况下(关于这一点我并不太清楚,因为我只是听说过而没有真正经历过),如果您尝试使用GAC中的dll更新应用程序,除非文件版本已更改,否则旧版本的dll将不会被新版本覆盖,即使它们具有相同的Assembly Version号码。(这句话够复杂吗?现在很晚了...)

3

安装程序将使用AssemblyFileVersion来确定是否根据版本覆盖文件。

需要注意的是,更改实现序列化的程序集的AssemblyVersion在尝试从之前的版本进行反序列化时会产生一些严重后果。


2

AssemblyFileVersion 用于在 Win32 资源中设置版本信息,这是您在资源管理器中打开文件属性窗口时看到的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接