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

本文关键字:Studio 工作 Visual 何使自 版本号 | 更新日期: 2023-09-27 17:55:51

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

[汇编: 汇编版本("1.0.*")]

它生成一个我想要的数字。

但是,代码库有数百个 DLL,其中许多 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:'Work'Source Code'Library'Library2'bin'Release'Library2.dll.

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

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

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

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 作为内部版本号,并接受默认修订号。默认内部版本号每天递增。默认修订号是随机的。

如果获得完全正确的版本控制至关重要,我强烈建议您使用第三方解决方案。构建版本增量加载项非常出色。

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

"内部版本增量"加载项为您提供了对增量内容的精细控制,以便正确执行此操作。这可能是一开始就应该包含在 VS 中的内容。

这实际上是一个非常深入的问题,我希望有人为您详细回答这个问题,但是在您控制程序集信息后,我的 2 美分是您应该考虑使用 Nuget 来管理您的依赖项。这样,当团队 A 发布程序集 X 的 v2 时,他们所做的只是将其放在 Nuget 存储库(可能是网络共享)上,然后基本上可以在使用 DLL 的项目内右键单击<更新。>

我还建议查看 http://semver.org/并使用语义版本控制,如果您不想遵循这样的系统(或为您的商店制定类似的标准),甚至可能不值得尝试对您的 DLL 进行版本控制,您只会给自己带来巨大的麻烦。但是,使用语义版本控制会使您的版本号实际上有意义。而不仅仅是感觉像被标记到当前版本上的东西。

请注意,修订号不是随机的。这是构建的时间。内部版本是日期数字。

请参阅可视化工作室:将构建版本转换为日历日期

删除引用(在使用它的项目中),然后通过指向项目引用类型来重新执行它。

PS:如果在添加引用时,选择浏览并指向dll将始终存在的位置,则引用不会中断!

   > However, the code library has many hundreds of DLLs,

如果所有源项目及其生成的 dll-s 具有相同的版本号对您来说没问题,您可以将版本号放入一个在所有 dll 之间共享的文件中,如中所述共享大会信息.cs。因此,如果有新的版本/版本,您(或您正在使用的版本号生成器)只需更新一个文件。

这并不能回答您最初的问题,但可能是依赖项问题的简单工作。