c# - Visual Studio 2012 代码分析错误 CA0058

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

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

CA0058 Error Running Code Analysis CA0058 : The referenced assembly "Microsoft.Practices.Unity, Version=2.1.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" could not be found. This assembly is required for analysis and was referenced by: C:\MyProject\bin\Release\MyProject.exe, C:\MyProject\packages\Prism.UnityExtensions.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.UnityExtensions.dll. [Errors and Warnings] (Global)

我还有两个错误:

CA0052: No targets were selected

CA0055 Error Running Code Analysis CA0055 : C:\MyProject\bin\Release\IntraEUA Management Software 2.0.exe The following error was encountered while reading module "Microsoft.Practices.Prism.UnityExtensions": Assembly reference cannot be resolved: Microsoft.Practices.Unity, Version=2.1.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35. [Errors and Warnings] (Global)

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

我尝试在整个解决方案中搜索字符串“2.1.505.0”,但一无所获。那么 VS 从哪里获取此信息?

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

有什么办法可以消除这个可能是错误的错误吗?或者至少是忽略它的解决方法?

最佳答案

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

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

这意味着,这个困惑不是你的错,而只是试图使用库版本的“意外”组合以及 FxCop 的程序集解析逻辑疏忽的结果。

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

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

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

关于c# - Visual Studio 2012 代码分析错误 CA0058,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058751/

相关文章:

c# - 如何覆盖 Windows Phone 8 中的搜索按钮

C#程序,有没有tostring()哪个好

c# - JSON反序列化的问题

c# - 字符串英语化?

c# - 如果我有 EventWaitHandle,我需要锁吗

.net - 单元测试用户界面。什么是有效的方法?

c# - 带有 CheckBox 的 WPF ListView 选择问题

c++ - Visual Studio 中 EOF 之前的 EOF

visual-studio - Azure Functions、 Entity Framework 和 Oracle DB - 基本 POC 失败

c# - 如何使接口(interface)的实现产生自动属性而不是 NotImplementedException?