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':'::'左边的符号必须是一个类型
一旦我更改了引用,就会解决这些问题.
如何使引用忽略内部版本号甚至整个版本号?
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辞职.
| 归档时间: |
|
| 查看次数: |
3177 次 |
| 最近记录: |