Visual Studio 2012代码分析错误CA0058

cod*_*815 3 .net c# code-analysis visual-studio visual-studio-2012

我目前正在开发一个包含多个项目的解决方案,当我尝试从VS12运行代码分析工具时,我在尝试运行它时遇到以下错误:

CA0058运行代码分析错误CA0058:找不到引用的程序集"Microsoft.Practices.Unity,Version = 2.1.505.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35".此程序集是分析所必需的,并通过以下方式引用:C:\ MyProject\bin\Release\MyProject.exe,C:\ MyProject\packages\Prism.UnityExtensions.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.UnityExtensions .dll文件.[错误和警告](全球)

我还有两个错误:

CA0052:未选择任何目标

CA0055运行代码分析时出错CA0055:C:\ MyProject\bin\Release\IntraEUA管理软件2.0.exe读取模块"Microsoft.Practices.Prism.UnityExtensions"时遇到以下错误:无法解析程序集引用:Microsoft.Practices. Unity,Version = 2.1.505.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35.[错误和警告](全球)

但奇怪的是,在我的解决方案中我没有使用ersion 2.1.505.0的UnityExtensions,我使用的是4.1.0.0.甚至更奇怪的是,在此解决方案中的所有其他项目中,使用完全相同的UnityExtensions版本,即使PublicKeyToken在所有其他项目中也是相同的.

我试图在整个解决方案中搜索字符串"2.1.505.0"并没有找到任何内容.所以VS在哪里获取此信息?

顺便说一下,我使用NuGet获得了UnityExtension.并尝试删除并重新安装UnityExtensions,但没有任何效果.我正在使用.NET 4.5.

任何想法摆脱这个,可能是错误的错误?或者至少有一种解决方法可以忽略它?

Jea*_*nal 9

根本问题是由于两个事实的结合:

  1. Prism.UnityExtensions版本4.1.0.0的参考Unity版本2.1.505.0,具有强大的名字,但你有一个新版本,版本强烈签署3.0.0.0;
  2. 在其默认操作模式下,FxCop坚持程序集名称必须与引用匹配,包括具有确切的版本号,从而忽略程序集重定向(这是允许程序集组合在运行时工作的唯一因素);

这意味着,这个混乱不是你的错,只是试图使用库版本的"意外"组合,以及FxCop的汇编解析逻辑中的疏忽.

解决该问题的主要方法是将FxCop设置AssemblyReferenceResolveModeStrongNameIgnoringVersion.有一些方法可以实现这一点,一个在每台机器设置上,另一个在每个项目设置上.

  • 一个是做像你一样,设置AssemblyReferenceResolveModeStrongNameIgnoringVersion在任一FxCopCmd.exe.config(从VS12调用)或FxCop.exe.config(命令行调用FxCop.exe);
  • 另一种是在XML元素.csproj内的每个文件中添加一行PropertyGroup:
<PropertyGroup>
  <CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我建议您为要与其他人共享的任何项目使用每个项目设置.