MsBuild 和 FxCop 问题

Posted

技术标签:

【中文标题】MsBuild 和 FxCop 问题【英文标题】:MsBuild and FxCop problems 【发布时间】:2012-06-14 14:10:07 【问题描述】:

我正在尝试使用 cmd 或 jenkins 构建作业使构建文件与 msbuild 一起运行。

项目的结构是

演示在这里:www.saramgsilva.com/wp7/sarasilvademo.rar

现在我有 3 种不同的方式来运行 fxcop,但我都有问题。

1)在cmd中进入根文件,然后运行

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe  .\SaraSilva.WP7.build /target:FxCop

这显示错误:退出代码 128

2)在cmd中进入根文件,然后运行

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe  .\SaraSilva.WP7C.build /target:FxCop

这不会创建 buildartifacts\FxCop\FxCopAnalysis.xml 文件。

3)在cmd中进入根文件,然后运行

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe  .\SaraSilva.WP7.build /target:TestWithCoverage

C:\SaraSilvaDemo\tools\FxCop-1.36\FxCopCmd.exe /file:C:\SaraSilvaDemo\buildartifacts /directory:C:\SaraSilvaDemo\buildartifacts\ /rule:C:\SaraSilvaDemo\tools\FxCop-1.36\Rules /out:C:\SaraSilvaDemo\buildartifacts\fxcop-result.xml

结果是:

Microsoft (R) FxCop 命令行工具,版本 1.36 (9.0.30729.1) 版权所有 (C) 2007 Microsoft Corporation。保留所有权利。

已加载 DesignRules.dll...已加载 GlobalizationRules.dll...已加载 InteroperabilityRules.dll... 已加载 MobilityRules.dll... 已加载 NamingRules.dll... 已加载 PerformanceRules.dll... 已加载 PortabilityRules.dll... 已加载 SecurityRules.dll... 已加载 UsageRules.dll... 无法加载 Cimbalino.Phone.Toolkit.dll。可以 不加载 GalaSoft.MvvmLight.Extras.WP71.dll。不能加载 GalaSoft.MvvmLight.WP71.dll。不能加载 Microsoft.Phone.Controls.dll。不能加载 Microsoft.Practices.ServiceLocation.dll。不能加载 mscorlib.Extensions.dll。无法加载 NLog.dll。已加载 nunit.framework.dll ...已加载 SaraSilva.WP7.AllTests.dll ...无法 加载 SaraSilva.WP7.App.dll。无法加载 SaraSilva.WP7.Model.dll。 无法加载 SaraSilva.WP7.SampleData.dll。不能加载 SaraSilva.WP7.SchedTask.dll。无法加载 SaraSilva.WP7.Service.dll。 已加载 System.Core.dll... 无法加载 System.dll。不能加载 System.Windows.Browser.dll。已加载 System.Windows.dll ... 无法 加载 System.Windows.Interactivity.dll。无法加载 System.Xml.dll。 无法加载 TombstoneHelper.dll。初始化自省 引擎...无法解析对 System.Net 的引用。分析 完成。

注意:找不到一个或多个引用的程序集。使用 '/directory' 开关以指定附加程序集引用搜索 路径。

未执行分析;必须至少指定一个有效的规则程序集和一个有效的目标文件。 2 总分析引擎异常。将报告写入 C:\SaraSilvaDemo\buildartifacts\fxcop-result.xml... 完成。

我不知道该怎么办:(

【问题讨论】:

【参考方案1】:

答案是在命令行中添加以下开关,告诉 FxCop 在 GAC 中搜索程序集:

/gac

【讨论】:

我收到错误消息 注意:找不到一个或多个引用的程序集。使用“/directory”开关指定其他程序集引用搜索路径。这个开关 /gac 解决了这个问题。【参考方案2】:

虽然我使用的是 FXCop 10.0,但您输入的错误代码类似:

注意:找不到一个或多个引用的程序集。使用“/directory”开关指定其他程序集引用搜索路径。

因此,就我而言,我修改了 FxCopCmd.exe.config 文件并将 AssemblyReferenceResolveMode 从 StrongName 更改为 StrongNameIgnoringVersion

这是为了确保它不会尝试查找引用程序集的特定版本

还要确保在 Visual Studio 中 dll 属性具有 Copy Local = True

【讨论】:

以上是关于MsBuild 和 FxCop 问题的主要内容,如果未能解决你的问题,请参考以下文章

MSBuild 中的 FxCop 和禁用 CA0060 异常

MSBuild 无法找到 FxCop 二进制文件

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

您可以从 msbuild.exe 命令行关闭条件编译符号吗?

是否可以从 csproj 文件中知道是使用 devenv 还是 msbuild 来运行它?

TeamCity - MSBuild 代码分析