Visual Studio 2012代码分析错误CA0058

本文关键字:错误 CA0058 代码 Studio 2012 Visual | 更新日期: 2023-09-27 18:24:50

我目前正在开发一个包含多个项目的解决方案,当我尝试从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.10.0''lib''NET40''Microsoft.Prims.UnityExtensions.dll。[Errors and Warnings](Global)

我还有两个错误:

CA0052:未选择目标

CA0055运行代码分析时出错CA0055:C:''MyProject''bin''Release ''InteraEUA Management Software 2.0.exe读取模块"Microsoft.Practices.Prism.UnityExtensions"时遇到以下错误:无法解析程序集引用:Microsoft.Practicies.Unity,版本=2.1.505.0,区域性=中性,PublicKeyToken=31bf3856ad364e35。[错误和警告](全局)

但奇怪的是,在我的解决方案中,我没有使用UnityExtensions的2.1.505.0版本,而是使用4.1.0.0。更奇怪的是,在这个解决方案中的所有其他项目中,它都是有效的,使用完全相同版本的UnityExtensions,甚至PublicKeyToken在其他所有项目中都是相同的。

我试图在整个解决方案中搜索字符串"2.1.505.0",但一无所获。,那么VS从哪里得到这些信息呢?

顺便说一句,我用NuGet得到了UnityExtension。并试图删除和重新安装UnityExtensions,但没有效果。我使用的是.NET 4.5。

有没有办法消除这个可能是错误的错误?或者至少是一个忽略它的变通方法?

Visual Studio 2012代码分析错误CA0058

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

  1. Prism.UnityExtensions版本4.1.0.0引用了版本2.1.505.0中的Unity,具有强名称,但您有一个较新的版本,使用版本3.0.0.0进行了强签名
  2. 在默认操作模式下,FxCop坚持程序集名称必须与引用匹配,包括具有确切的版本号,从而忽略程序集重定向(这是唯一允许程序集组合在运行时工作的东西)

也就是说,这种混乱不是你的错,只是试图使用库版本的"意外"组合,以及FxCop的程序集解析逻辑疏忽的结果。

克服这个问题的主要方法是将FxCop的AssemblyReferenceResolveMode设置为StrongNameIgnoringVersion。有几种方法可以实现这一点,一种是在每台机器的设置上,另一种则是在每一个项目的设置上。

  • 一种是按照您所做的操作,在FxCopCmd.exe.config(来自VS12调用)或FxCop.exe.config(对FxCop.exe的命令行调用)中将AssemblyReferenceResolveMode设置为StrongNameIgnoringVersion
  • 另一种方法是在每个.csproj文件中的PropertyGroupXML元素内添加一行:
<PropertyGroup>
  <CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
</PropertyGroup>

对于您打算与其他人共享的任何项目,我建议使用每个项目设置。

消除此问题的唯一解决方案实际上是将FxCopCmd.exe.configAssemblyReferenceResolveModeStrongName更改为StrongNameIgnoreVersion。我没有想出其他的办法,所以我必须接受它。

我最近也遇到过这种情况。问题如下:引发错误的项目的调试构建配置针对any CPU平台。与解决方案中的其他项目一样,将其更改为值x86已经解决了问题。

可以在Visual Studio中找到这些设置:*右键单击解决方案以在解决方案资源管理器中打开上下文菜单*选择属性,将加载"解决方案属性页"对话框*您要查找的设置如下:Configuration Properties>>Configuration