如何在Visual Studio中使自动版本号工作

我被要求在我们的代码库中为程序集添加自动编号。 我一直在将版本从默认1.0.0.0更改为1.0 *,如下所示:

[汇编:AssemblyVersion(“1.0。*”)]

它会根据我的需要生成一个数字。

但是,代码库有数百个DLL,其中很多都是相互引用的。 现在当我编译一些项目时,他们抱怨引用组件所需的DLL版本不正确,并且它们不会生成:(

我该如何做这项工作? 我们需要它,以便在编译代码库层次结构底部的DLL时,所有其他引用它的DLL都可以正常工作,而无需重新编译。

我得到的错误是这样的:

Error   1   CA0058 : The referenced assembly 'Library1, Version=1.0.4146.17993
, Culture=neutral, PublicKeyToken=d9c65edd2096ad48' could not be found. This assembly
is required for analysis and was referenced by:
D:WorkSource CodeLibraryLibrary2binReleaseLibrary2.dll.

版本1.0.4146.17993不正确 - DLL具有更高的值。 因为我们提供的软件需要它(不要问为什么),DLL被设置为复制本地。 本地复制的DLL是具有较高版本号的DLL,这是我们希望的版本号。

到目前为止,我已经尝试更改引用来将“特定版本”标志设置为false,但这没有帮助。


VS在使用1.0.*语法时生成的版本号不一定按顺序递增。 该文件有这个说法(强调增加):

您可以指定所有值,或者您可以使用星号()来接受默认版本号,修订版本号或两者。 例如,[assembly:AssemblyVersion(“2.3.25.1”)]表示2为主要版本,3表示次要版本,25表示内部版本号,1表示版本号。 诸如[assembly:AssemblyVersion(“1.2。”)]的版本号指定1为主要版本,2为次要版本,并接受默认版本号和修订版号。 版本号如[assembly:AssemblyVersion(“1.2.15。*”)]指定1为主要版本,2为次要版本,15为内部版本号,并接受默认版本号。 默认的内部版本号每天增加。 默认版本号是随机的。

如果您认为版本控制非常重要,我强烈建议您使用第三方解决方案。 Build Version Increment加载项非常出色。

你想要做的是自己管理汇编版本。 只有在对程序集的公共接口进行重大更改时才增加此值。 即使您没有更改代码中的内容,更改此属性也会使您的程序集与引用它的其他程序集不兼容。 相反,你想自动增加的唯一东西是程序集文件版本。 与程序集版本不同,CLR不检查此属性以确定兼容性。

构建版本增量加载项为您提供了对于增加所需内容的细粒度控制,从而使您获得正确的结果。 这可能应该包含在VS开始。


这实际上是一个相当深奥的问题,我希望有人能够为你详细解答这个问题,但是在你掌握程序集信息后,我的2分钱是你应该看看使用Nuget来管理你的依赖关系。 这样,当团队A发布组件X的v2时,他们所做的一切就是将其放在您的Nuget仓库(可能是网络共享)上,然后您可以右键单击使用该DLL的项目中的<update。

我还建议查看http://semver.org/并使用语义版本控制,如果你不想遵循像这样的系统(或为你的商店制定类似的标准),那么甚至可能不值得尝试版本你的DLL,你只会给自己头痛的问题。 然而,使用语义版本控制会让你的版本号码实际上是一些东西。 而不仅仅是想被标记到当前版本上。


请注意,版本号不是随机的。 这是建立的时间。 Build是日期编号。

请参阅VisualStudio:将构建版本转换为日历日期

链接地址: http://www.djcxy.com/p/86113.html

上一篇: How do I make automatic version numbers work in Visual Studio

下一篇: breaking changes in .NET