我目前正在开发一个包含多个项目的解决方案,当我尝试从 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。
有什么办法可以消除这个可能是错误的错误吗?或者至少是忽略它的解决方法?
最佳答案
根本问题是由于两个事实的结合:
Prism.UnityExtensions
version4.1.0.0
referencesUnity
in version2.1.505.0
,有一个强名称,但是你有一个较新的版本,与3.0.0.0
版本强签名;- 在其默认操作模式下,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/