如何最好地使用文件版本和汇编版本?

Posted

技术标签:

【中文标题】如何最好地使用文件版本和汇编版本?【英文标题】:How best to use File Version and Assembly Version? 【发布时间】:2010-09-06 02:22:15 【问题描述】:

在 .NET 中,构建项目时有两个可用的版本号,文件版本和程序集版本。你是如何使用这些数字的?让它们保持不变?自动增加一个,但手动更改另一个?

还有AssemblyInformationalVersion 属性呢?

我发现这篇 Microsoft 知识库 (KB) 支持文章提供了一些帮助:How to use Assembly Version and Assembly File Version。

【问题讨论】:

这个答案总结得最好:***.com/a/65062/244353 【参考方案1】:

我让它们保持不变。但是,我没有多文件程序集,这是 AssemblyVersion 编号变得重要的时候。我对内部版本号使用 Microsoft 风格的日期编码,而不是自动递增(我没有发现构建某物的次数有那么重要)。

【讨论】:

我同意,但是有时使用一个值来指示在不更改源代码的情况下进行重建是很有用的,例如当构建命令被稍微改变以纠正特定问题时。【参考方案2】:

在我有多个文件程序集(即 1 个 exe 和 5 个 dll)的情况下,我将为每个文件使用不同的文件版本,但对所有文件使用相同的程序集版本,让您知道每个 dll 的 exe一起去吧。

【讨论】:

如果您有多个具有不同程序集版本的 exe,具体取决于某些共享 dll,该怎么办?这种方法不是通用的。 我建议反其道而行之。保留特定于每个 DLL 的程序集版本(因为对于 .NET 和 Windows,这是“重要”的数字),并使用文件版本来同步“发布”标识符。【参考方案3】:

@Adam:您是否在每次构建时更改文件版本?您是否使用版本控制(SYN 或 VSS)并使用该信息将源链接回二进制文件?

Assembly 版本保持不变似乎是有道理的。即“2.0.0.0”。这对应于产品的部署。

文件版本更改以匹配源代码管理中的修订。 "2.0.??.revision" 这将提供从特定 dll(或 exe)到构建它的源的链接。

【讨论】:

【参考方案4】:

在具有多个项目的解决方案中,我发现非常有用的一件事是让所有 AssemblyInfo 文件都指向一个管理版本控制的项目。所以我的 AssemblyInfos 有一行:

[assembly: AssemblyVersion(Foo.StaticVersion.Bar)]

我有一个项目,其中有一个声明字符串的文件:

namespace Foo

    public static class StaticVersion
    
         public const string Bar= "3.0.216.0"; // 08/01/2008 17:28:35
    

然后我的自动构建过程只是通过从数据库中提取最新版本并增加倒数第二个数字来更改该字符串。

我只在功能集发生巨大变化时更改主要版本号。

我根本不更改文件版本。

【讨论】:

【参考方案5】:

知识库文章提到了最重要的区别:文件版本仅用于显示目的,而程序集版本在 .NET 加载行为中起着重要作用。

如果您更改了程序集版本号,那么您的程序集作为一个整体的身份已经改变。开发人员将需要重新构建以引用您的新版本(除非您设置了一些自动版本控制“策略”),并且在运行时只会加载具有匹配版本号的程序集。

这在我的环境中很重要,我们需要一个递增的、高度可见的版本号用于审计目的,但我们不想强迫开发人员重新构建或在生产中同时拥有多个版本。在这种情况下,对于向后兼容的微小更改,我们会更新文件版本,而不是程序集版本。

【讨论】:

【参考方案6】:

文件版本仅用于显示目的,而程序集版本在 .NET 加载行为中起着重要作用。

不完全是。当您将现有版本升级到以前的版本时,文件版本对于 Windows Installer 也很重要。

【讨论】:

【参考方案7】:

在我当前的应用程序中,每个 VS 项目都有一个指向“AssemblyBuildInfo”源文件的链接,该文件具有以下属性:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyCompany("Acme Corporationy")]
[assembly: AssemblyCopyright("Copyright ©  2009 Acme Corporation")]

这样,我的解决方案中的所有程序集共享相同的版本和公司信息(这意味着如果我必须更改它,我只更改一次)。通过排除 FileVersion,它会自动设置为 AssemblyVersion。

【讨论】:

【参考方案8】:

我写了一篇关于这个主题的博文,可能对社区有用http://blog.raffaeu.com/archive/2011/12/11/sharing-assembly-version-in-visual-studio-2010.aspx

【讨论】:

以上是关于如何最好地使用文件版本和汇编版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Socket.IO 最好地构建 Express V4.11+ 项目?

TortoiseSVN如何使用啊,最好是有图有真相,小弟初来炸到,分数不够,敬请谅解!

版本控制如何与 Flex 远程对象和 AMF 一起使用?

如何根据目标机器(32 位或 64 位)有条件地使用 WiX 安装文件?

如何方便地强制 CMAKE 使用特定版本的静态库文件?

如何在不使用 Javascript 的情况下最好地重定向网页?