我在FAKE中使用FxCop但它出错了 即
Analysis was not performed; at least one valid rules assembly and one valid target file must be specified.
* 1 total analysis engine exceptions.
虽然所有目标都已成功构建。
这是我的代码:
Target "FxCop" (fun _ ->
!! (buildDir + "/**/*.dll")
++ (buildDir + "/**/*.exe")
|> FxCop (fun p ->
{p with
//Override default parameters
ReportFileName = testDir + "FXCopResults.xml";
ToolPath = "D:/Fake/FAKE-Calculator/tools/FxCop/FxCopCmd.exe"})
)
它还显示:项目错误:未选择任何目标。
答案 0 :(得分:2)
FAKE文档没有说清楚,但显然你需要明确指定两件事之一:
.FxCop
的文件)。我无法告诉你如何写一个FxCop项目文件,因为我自己从未这样做过,但也许设置你正在使用的MsBuild系统的程序员已经这样做了。如果他这样做,那么您只需要在FAKE构建脚本中的FxCop
调用中添加以下参数:
ProjectFile = buildDir </> "filename.FxCop"
其中filename
当然应该用真实的文件名替换。
如果您没有FxCop
项目文件,那么显然您必须在RuleLibraries
参数中明确指定FxCop规则列表。首先,您需要找出可用的FxCop规则。要做到这一点,请查看您的FxCop安装目录(在我的系统上,我安装了旧版本的FxCop,它是C:\Program Files (x86)\Microsoft FxCop 1.36
,但对于Rules
文件夹可能有所不同)。该文件夹应包含多个DLL;例如,在我的系统上,Rules
文件夹包含:
...以及其他一些我不打算打字的DLL。现在,您只需将该文件名列表转换为F#列表:
RulesLibraries = ["DesignRules.dll"; "GlobalizationRules.dll"] // and so on
应该是合理的默认值,但目前看来你必须手动指定规则列表。所以尝试编写你的目标看起来像这样:
Target "FxCop" (fun _ ->
!! (buildDir + "/**/*.dll")
++ (buildDir + "/**/*.exe")
|> FxCop (fun p ->
{p with
//Override default parameters
ReportFileName = testDir + "FXCopResults.xml";
RulesLibraries = ["DesignRules.dll"; "GlobalizationRules.dll"] // etc.
ToolPath = "D:/Fake/FAKE-Calculator/tools/FxCop/FxCopCmd.exe"})
)
请记住将列表项与;
(分号)分开:在F#中,,
(逗号)字符仅适用于元组。并且不要只是逐字复制我的示例,而是实际查看您的FxCop安装目录以查看可用的规则DLL,并包含这些规则。 (与项目实际需要的一样多,或者很少)。
另外,我不知道你是否真的需要指定.dll
扩展名;您可能可以使用["DesignRules"; "GlobalizationRules"]
(依此类推)。但是使用.dll
扩展名可能同样简单,只需从文件名中复制和粘贴即可。
我自己没有测试过,所以我希望这对你有用。如果没有,请告诉我。