关于.net:如何最好地使用文件版本和汇编版本?

关于.net:如何最好地使用文件版本和汇编版本?

How best to use File Version and Assembly Version?

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

还有AssemblyInformationalVersion属性呢?

我发现这个支持Microsoft知识库(KB)的文章提供了一些帮助:如何使用汇编版本和汇编文件版本。


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

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

我有一个项目,只有一个文件声明字符串:

1
2
3
4
5
6
7
namespace Foo
{
    public static class StaticVersion
    {
         public const string Bar="3.0.216.0"; // 08/01/2008 17:28:35
    }
}

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

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

我根本不更改文件版本。


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

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

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


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


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

1
2
3
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyCompany("Acme Corporationy")]
[assembly: AssemblyCopyright("Copyright ?  2009 Acme Corporation")]

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


File versions are only used for display purposes, whereas the assembly version plays an important part in the .NET loading behaviour.

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


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

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

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


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


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


推荐阅读