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

时间:2008-08-18 15:10:13

标签: .net attributes versions

在.NET中,构建项目时可以使用两个版本号,文件版本和汇编版本。你是如何使用这些数字的?保持不变?自动递增一个,但手动更改另一个?

那么AssemblyInformationalVersion属性呢?

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

8 个答案:

答案 0 :(得分:74)

在具有多个项目的解决方案中,我发现非常有用的一件事是让所有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
    }
}

我的自动构建过程只需通过从数据库中提取最新版本并递增最后一个数字来更改该字符串。

我只在功能组发生显着变化时更改主要版本号。

我根本不更改文件版本。

答案 1 :(得分:22)

KB文章提到了最重要的区别:文件版本仅用于显示目的,而汇编版本在.NET加载行为中起着重要作用。

如果更改了程序集版本号,则整个程序集的标识已更改。开发人员需要重建以引用您的新版本(除非您将一些自动版本化“策略”放在适当的位置),并且在运行时只会加载具有匹配版本号的程序集。

这在我的环境中非常重要,我们需要一个递增的,高度可见的版本号用于审计目的,但我们不希望强制开发人员在生产中同时重建或同时拥有许多版本。在这种情况下,对于向后兼容的次要更改,我们更新文件版本,但不更新程序集版本。

答案 2 :(得分:14)

在我有多个文件程序集(即1个exe和5个dll)的情况下,我将为每个文件使用不同的文件版本,但是对于所有这些文件都使用相同的程序集版本,这样您就可以知道每个dll的exe文件跟着。

答案 3 :(得分:12)

  

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

不完全。升级现有版本时,文件版本对于Windows Installer也很重要。

答案 4 :(得分:12)

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

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

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

答案 5 :(得分:3)

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

似乎有意义的是大会版本保持不变。即“2.0.0.0”。这与产品的部署相对应。

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

答案 6 :(得分:2)

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

答案 7 :(得分:0)

我保持不变。但是,我没有多文件程序集,这是AssemblyVersion编号变得重要的时候。我使用Microsoft风格的日期编码来构建我的内部编号,而不是自动递增(我没有找到构建内容的次数非常重要)。