MSBuild 中的 FxCop 和禁用 CA0060 异常

Posted

技术标签:

【中文标题】MSBuild 中的 FxCop 和禁用 CA0060 异常【英文标题】:FxCop in MSBuild and disabling CA0060 exceptions 【发布时间】:2011-12-15 14:19:19 【问题描述】:

我是 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>

但是,当我运行此 &gt;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/ 但它不起作用

【问题讨论】:

【参考方案1】:

在此处尝试解决方法: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>

附: (这个未经测试)

【讨论】:

感谢您的链接。似乎因为我没有通过构建后步骤运行 FxCop,所以这不起作用,但可能是我需要更改为像这样运行 FxCop 以消除错误。我们会看到的。 对。同时,您可以在这里创建一个新的功能请求以忽略特定的错误代码:msbuildextensionpack.codeplex.com/workitem/list/basic 您找到解决方案了吗? @alexjamesbrown,我已经更新了我的答案以提供一个例子。【参考方案2】:

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

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

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

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

【讨论】:

以上是关于MSBuild 中的 FxCop 和禁用 CA0060 异常的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP .NET Core 3.1 中调用 LoggerExtensions 方法时禁用/关闭 FxCop CA1303

MsBuild 和 FxCop 问题

FXcop 和 Msbuild 与 CruiseControl.NET

FxCop:CA1709:使用 Resharper 中的首字母缩略词字典

是否可以在未安装 VS 的情况下从 MSBuild 命令行运行 FxCop 代码分析?

MSBuild 无法找到 FxCop 二进制文件