静的 CA は、ソリューションのビルドを大幅に遅くします。私の場合、CA を使用しない場合よりも 2 倍以上遅くなります。無効にすることはできますが、それはその力を失うという悪い決断です。では、何ができるでしょうか?
まず、CA の仕組みを見てみましょう。
ソリューションを構築します。msbuild コンパイル ターゲット fxcopcmd.exe 後の各プロジェクト ビルドで、分析する必要があるアセンブリへのパスを使用して呼び出されます。fxcopcmd. VS (または出力ストリーム) で使用される CA xml ログを生成します。fxcopcmd.exe はアセンブリ (高速) を読み込み、その同期を分析するため、読み込まれる CPU は 1 つだけで、3 つ (私の場合) は何もしていません。CA が終了した後にのみ、プロジェクトの依存関係チェーンの次のプロジェクトが構築されます。
したがって、CA の弱点は、すべての CPU を使用するように強制的に並行して動作させることです。
私はそのような解決策を見ます
MSBUILD からパラメーターを取得する偽の fxcopcmd.exe を作成するには、それを覚えておいて、すぐに msbuild にすべて問題なく、エラーがないことを報告します (CA xml.log、成功したファイル、またはストリームなどを介して)。したがって、MSBUILD は次のプロジェクトをビルドし、その時点で、保存されたパラメーターを使用して実際の fxcopcmd.exe を呼び出します... MSBUILD が次のプロジェクトで fxcopcmd.exe を呼び出す場合、もう一度 fxcopcmd.exe を呼び出します...すべての CPU をロードするプロセスはほとんどありません。本物の fxcopcmd.exe が終了したら、MSBUILD ターゲットを呼び出して、コンパイルせずに microsoft.common.targtets から CA ターゲットのみを呼び出すことができます。偽の fxcopcmd.exe は即座に結果を報告します (CA はその時点で終了し、ログがあります)。 MSBUILD-VS に。
どう思いますか?これは CA を高速化しますか? Microsoft がそのようなスタッフを作成せず、CA で 1 つの CPU のみを使用したのはなぜですか?