集成FxCop会产生一个错误:假F#MAKE
我在FAKE中使用FxCop,但它给出了一个错误 i、 e 未进行集成FxCop会产生一个错误:假F#MAKE,f#,f#-fake,F#,F# Fake,我在FAKE中使用FxCop,但它给出了一个错误 i、 e 未进行分析;必须至少指定一个有效的规则程序集和一个有效的目标文件。 *1总分析引擎异常。 所有目标都已成功构建 这是我的密码: Target "FxCop" (fun _ -> !! (buildDir + "/**/*.dll") ++ (buildDir + "/**/*.exe") |> FxCop (fun p -> {p with
分析;必须至少指定一个有效的规则程序集和一个有效的目标文件。
*1总分析引擎异常。
所有目标都已成功构建
这是我的密码:
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"})
)
它还显示:项目错误:未选择任何目标。假文档没有足够清楚地说明问题,但显然您需要明确指定以下两件事之一:
.FxCop
的文件)的路径FxCop
调用中:
ProjectFile = buildDir </> "filename.FxCop"
应该有合理的默认设置,但目前看来您必须手动指定该规则列表。所以试着写下你的目标如下:
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。(根据项目实际需要的数量或数量)
另外,我不知道您是否必须指定.dll
扩展名;您可能可以使用[“设计规则”;“全球化规则”]
(等等)。但是使用.dll
扩展名并从文件名复制和粘贴可能同样简单
我自己还没有测试过,所以我希望这对你有用。如果没有,请告诉我。FAKE中的
FxCop
函数应该向控制台/TeamCity日志输出一些内容,显示正在运行的实际FxCop命令行。查找一些绿色文本,上面写着“FxCop命令”,然后在下一行中,您应该看到实际执行的FxCop命令。你能把命令行粘贴到你的问题里吗?另外,试着手动运行该命令(就像FAKE打印它一样),看看手动运行时是否会出现与在FAKE下运行时相同的错误。实际上,我怀疑问题在于您需要指定一个RuleLibraries
选项,而FAKE文档(目前)并没有告诉您足够的信息。我会做一些研究并为你写一个答案。谢谢你,嗯,我试过使用这个,它显示加载的namingrules.dll。。。已加载designrules.dll。。。还有我给出的所有DLL,但它显示的错误与之前显示的相同。i、 e.*未进行分析;必须至少指定一个有效的规则程序集和一个有效的目标文件。*1总分析引擎异常。项目:错误:CA0052:未选择任何目标。正在将报告写入D:\Project\api\test\FXCopResults.xml…
@johnfernandes-您能否按照我之前的要求将实际运行的FxCop命令粘贴到您的问题中?我想看看它得到的实际命令行选项,这样我就可以找出它找不到项目文件的原因。我发现了问题,实际上buildDir中没有创建DLL,而且build文件夹是空的,现在我想知道为什么会发生这种情况,但是是的,我尝试了通过提供现有DLL的另一个路径来实现这一点,然后它工作了,结果文件也是由FxCop创建的。谢谢你的帮助:)
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"})
)