引用dll时忽略内部版本号

bri*_*ner 2 .net dll version visual-studio

我有一个.NET 4.0项目(C#)的解决方案,它生成一个延迟签名的dll,我进行dotfuscate和签名.

编辑:这是我如何版本的DLL:

[assembly: AssemblyVersion("0.7.0.*")]
[assembly: AssemblyFileVersion("0.7.0.0")]
Run Code Online (Sandbox Code Playgroud)

我有一个.NET 4.0项目(C++/CLI)的另一个解决方案,它引用了签名的dll并生成一个签名的dll(实际上,由于C++构建系统的缺陷,在后期构建中延迟签名和签名).

问题是对dll的引用包含一个特定的版本号,甚至包括构建号(我想要一个构建号).

每次构建引用的dll时,我都必须更改项目设置文件(.vcxproj),以便引用新版本的dll.由于我使用源代码控制,这非常不方便(不同的计算机可能有不同的构建号,因为每台计算机都构建自己引用的dll - 引用的dll不在源代码控制中).

如果我不更改参考,我会收到警告:

警告MSB3245:无法解析此引用.找不到装配件......

还有很多这样的错误:

错误C3083:'Foo':'::'左边的符号必须是一个类型

一旦我更改了引用,就会解决这些问题.

如何使引用忽略内部版本号甚至整个版本号?

Han*_*ant 5

C#IDE有一个选项,"特定版本=假".在C++/CLI IDE中不可用.坦率地说,这不是一个真正的问题.您可能错误地使用[AssemblyVersion]属性.该版本与程序集中公开可见的类相关联.如果您对这些类的公共成员进行任何更改,那么您可能会发生一个可能会发生的重大更改,从而导致对这些类具有依赖性的代码失败.

这一点上,你应该改变[的AssemblyVersion.任何使用程序集的项目都必须更新其引用程序集,并且必须重新编译.

一个非破坏性的更改,如错误修复或非可见类中的调整,会生成一个新文件,否则与使用它的任何项目完全兼容.您应该更新[AssemblyFileVersion]号码.在C++/CLI项目中需要更新非托管版本资源.更改相应的.rc文件可以自动执行,也可以使用#define.

请注意版本2.0中的.NET基本程序集的行为方式相同.他们的[AssemblyVersion]在3.0,3.5和3.5 SP1版本中保持在2.0.0.0.他们的文件版本从2.0.50727.42开始.并且在过去的5年中增加了很多倍,达到2.0.50727.4927,给予或接受.

为了记录,您链接的VS2010错误不是错误.它从来没有工作过,失败是沉默的.这是C++构建系统中的一个缺陷,mt.exe 在程序集强名嵌入清单.并在此过程中打破强名称,因为它会更改文件哈希值.VS2010实际上是一种改进,它警告它,而不是默默地让一个破碎的强名称通过.您不必延迟签名,只能在后期构建事件中使用-Ra辞职.