Visual Studio 2012代码分析错误CA0058

时间:2014-09-26 11:43:43

标签: c# .net visual-studio visual-studio-2012 code-analysis

我目前正在开发一个包含多个项目的解决方案,当我尝试从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。 [错误和警告](全球)

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

我试图在整个解决方案中搜索字符串“2.1.505.0”但什么也没找到。所以VS在哪里获取此信息?

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

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

3 个答案:

答案 0 :(得分:9)

潜在的问题是由于两个事实的结合:

  1. Prism.UnityExtensions版本4.1.0.0引用版本Unity中的2.1.505.0,名称较强,但您的版本较新,版本为3.0.0.0;
  2. 在默认操作模式下,FxCop坚持要求程序集名称​​必须匹配引用,包括具有确切的版本号,从而忽略程序集重定向(这是唯一允许组合重定向的程序集)程序集在运行时工作);
  3. 意思是,这个混乱不是你的错,只是试图使用"意外的"库版本的组合,以及FxCop的装配解析逻辑中的疏忽。

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

    • 就像你一样,在AssemblyReferenceResolveMode(来自VS12调用)或StrongNameIgnoringVersion(命令行调用FxCopCmd.exe.config中将FxCop.exe.config设置为FxCop.exe 1}});
    • 另一种是在.csproj XML元素内的每个PropertyGroup文件中添加一行:
    <PropertyGroup>
      <CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
    </PropertyGroup>
    

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

答案 1 :(得分:1)

摆脱这种情况的唯一解决方案是将 FxCopCmd.exe.config AssemblyReferenceResolveMode StrongName 更改为 StrongNameIgnoreVersion 即可。我没有想出任何其他东西,所以我必须接受它。

答案 2 :(得分:0)

我最近也有这个案子。问题如下:我的项目的调试构建配置引发了针对any CPU平台的错误。像解决方案中的其他项目一样将其更改为值x86已解决了问题。

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