我有一个使用Autofac和WebAPI集成的项目
我们在我们的解决方案上运行FxCop,在打开autoface时,我得到以下内容:
找不到以下间接引用的程序集。这分析不需要汇编,但是,没有汇编,分析就不需要汇编结果可能不完整。这个集合是由Autofac.dll
系统。Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes
这会在CI服务器上导致以下错误:
FxCop return code (516): PROJECT_LOAD_ERROR ASSEMBLY_REFERENCES_ERROR
有没有办法告诉FxCop忽略这个?
在我们的项目中AutoMapper 3.1.0也有同样的问题。真正的问题是旧版本的FxCop。上一个正式版本是FxCop 10.0,但自2012年以来,新版本的FxCop已经与Visual Studio捆绑在一起。我刚刚用可以在
中找到的版本替换了FxCop 10.0- C:Program Files (x86)Microsoft Visual Studio 11.0Team ToolsStatic Analysis ToolsFxCop
或
- C:Program Files (x86)Microsoft Visual Studio 12.0Team ToolsStatic Analysis ToolsFxCop
,问题解决了。
当使用可移植类库运行时,这是一个常见的FxCop问题。它不是autoface;你只是碰巧看到它,因为Autofac是你唯一使用的PCL。根据我的经验,如果你在Windows 8机器上构建,这个错误似乎不会发生,但在Windows 7或Server 2008R2上,我经常看到这个。
这不是一个错误,不,你不会在你的机器上找到2.0.5.0。该版本实际上是针对Silverlight和运行时。net的"东西"处理重定向到正确的程序集版本。不幸的是,FxCop不太合作。
我在我的构建中看到了同样的事情,并使用以下问题的建议解决了它:如何修复FxCop错误代码512?
必须在FxCop项目文件中添加对程序集目录的引用。例如:
<Targets>
<AssemblyReferenceDirectories>
<Directory>C:/Windows/Microsoft.NET/assembly/GAC_MSIL/Microsoft.Web.Infrastructure/v4.0_1.0.0.0__31bf3856ad364e35/</Directory>
<Directory>C:/Windows/Microsoft.NET/assembly/GAC_MSIL/System.Web.Mvc/v4.0_3.0.0.0__31bf3856ad364e35/</Directory>
</AssemblyReferenceDirectories>
解决此问题的方法是将丢失的System.Core.dll复制到项目输出目录。我将此作为构建后事件将System.Core.dll从共享文件夹复制到项目bin目录。您可以从Silverlight SDK 2安装中获得System.Core.dll的副本。
现在fxcop运行成功,没有任何问题。注意,我在Visual Studio 2010中使用的是Fxcop集成器。