55

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

还有AssemblyInformationalVersion属性呢?

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

4

8 回答 8

76

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

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

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

我根本不更改文件版本。

于 2008-08-18T16:03:33.223 回答
22

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

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

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

于 2008-08-18T17:25:54.400 回答
14

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

于 2008-08-18T15:20:59.377 回答
13

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

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

于 2009-11-12T16:42:09.397 回答
12

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

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

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

于 2009-11-12T16:48:08.213 回答
3

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

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

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

于 2008-08-18T15:55:13.053 回答
2

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

于 2011-12-11T22:14:30.783 回答
0

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

于 2008-08-18T15:11:51.580 回答