我被要求在代码库中为程序集添加自动编号。我一直在将版本从默认的1.0.0.0更改为1.0。*像这样:
[assembly: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:\Work\Source Code\Library\Library2\bin\Release\Library2.dll.
版本1.0.4146.17993不正确 - DLL具有更高的值。 DLL被设置为Copy Local,因为我们提供的软件需要它(不要问为什么)。本地复制的DLL是具有更高版本号的DLL,这是我们想要的那个。
到目前为止,我已尝试更改引用以将“特定版本”标志设置为false,但这没有帮助。
答案 0 :(得分:8)
使用1.0.*
语法时VS生成的版本号不一定会在序列中递增。 documentation有这样的说法(强调补充):
您可以指定所有值,也可以使用星号()接受默认的内部版本号,修订号或两者。例如,[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中。
答案 1 :(得分:3)
这实际上是一个非常深入的问题,我希望有人能够为您详细解答这个问题,但是在您控制了汇编信息后我的2美分是您应该使用Nuget
来管理您的依赖关系。这样,当团队A发布程序集X的v2时,他们所做的只是把它放在你的Nuget repo(可能是网络共享)上然后你基本上可以右键单击<在使用DLL的项目中更新。
我还建议查看http://semver.org/并使用语义版本控制,如果您不想按照这样的系统(或为您的商店制定类似的标准),它甚至可能不值得尝试版本你的DLL你只会给自己带来巨大的麻烦。但是,使用语义版本控制将使您的版本号实际上意味着什么。而且不仅仅是感觉被标记到当前版本。
答案 2 :(得分:1)
请注意,修订号不是随机的。这是构建的时间。 Build是日期编号。
请参阅VisualStudio: translating a build version to a calendar date
答案 3 :(得分:0)
删除您的引用(在使用它的项目中)并通过指向项目引用类型重新执行它。
PS:如果您在添加引用时,选择浏览并指向dll将始终存在的位置,引用将不会被破坏!
答案 4 :(得分:0)
> However, the code library has many hundreds of DLLs,
如果您可以将所有源项目及其生成的dll-s具有相同的版本号,则可以将versionnumber放入一个在所有dll之间共享的文件中,如 shared AssemblyInfo.cs。因此,如果有新的版本/版本,您(或您正在使用的版本号生成器)必须只更新一个文件。
这不能回答您的原始问题,但可能是依赖问题的简单工作方法。