如何最好地使用文件版本和程序集版本?

在.NET中,构build项目时有两个版本号,即文件版本和组件版本。 你怎么使用这些数字? 保持不变? 自动增加一个,但手动更改另一个?

另外AssemblyInformationalVersion属性呢?

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

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

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

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

我有一个单独的文件声明string的项目:

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

我的自动构build过程然后只是通过从数据库中拉取最新版本并递增第二个数字来更改该string。

当function集显着变化时,我只更改主版本号。

我根本不更改文件版本。

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

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

这在我的环境中非常重要,我们需要一个增量的,高度可见的版本号用于审计目的,但是我们不希望强制开发者重build或者在生产中同时有很多版本。 在这种情况下,为了向后兼容较小的更改,我们更新文件版本,但不更新程序集版本。

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

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

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

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

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

@Adam:你正在改变每个版本的文件版本? 您是否使用版本控制(SYN或VSS)并使用该信息将源代码链接回二进制文件?

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

文件版本更改以匹配源代码pipe理的修订版本。 “2.0.??.revision”这将提供从一个特定的DLL(或EXE)到它的源的链接。

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

我保持不变。 但是,我没有多文件程序集,这是AssemblyVersion编号变得重要的时候。 我使用微软风格的date编码为我的内部版本号,而不是自动递增(我没有find的东西已被build立的次数是重要的)。