2017-03-28 5 views
2

をMAKEが、それは誤り すなわち統合FxCopのは、エラーを与える:FAKE F#が、私は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

FAKEの 'FxCop'関数はコンソール/ TeamCityログに、実行されている実際のFxCopコマンドラインを出力します。 "FxCop command"という緑色のテキストを探し、次の行に実際のFxCopコマンドが実行されていることを確認してください。そのコマンドラインをあなたの質問に貼り付けることができますか?また、そのコマンドを(FAKEがそれを印刷しているように)手動で実行して、FAKEの下で実行するときと同じように手動で実行するときに同じエラーが発生するかどうかを確認してください。 – rmunn

+0

実際、私は問題はあなたが十分なことを伝えていない、 'RuleLibraries'オプションを指定する必要があることだと思っています。私は少しの研究を行い、あなたのための答えを書くでしょう。 – rmunn

答えて

3

FAKEドキュメントは十分それを明確にしませんが、どうやらあなたは明示的に2つのうちのいずれかを指定する必要があります」と

    FxCopのは、あなたが実行したいルール
  1. 、または
  2. パスをFxCopプロジェクトファイル "(拡張子が.FxCopのファイル)。

私は私が自分自身をやったことがないので、FxCopのプロジェクトファイルを作成する方法を教えてくれていますが、すでにそのようにしたと協力してきたのMSBuildシステムをセットアップ多分プログラマすることはできません。彼は、その後、あなたは自分のFAKEビルドスクリプトであなたのFxCopコールに次のパラメータを追加する必要がなかった場合:

ProjectFile = buildDir </> "filename.FxCop" 

filename、当然のことながら、実際のファイル名に置き換える必要があります。

FxCopプロジェクトファイルがない場合は、明らかに、RuleLibrariesパラメータにFxCopルールのリストを明示的に指定する必要があります。まず、利用可能なFxCopルールを見つける必要があります。これを行うには、RulesフォルダのFxCopインストールディレクトリ(私のシステムでは、古いバージョンのFxCopがインストールされていますが、それはC:\Program Files (x86)\Microsoft FxCop 1.36でしたが、あなたとは異なる場合があります)を見てください。そのフォルダには複数のDLLが含まれている必要があります。例えば、私のシステムで、Rulesフォルダが含まれる:

  • をDesignRules.dll
  • GlobalizationRules.dll
  • InteroperabilityRules.dll

...と私はいくつかの他の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」を使用し、ファイル名からコピー&ペーストするだけで簡単です。

私はこれを自分でテストしていないので、これがうまくいくと思います。そうでない場合は、私に知らせてください。

+0

rnummさん、ありがとう、これを使ってみました、namingrules.dllがロードされています... 読み込まれたdesignrules.dll ...と私が与えたすべてのDLLが、前に表示されていたのと同じエラーを表示しています。すなわち、*分析は行われなかった。少なくとも1つの有効なルールアセンブリと1つの有効なターゲットファイルを指定する必要があります。 * 1トータル分析エンジンの例外。 プロジェクト:エラー:CA0052:ターゲットが選択されていません。 レポートをD:\ Project \ api \ test \ FXCopResults.xml ... ' – JFI

+0

に書き込む@johnfernandes - 前にリクエストしたように、実際のFxCopコマンドをあなたの質問に貼り付けることができますか?実際のコマンドラインオプションを確認したいので、なぜプロジェクトファイルが見つからないのかわかります。それを見ずに、私はこれを理解できるとは思わない。 – rmunn

+0

問題を見つけましたが、実際にはbuildDirにDLLが作成されておらず、ビルドフォルダが空だったので、なぜそれが起きているのか理解できるようになりました。しかし、私はこれを既存のdllの別のパスを与えて試しました。ファイルもFxCopによって作成されます。お手伝いありがとう :) – JFI

関連する問題