我目前正在开发一个包含多个项目的解决方案,当我尝试从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。
任何想法摆脱这个,可能是错误的错误?或者至少是一种忽略它的解决方法?
答案 0 :(得分:9)
潜在的问题是由于两个事实的结合:
Prism.UnityExtensions
版本4.1.0.0
引用版本Unity
中的2.1.505.0
,名称较强,但您的版本较新,版本为3.0.0.0
; 意思是,这个混乱不是你的错,只是试图使用"意外的"库版本的组合,以及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