集成FxCop会产生一个错误:假F#MAKE

集成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

我在FAKE中使用FxCop,但它给出了一个错误 i、 e

未进行
分析;必须至少指定一个有效的规则程序集和一个有效的目标文件。
*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项目文件”(扩展名为
    .FxCop
    的文件)的路径
  • 我无法告诉您如何编写FxCop项目文件,因为我自己从来没有这样做过,但可能是设置您使用的MsBuild系统的程序员已经这样做了。如果他这样做了,那么您只需要将以下参数添加到伪构建脚本中的
    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"})
    )