今天在编译添加了程序集签名的工程的时候,意外遇到如下错误,试了很多方法都不见效。
下面是错误信息:
CA0001 : 读取模块“***”时遇到以下错误: 无法解析程序集引用: ***.Common.NormalModel, Version=1.0.4629.31944, Culture=neutral, PublicKeyToken=366fc8dc0356ba75
CA0058 : 未能找到引用的程序集“***.Common.NormalModel, Version=1.0.4629.31944, Culture=neutral, PublicKeyToken=366fc8dc0356ba75”。此程序集是分析所必需的且已由 E:\WorkSpace\***Client.exe 引用。
在网上搜索了同样的问题,看到了http://stackoverflow.com/questions/4042855/assembly-binding-redirection-and-code-analysis 这篇文章,里面也是遇到了同样的问题。
按它的说法,引起该问题的原因是程序集签名后默认会检测所引用的DLL和记录的版本,会强制要求引用时的版本必须和现在最新的DLL版本一致,否则会报错;
其实本身这个验证时OK的,也是合理的,但是我们开发期间,DLL太多了,我不可能随时都来修改这些版本号,因此,最好直接禁用了;
下面是禁用方法,就是将所有编译相关的PropertyGroup节点下加入
<CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>子节点,目的是在代码分析,强名称忽略版本差异;