MSBuild中的FxCop并禁用CA0060异常

时间:2011-12-15 14:19:20

标签: msbuild fxcop

我是MSBuild的新手,我花了一些时间来研究如何做事。

因此,我尝试将FxCop集成到我的项目中,以便在构建服务器上构建它时自动运行。

目前的方法似乎是将自定义任务添加到构建时调用的构建中。所以我到目前为止创造了以下内容:

<Target Name="ExecuteFxCop">
  <ItemGroup>
    <Files Include="bin\XXXX.dll" />
  </ItemGroup>
  <!-- Call the task using a collection of files and all default rules -->
  <MSBuild.ExtensionPack.CodeQuality.FxCop 
  TaskAction="Analyse" 
  Files="@(Files)" 
  SearchGac="True"
  OutputFile="FxCopReport.xml">
  </MSBuild.ExtensionPack.CodeQuality.FxCop>
</Target>

然而,当我运行此>msbuild XXXX.csproj /t:ExecuteFxCop时,它失败并出现错误512,我已将其缩小为间接引用的程序集的异常:

<Exception Keyword="CA0060" Kind="Engine" TreatAsWarning="True">
  <Type>Microsoft.FxCop.Sdk.FxCopException</Type>
  <ExceptionMessage>The indirectly-referenced Silverlight assembly 'System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' could not be found. This assembly is not required for analysis, however, analysis results could be incomplete. Silverlight reference assemblies should be specified with the '/reference' switch. This assembly was referenced by: XXX\bin\ESRI.ArcGIS.Client.dll.</ExceptionMessage>
</Exception>

但我无法添加此引用。有没有办法让构建看到这个引用,或者最好只是完全禁用错误?

我确实尝试过:http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/c6780439-bc04-459e-80c3-d1712b2f5456/但它不起作用

2 个答案:

答案 0 :(得分:2)

在此尝试解决方法:http://geekswithblogs.net/blachniet/archive/2011/07/12/avoiding-fxcop-warning-ca0060.aspx

修改

例如,使用FxCop MsBuild任务,设置ContinueOnError并按如下方式检查ExitCode:

<Target Name="ExecuteFxCop">
  <ItemGroup>
    <Files Include="bin\XXXX.dll" />
  </ItemGroup>
  <!-- Call the task using a collection of files and all default rules -->
  <MSBuild.ExtensionPack.CodeQuality.FxCop 
  TaskAction="Analyse" 
  Files="@(Files)" 
  SearchGac="True"
  OutputFile="FxCopReport.xml"
  ContinueOnError="WarnAndContinue">
    <Output TaskParameter="ExitCode" PropertyName="ExitCode"/>
  </MSBuild.ExtensionPack.CodeQuality.FxCop>

  <Error Condition="$(ExitCode) != 512" Text="FxCop failed with exit code: $(ExitCode)"/>

</Target>

P.S。 (未经测试)

答案 1 :(得分:0)

不确定您是否仍在寻找解决方案,但通常对我有用的是添加

fxcop cmd-option /d:{dir-of-random-assemblies} 

基本上告诉fxcop查看程序集的附加目录。 在我看来,添加对不需要它的项目的引用是一个坏主意。

http://msdn.microsoft.com/en-US/library/bb429449(v=vs.80).aspx