57

FxCop 10 の後、Microsoft は FxCop 用の個別のインストーラーの出荷を停止しました。公式には、現在、Visual Studio 2013 / 2015 / 2017 をインストールした後にのみコード分析 (FxCop 12.0 / 14.0 / 15.0) を実行できます。開発者のコ​​ンピューターにあるものと同期するなど)。

では、できれば他に何もインストールせずに、FxCop 12.0 / 14.0 / 15.0 をビルド エージェントで動作させるにはどうすればよいでしょうか? ただし、いくつかのバイナリと msbuild ファイルをソース管理に追加することは受け入れます。それ以外の場合: Visual Studio 2013 / 2015 / 2017 インストーラーを使用して FxCop のみをインストールする方法はありますか?

注: ビルド サーバーとして Teamcity を使用しています。

回答

特定の環境と FxCop のバージョンには複数の有効な回答があるため、簡単にアクセスできるようにここにリンクする自由を取りました。

4

5 に答える 5

52

FxCop 14.0 / VS2015 については、この回答を参照してください


Visual Studio 2013 をインストールせずに FxCop 12.0 を実行する

さて、私は6時間投資しましたが、今は機能しています。必要なすべての実行可能ファイル、dll、および msbuild ターゲットをソース管理に追加しました。

これらは、ソース管理に追加する必要があったファイルです: (これはいくつかのライセンス契約に違反する可能性があることを考慮してください)

(source control)\dev\tools\FxCop
│
├[amd64]
│   │
│   └msdia120.dll
├[Engines]
│   │
│   ├IntrospectionAnalysisEngine.dll
│   └PhoenixAnalysisEngine.dll
├[Msbuild]
│   │
│   ├fxcoptask.dll
│   ├Microsoft.CodeAnalysis.Targets
│   ├Microsoft.VisualStudio.CodeAnalysis.dll
│   └Microsoft.VisualStudio.CodeAnalysis.Sdk.dll
├[Repository]
│   │
│   ├[Compatibility]
│   │   │
│   │   ├Desktop2.0.xml
│   │   ├Desktop2.0SP1.xml
│   │   ├Desktop2.0SP2.xml
│   │   ├Desktop3.0.xml
│   │   ├Desktop3.0SP1.xml
│   │   ├Desktop3.0SP2.xml
│   │   ├Desktop3.5.xml
│   │   └Desktop3.5SP1.xml
│   └system32.bin
├[Rules]
│   │
│   ├DataflowRules.dll
│   ├DesignRules.dll
│   ├GlobalizationRules.dll
│   ├InteroperabilityRules.dll
│   ├MaintainabilityRules.dll
│   ├MobilityRules.dll
│   ├NamingRules.dll
│   ├PerformanceRules.dll
│   ├PortabilityRules.dll
│   ├ReliabilityRules.dll
│   ├SecurityRules.dll
│   ├SecurityTransparencyRules.dll
│   └UsageRules.dll
├[Xml]
│   │
│   ├CodeAnalysisReport.xsl
│   ├FxCopReport.xsl
│   └VSConsoleOutput.xsl
├Architecture-msil.dll
├CodeAnalysis.dll
├CustomDictionary.xml
├FxCopCmd.exe
├FxCopCmd.exe.config
├FxCopCommon.dll
├FxCopSdk.dll
├Microsoft.Cci.dll
├Microsoft.VisualStudio.CodeAnalysis.Common.dll
├Microsoft.VisualStudio.CodeAnalysis.DataflowModels.dll
├Microsoft.VisualStudio.CodeAnalysis.dll
├Microsoft.VisualStudio.CodeAnalysis.Interop.dll
├Microsoft.VisualStudio.CodeAnalysis.Phoenix.dll
├Microsoft.VisualStudio.CodeAnalysis.Phoenix.xml
├msdia120.dll
├mssp7en.dll
├mssp7en.lex
├phx.dll
└Runtime-vccrt-win-msil.dll

次のようにコピーします。

  • からの FxCop インストール フォルダーの内容全体

    %programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop

  • Visual Studio 2013 C++ redist またはその他の場所から: (法的情報も参照してください) msdia120 x86 および x64 を次の場所にコピーします。

    msdia120.dll (874 KiB)

    amd64\msdia120.dll (1.07 MiB)

  • C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\VS2013 がインストールされているコンピューターのグローバル アセンブリ キャッシュ ( ) から、次の DLL を次の場所にコピーします: (DLL がバージョン 12.0 であることを確認してください!)

    Msbuild\Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild\Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysisからまでのすべてのファイル

    Msbuild\fxcoptask.dll

    Msbuild\Microsoft.CodeAnalysis.Targets

(さらに、ビルド エージェントにインストールされた .net 4.0 / 4.5 アプリケーションをビルドするための適切な Windows (7.1 / 8.1) SDK が必要です)

さらに、プロジェクトの msbuild ファイルを次のように調整する必要がありました。

<!--Must import code analysis target before importing csharp targets, so that the correct code analysis targets gets imported. -->
<Import Project="$(ProjectBuildScriptDir)Custom.CodeAnalysis.targets"/>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"/>

そして、これが Custom.CodeAnalysis.targets の内容です:

  <PropertyGroup>
    <!-- Code analysis settings. -->
    <CodeAnalysisCulture>en-US</CodeAnalysisCulture>

    <!-- change this so it points to your ruleset or remove it entirely -->
    <CodeAnalysisRuleSet>$(SourcesDir)Custom.ruleset</CodeAnalysisRuleSet>

    <!-- this must refer to the source control directory where you copied FxCopCommand.exe (and the rest of the FxCop files and directories...) to -->
    <CodeAnalysisPath>$(ToolsDir)FxCop\</CodeAnalysisPath>

    <!-- this must refer to the source control directory where you copied fxcoptask.dll, Microsoft.CodeAnalysis.Targets, Microsoft.VisualStudio.CodeaAnalysis.dll and Microsoft.VisualStudio.CodeaAnalysis.Sdk.dll to -->
    <CodeAnalysisTargets>$(CodeAnalysisPath)Msbuild\Microsoft.CodeAnalysis.Targets</CodeAnalysisTargets>
  </PropertyGroup>
  <!-- configure this according to your wishes -->

  <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
    <RunCodeAnalysis>true</RunCodeAnalysis>
  </PropertyGroup>

  <!-- Report code analysis results to TeamCity -->
  <Target Name="ReportCodeAnalysisResults" AfterTargets="RunCodeAnalysis" Condition="'$(RunCodeAnalysis)' == 'true' And '$(IsRunningOnTeamCity)' == 'true'">
    <Message Text="##teamcity[importData type='FxCop' path='$(CodeAnalysisLogFile)']" Importance="High" />
  </Target>

</Project>
于 2014-02-12T14:49:54.777 に答える
37

!! FxCop 12.0 / VS2013 については、この回答を参照してください!!

Visual Studio 2015 をインストールせずに FxCop 14.0 を実行する

前提条件:

  • MSBuild 14.0 --> Microsoft Build Tools 2015をインストールします
  • Visual Studio 2015 x86用の Visual C++ Redistributable (x86 バージョンは常に必要であり、ビルドによっては x64 redist も必要になる場合があります。それがない場合、エラー メッセージは不可解なものになる可能性があります。たとえば、System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.CodeAnalysis.Interop.dll' or one of its dependencies. The specified module could not be found.)。redist 全体をインストールする代わりに、必要な DLL を個別にコピーすることもできますが、現時点ではどれが必要かわかりません。正確に欠落しているものを見つけるのは非常に難しく、時間がかかります。

構築したいものに応じて:

  • Windows 10 SDKなどの適切な Windows SDK
  • 適切な .net SDK / ターゲット (.NET Framework 4.6 SDK は Windows 10 SDK に含まれています)

ソース管理に追加するファイル

これらは、ソース管理に追加する必要があったファイルです: (これはいくつかのライセンス契約に違反する可能性があることを考慮してください)

(source control)\tools\FxCop14
│
├[Engines]
│   │
│   ├IntrospectionAnalysisEngine.dll
│   └PhoenixAnalysisEngine.dll
├[Msbuild]
│   │
│   ├fxcoptask.dll
│   ├Microsoft.CodeAnalysis.Targets
│   ├Microsoft.VisualStudio.CodeAnalysis.dll
│   └Microsoft.VisualStudio.CodeAnalysis.Sdk.dll
├[Repository]
│   │
│   ├[Compatibility]
│   │   │
│   │   ├Desktop2.0.xml
│   │   ├Desktop2.0SP1.xml
│   │   ├Desktop2.0SP2.xml
│   │   ├Desktop3.0.xml
│   │   ├Desktop3.0SP1.xml
│   │   ├Desktop3.0SP2.xml
│   │   ├Desktop3.5.xml
│   │   └Desktop3.5SP1.xml
│   └system32.bin
├[Rules]
│   │
│   ├DataflowRules.dll
│   ├DesignRules.dll
│   ├GlobalizationRules.dll
│   ├InteroperabilityRules.dll
│   ├MaintainabilityRules.dll
│   ├MobilityRules.dll
│   ├NamingRules.dll
│   ├PerformanceRules.dll
│   ├PortabilityRules.dll
│   ├ReliabilityRules.dll
│   ├SecurityRules.dll
│   ├SecurityTransparencyRules.dll
│   └UsageRules.dll
├[x64]
│   │
│   └msdia140.dll (1349 KB)
├[Xml]
│   │
│   ├CodeAnalysisReport.xsl
│   ├FxCopReport.xsl
│   └VSConsoleOutput.xsl
├Architecture-msil.dll
├CodeAnalysis.dll
├CustomDictionary.xml
├FxCopCmd.exe
├FxCopCmd.exe.config
├FxCopCommon.dll
├FxCopSdk.dll
├Microsoft.Cci.dll
├Microsoft.VisualStudio.CodeAnalysis.Common.dll
├Microsoft.VisualStudio.CodeAnalysis.DataflowModels.dll
├Microsoft.VisualStudio.CodeAnalysis.dll
├Microsoft.VisualStudio.CodeAnalysis.Interop.dll
├Microsoft.VisualStudio.CodeAnalysis.Phoenix.dll
├Microsoft.VisualStudio.CodeAnalysis.Phoenix.xml
├msdia140.dll (1057 KB)
├mssp7en.dll
├mssp7en.lex
├phx.dll
└Runtime-vccrt-win-msil.dll

次のようにコピーします。

  • からの FxCop インストール フォルダーの内容全体

    %programfiles(x86)%\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop

  • Visual Studio 2015 C++ redist またはその他の場所から: (法的情報も参照してください) msdia140 x86 および x64 を次の場所にコピーします。

    msdia140.dll (1057 KiB)

    amd64\msdia140.dll (1349 KiB)

  • C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\VS2015 がインストールされているコンピューターのグローバル アセンブリ キャッシュ ( ) から、次の DLL を次の場所にコピーします: (DLL がバージョン 14.0 であることを確認してください!)

    Msbuild\Microsoft.VisualStudio.CodeAnalysis.dll

    Msbuild\Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysisからまでのすべてのファイル

    Msbuild\fxcoptask.dll

    Msbuild\Microsoft.CodeAnalysis.Targets

さらに、プロジェクトの msbuild ファイル (*.csproj) を次のように調整しました (ヒント: 以前に VS2013 で行った方法とは少し異なります。FxCop 14 の動作が異なるためではなく、この方法で fxcop を含めることができるためです)。 nuget パッケージを作成し、.targets ファイルを .csproj にインポートするための標準の nuget 機能を使用します):

<!-- Microsoft.CSharp.targets import is contained in csproj by default. This just goes to show the sequence -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"/>

<!-- now this must be added -->
<Import Project="$(ProjectBuildScriptDir)Custom.CodeAnalysis.targets"/>

そして、これが Custom.CodeAnalysis.targets の内容です:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <!-- Code analysis settings. -->
    <PropertyGroup>
        <!-- this must reference the path where you copied the FxCop stuff to -->
        <FxCopDir>..\FxCop14\</FxCopDir> 
        <CodeAnalysisCulture>en-US</CodeAnalysisCulture>
        <CodeAnalysisRuleSet>$(SolutionDir)FxCop.ruleset</CodeAnalysisRuleSet>
        <!-- you can and should use another condition here. Otherwise code analysis will be run on every build in VS as well. -->
        <!-- in my build setup i do something like Condition=IsRunningOnTeamCity => true -->
        <RunCodeAnalysis>true</RunCodeAnalysis> 
        <CodeAnalysisTreatWarningsAsErrors Condition="'$(IsRunningOnTeamCity)' != 'true'">true</CodeAnalysisTreatWarningsAsErrors>
    </PropertyGroup>

    <Import Project="$(FxCopDir)Msbuild\Microsoft.CodeAnalysis.Targets" />

    <Target Name="CodeAnalysisLogHeader" BeforeTargets="RunCodeAnalysis" Condition="$(RunCodeAnalysis) == 'true'">
        <Message Text="Text, Executing Code Analysis (FxCop) on $(MsBuildProjectName)" Importance="High" />
    </Target>

    <!-- Report code analysis results to TeamCity -->
    <Target Name="ReportCodeAnalysisResults" AfterTargets="RunCodeAnalysis" Condition="$(RunCodeAnalysis) == 'true' AND '$(IsRunningOnTeamCity)' == 'true'">
        <Message Text="##teamcity[importData type='FxCop' path='$(MSBuildProjectDirectory)\$(CodeAnalysisLogFile)']" Importance="High" />
    </Target>

</Project>
于 2015-08-19T11:15:04.980 に答える
8

Visual Studio をインストールせずに SonarQube 分析に FxCop を使用する

SonarQube 品質プロファイルで有効になっている FxCop ルールがある場合、SonarQube には FxCop 14.0 が必要です。

これらの手順は、主に@BatteryBackupUnit による優れた回答に基づいています。

  1. ビルド マシンにMicrosoft Build Tools 2015をインストールします。

  2. Microsoft Visual C++ 2015 Redistributable Update 3 (x86 と x64 の両方) をビルド マシンにインストールします。

  3. 次のレジストリ ファイルをビルド マシンにインポートします (C: でない場合はドライブ文字を更新します)。


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WDExpress\14.0\Setup\EDev]
"StanDir"="C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\"
"FxCopDir"="C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\FxCop\\"
  1. %programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools(FxCop サブディレクトリだけでなく) すべてをビルド マシンの同じ場所にコピーします。

  2. %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysisビルド マシンの同じ場所にコピーします。

  3. VS2015 がインストールされているコンピューターのグローバル アセンブリ キャッシュ (C:\Windows\Microsoft.NET\assembly\GAC_MSIL_NameOfTheAssembly_) からコピーMicrosoft.VisualStudio.CodeAnalysis.dllしてMicrosoft.VisualStudio.CodeAnalysis.Sdk.dll(DLL がバージョン 14.0 であることを確認してください!)。ビルド マシンにコピーするかC:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis、ビルド マシンの GAC にインストールします。

このPhx.FatalErrorすべての後、最後の儀式があります... からコピーvs_profiler_x64_enu.exeProgram Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\Setupsて、ビルドマシンにインストールします。

@BatteryBackupUnit の指示からの逸脱:

  1. Static Analysis ToolsFxCop サブディレクトリだけでなく、ディレクトリ全体が必要です。
  2. Msbuild サブフォルダーを FxCop の下にネストする代わりに、元の場所に配置する必要があります。
  3. Visual C++ 2015 Redistributable がインストールされている限り、ファイルを FxCop ディレクトリにmsdia120.dllコピーする必要はないようです。amd64\msdia140.dll
  4. プロジェクト ファイル (*.csproj) に対する FxCop 関連の変更はありません。
  5. ファイルがありませんCustom.CodeAnalysis.targets
于 2016-06-09T08:12:32.293 に答える
1

TFSには非常に簡単な方法があります。

ビルド マシンで、環境変数を追加します: FXCOPDIR、それを指す: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop(開発マシンからこのフォルダーをコピーするだけです)。

このディレクトリには : というファイルがありFxCopCmd.exe、vs がインストールされていなくても、TFS ビルドによって自動的に取得されます。サーバーを 1 回か 2 回再起動する必要があるかもしれませんが、ビルドは最終的に機能します。また、次の 2 つの dll が gac にインストールされていることを確認する必要があります: Microsoft.VisualStudio.CodeAnalysis.dll と Microsoft.VisualStudio.CodeAnalysis.Sdk.dll 最初のものは上記のパスにありますが、後者は私がそれを手に入れた唯一の方法は、開発マシンのgacからそれをつかんだことです。(レジストリを変更することで、特別な gac フォルダー ビューを無効にすることができます。Google で検索してください)。

于 2014-07-29T16:50:44.257 に答える