ReSharper 2020.1ヘルプ

InspectCodeコマンドラインツール

ReSharperの最も注目すべき機能の1つであるコードインスペクションは、IDEを開かなくても使用できます。無料のクロスプラットフォームコマンドラインツールのInspectCodeでは、ReSharperのすべてのインスペクションを適用するために、少なくとも1つのパラメーター(ソリューションファイル)が必要です。

InspectCodeを実行します。

  1. ReSharperコマンドラインツールをダウンロードします。ダウンロードボタンの横にあるセレクタを使用して、オペレーティングシステムを選択します。

  2. 任意のディレクトリでコマンドラインツールパッケージを解凍します。
    解凍する前に、ダウンロードした .zip ファイルが「ブロック解除」されていることを確認します。ファイルを右クリックし、プロパティを選択してブロック解除するをクリックします。これに失敗すると、.NETフレームワークは部分信頼でアプリケーションをロードします。つまり、正しくロードまたは実行されません。

  3. ターゲットソリューションを構築します。

  4. 次のコマンドを実行します。

    InspectCode.exe YourSolution.sln -o=<PathToOutputFile>

出力の理解

InspectCodeが分析を終了すると、コマンドプロンプト -o=<PathToOutputFile>で指定されたXMLファイルに結果を保存します。このファイルには、指定されたスコープ(ソリューション全体または特定のプロジェクト)内で見つかったすべてのコードの課題が含まれます。XMLは2つの部分で構成されます。

  • 各タイプが特定のインスペクションに対応し、次の属性を持つ見つかった課題タイプのリスト:

    • Id - 各号を対応するインスペクションにリンクすることを許可します。

    • Category - 同様の課題をカテゴリ別にグループ化するために使用できます。

    • SubCategory - いくつかの課題タイプが同じSubCategory属性を持つ場合、課題が同じであることを意味しますが、異なる言語または異なる範囲で見つかります。さらにグループ化するためにそれを使うことができます。

    • Description - 問題を説明しています

    • Severity - インスペクションの重大度を示します。

    • WikiUrl - 利用可能な場合は対応するコードインスペクション索引エントリへのリンク。

    • Global - ソリューション全体のコードインスペクションに通知します。

  • プロジェクトごとにグループ化された見つかった課題のリスト。各課題には次の属性があります。

    • TypeId - 各号を対応するインスペクションにリンクすることを許可する ( レポートの最初の部分にIssueType )

    • File - 影響を受けるファイルへのパス(ソリューションに対する相対パス)。

    • Offset - ファイルの先頭から問題のあるコードの先頭と末尾までのオフセット範囲(シンボル単位)。

    • Line - 問題のあるコードを含む行

    • Message - 問題の簡単な説明

    • Severity - この属性は、課題の重大度が対応するインスペクションの重大度と異なる場合にのみ表示されます。これは、ソリューション内の一部のプロジェクトで警告をエラーとして扱うオプションが有効になっていても、そうでない場合に可能です。この場合、元の警告の重大度と異なる重大度のエラーがあります。

どのように出力を処理するかはあなた次第です。しかし、ここで推奨されるいくつかの次のステップがあります:出力をHTMLレポートに変換するか、検出された課題の数と種類に基づいて継続的インテグレーション(CI)サーバー上にメッセージを生成します。

使用シナリオ

次に、このツールを使用する方法と、その出力で正確にできることを見てみましょう。ローカルマシンで実行すると役立つ場合がありますが、ReSharperがない場合にのみ、ReSharperを使用すると、数回クリックするだけで選択したスコープのインスペクションの結果を取得できます。必要に応じて、検出された課題をレポートファイルにエクスポートできます。また、ReSharperを使用すると、InspectCodeレポートを開くことができます。

より有望なケースは、InspectCodeをCIサーバー上で使用して、ビルドスクリプトに組み込み、コードインスペクションの結果をビルドレポートとメッセージに追加することです。

JetBrains TeamCityは、InspectCodeで検出されたコードの課題を視覚的に表示します。

Visual presentation of code issues in JetBrains TeamCity web interface

詳細については、TeamCityのドキュメント(英語)を参照するか、TeamCity の最新バージョンをダウンロードして試してください。

DotSettingsを使用してInspectCodeを構成する

以前にReSharperを使用してターゲットソリューションに取り組んだことがある場合は、コードインスペクション設定を既に構成している可能性があります。もしそうなら、InspectCodeは .DotSettings ファイルであなたのカスタム設定を見つけて、適用します。設定ファイルがない場合は、デフォルトの重要度レベルがすべてのインスペクションに使用されます。コードインスペクションのカスタム重大度レベルのほかに、InspectCodeは .DotSettings ファイルで次の設定を探します。

CIサーバーでInspectCodeを構成する場合は、ReSharper、 ソリューションチーム共有レイヤーに設定を保存するを使用してローカルですべての構成を行い、ソリューションディレクトリ内の結果の YourSolution.sln.DotSettings ファイルをVCSにコミットできます。サーバー上のInspectCodeは、これらの設定を見つけて適用します。

別の方法として、--profile パラメータを介して共有 .DotSettings ファイルへのパスを指定することができます(他の設定ファイルの設定がある場合はそれを上書きします)。

コマンドラインパラメーターでInspectCodeを構成する

上記のいくつかのオプションパラメータについては既に説明しました。コマンドラインパラメータ( InspectCode.exe --helpを入力してリストすることができます)の完全なリストを次に示します。

インスペクションパラメーター

  • --project - ソリューション全体ではなく特定のプロジェクトを分析できます。このパラメータの後に、ソリューション内の複数のプロジェクトに一致するプロジェクト名またはワイルドカードを入力できます。例: --project=*Billing

  • --include/--exclude — relative path(s) or wildcards that define the files to include/exclude during the inspection. If both --include and --exclude are defined and cover the same set of files, --exclude will have higher priority.
    To specify multiple paths or wildcards, separate them with the semicolon or use the --include/--exclude parameters several times.

  • --swea--no-swea - これらのパラメータはソリューション全体の分析を明示的に有効または無効にします。それ以外の場合、ソリューション全体の分析は既存の設定に基づいて有効または無効になります。

  • --severity (-s) - デフォルトでは、InspectCodeは重大度レベルが提案以上の課題のみを報告します。このパラメーターを使用すると、報告された最小の重大度を [INFO, HINT, SUGGESTION, WARNING, ERROR]に変更できます。例: -s=WARNING

  • --dumpIssuesTypes -it —このオプションを使用して、既存のすべてのコードインスペクションを出力にダンプします。このオプションは、実際の分析とは別に使用する必要があります。つまり、解の引数はありません。

  • --properties — MSBuildプロパティをオーバーライドできます。各プロパティを個別に設定する( --properties:prop1=val1 --properties:prop2=val2)か、セミコロンを使用して複数のプロパティ --properties:prop1=val1;prop2=val2を分離することができます。

    セミコロンは値の内側では使用できないことに注意してください(例: --properties:ReferencePath="r:\reference1\;r:\reference2\")。そのような場合、別の --properties パラメーターを使用して各値を個別に追加します。値は結合されます。

    指定されたプロパティは、分析されたすべてのプロジェクトに適用されます。現在、特定のプロジェクトのみにプロパティを設定する直接的な方法はありません。回避策は、このプロジェクトでカスタムプロパティを作成し、それを目的のプロパティに割り当ててから、InspectCodeパラメーターでカスタムプロパティを使用することです。

  • --toolset —このオプションを使用して、正確なMSBuildバージョンを指定します。たとえば、12.0: --toolset=12.0 デフォルトでは、使用可能な最高のMSBuildバージョンが使用されます。同じバージョンのインストールが複数ある場合、たとえばVisual Studioの16.0や.NET Core 3.xの2019および16.0の場合、このオプションは機能しない可能性があります。

  • --toolset-path —このオプションを使用して、MSBuildへの正確なパスを指定します。これは、カスタムMSBuildインストールがあり、InspectCode(例: --toolset-path="c:\tools\msbuild\bin\MsBuild.exe")で使用する場合に役立ちます。

  • --dotnetcore —デフォルトでは、.NET Coreインストールは自動検出されます。このオプションを使用して、自動検出により競合が発生した場合、特定の.NET Coreインストールを指すことができます。引数なしで使用して、.NET Coreを無視します。例: --dotnetcore=/usr/local/share/dotnet/dotnet

  • --dotnetcoresdk —このオプションを使用して、MSBuildを提供する.NET Core SDKバージョンを指定します。例:SDK 2.0.3および3.0.100で.NET Coreをインストールした場合、InspectCodeは3.0.100(プレビューバージョンを含む最新のもの)を優先します。.NET Core SDK 2.0.3でInspectCodeを実行する場合は、コマンドラインに --dotnetcoresdk=2.0.3 を追加します。

  • --mono —デフォルトでは、Monoインストールは自動検出されます。このオプションを使用して、自動検出によって競合が発生した場合に特定のMonoインストールを指すことができます。引数なしで使用して、Monoを無視します。例: --mono=/Library/Frameworks/Mono.framework/Versions/Current/bin/mono

  • --targets-for-references - プロジェクトの参照アセンブリを取得するために実行されるカスタムMSBuildターゲットの名前。ターゲットはプロジェクトファイルまたは .targets ファイルで定義されています。複数の値はセミコロンで区切ります。例: --targets-for-references="GetReferences"

  • --targets-for-items —プロジェクトの他のアイテム(たとえば、コンパイルアイテム)を取得するために実行されるカスタムMSBuildターゲットの名前。ターゲットは、プロジェクトファイルまたは .targets ファイルのいずれかで定義されます。複数の値はセミコロンで区切られます。例: --targets-for-items="GetCompileItems"

補助パラメーター

  • --output -o —出力ファイルを設定できます。

  • --format (-f) —デフォルトでは、InspectCodeはその出力をXML形式で書き込みます。必要に応じて、このパラメーターで他の出力形式 [Html, Text] を指定できます。例: -f=Text

  • --jobs (-j) —デフォルトでは、InspectCodeはヒューリスティックを使用してジョブを分割し、利用可能な限り多くのスレッド/コアを使用してジョブを並行して実行します。必要に応じて、たとえば -j=4のように、スレッドの数を制限できます。

  • --absolute-paths (-a) - デフォルトでは、InspectCodeのレポートのファイルはソリューションファイルへの相対パスで書かれています。このスイッチを使用して、レポートに絶対パスを含めることができます。

  • --debug (-d) —このオプションを使用して、InspectCodeの実行詳細を出力に追加します。InspectCodeに問題がある場合、これらの詳細はサポートチーム(英語)に連絡するときに役立ちます。

  • --verbosity —デフォルトでは、InspectCodeはログに情報メッセージのみを表示します。このパラメーターを使用して、ログに書き込まれる情報の量を次のレベルで変更します(順序は詳細度の低い順): [OFF, FATAL, ERROR, WARN, INFO, VERBOSE, TRACE]
    例:InspectCodeで何か問題が発生した場合、ReSharperサポートに連絡して、すべてのTRACEメッセージとログファイルを共有できます: --verbosity=TRACE > [path_to_log_file]

  • --caches-home - InspectCodeがキャッシュするデータのカスタムの場所を指定できます。設定ファイルがない場合は、デフォルトで %LOCALAPPDATA% ディレクトリが使用されます。設定ファイルがある場合は、そこに指定されているものが使用されます。このパラメータは、キャッシュに高速SSDディスクを使用する場合、またはすべてのビルド処理データを1か所に格納する場合に役立ちます。

  • --config-create および --config - これらのオプションを使用すると、構成ファイルで上記のパラメーターを渡すことができます。最初のオプションは現在のパラメータに従って設定ファイルを作成します。2番目のオプションはこのファイルからパラメータをロードするために使用されます。

ReSharper設定を制御するパラメーター

  • --profile —デフォルトでは、InspectCodeは、デフォルト設定を 「ソリューションチーム共有」レイヤー SolutionName.DotSettingsのReSharper設定で上書きします(存在する場合)。必要に応じて、このパラメーターを使用して別の .DotSettings ファイルを指定し、他のすべての設定をオーバーライドできます。例:
    --profile="C:\Work\MyRsSettings.DotSettings"

  • --disable-settings-layers -dsl —指定された設定レイヤーを無効にします。許容値: GlobalAll , GlobalPerProduct , SolutionShared , SolutionPersonal

  • --no-buildin-settings —グローバル、ソリューション、およびプロジェクト設定レイヤーからの設定を抑制します。 --disable-settings-layers: GlobalAll; GlobalPerProduct; SolutionShared; SolutionPersonal; ProjectShared; ProjectPersonalと同等

以下に、いくつかのコマンドラインオプションを指定してInspectCodeを実行する例を示します。

InspectCode.exe --project=Documents -o="C:\temp\Results.xml" --no-swea -x=EtherealCode.ReSpeller "C:\Projects\ReSharper\resharper.sln"

MSBuild。考えられる問題と解決策

InspectCodeがターゲットソリューションファイルを受け取ると、インスペクションするファイルのリストを作成し、言語バージョンなどの多くのプロパティを初期化する必要があります。InspectCodeはMSBuildを使用して、プロジェクトファイルからこの情報を取得します。

ほとんどの場合、InspectCodeはターゲットソリューションに適したMSBuild実行可能ファイルを自動的に検出します。ただし、ソリューションランタイムのバージョンがインストールされている.NET SDKのバージョンと一致しない場合など、自動検出を妨げる問題がある可能性があります。

InspectCodeが The current .NET SDK does not support targeting .NET Core 3.0.The SDK 'Microsoft.NET.Sdk' specified could not be found.などのエラーを生成する場合、追加のパラメーターを使用して正しいSDKまたはランタイムを指定する必要があります。.NETを使用する場合、MSBuildは既にマシンにインストールされており、多くの場合、複数のインストールが存在するため、ターゲットソリューションに適合するものを提供する必要があります。

ほとんどの場合、パラメータを1つだけ追加する必要があります。--toolset または --dotnetcoreです。複雑な場合、たとえば、マシンへのさまざまなインストールや、MSBuildのカスタムバージョンを使用する場合、他のパラメーター --toolset-path , --mono , --targets-for-references , --targets-for-itemsが必要になる場合があります。

--dotnetcore または --dotnetcoresdkを指定すると、InspectCodeは.NET Core SDKのMSBuildを使用しようとし、他は無視します。例:マシンに複数のMSBuild v 16.0がインストールされており、--dotnetcoreで.NET Coreインストールへのパスを指定した場合、InspectCodeは指定されたインストールの.NET Core MSBuildを使用します。 --dotnetcore が指定されていない場合、InspectCodeはソリューションディレクトリを調べ、global.jsonを見つけようとし、そこで指定されたSDKバージョンを使用します。何も見つからない場合、利用可能な最新のSDKバージョンが使用されます。

プロジェクト参照。考えられる問題と解決策

MSBuildはInspectCodeでも使用され、参照されているプロジェクトおよびアセンブリからシンボルを解決します。環境に応じて異なる参照を使用できる2つのプロジェクトプロパティがあります: Platform および Configuration。InspectCodeを実行する環境がプロジェクトが最後にビルドされた環境と異なる場合、次のようなエラーを受け取る可能性があります: Can't resolve reference XXX: Reference wasn't resolved by MsBuild または Could not resolve this reference. Could not locate the assembly "XXX"

このようなエラーが発生した場合は、出力を確認して、ビルド構成に不一致があるかどうかを確認してください。たとえば

..... JetBrains Inspect Code 2020.1 Running in 64-bit mode, .NET runtime 4.0.30319.42000 under Microsoft Windows NT 10.0.17134.0 Custom settings layer is mounted. Used file XXXXX.DotSettings Using toolset version 15.0 from "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin" Configuration: Debug, Platform: x86 .....

上記では、プロジェクトファイルで指定されたプラットフォームが x86であることがわかりますが、ツールは64ビットモードで実行されています。これを修正するには、--properties パラメーター --properties:Platform=x64;Configuration=Debugを使用してターゲットプラットフォームと構成を明示的に指定します。

InspectCodeでReSharper拡張機能を使用する

ReSharper拡張機能の中には追加コードインスペクションを提供するものがあり、それを使用するとコード内でさらに潜在的な問題を見つけることができます。このような拡張子はInspectCodeでも使用できます。

InspectCodeを使用して、ReSharper拡張から追加のコードインスペクションを実行する

  1. ReSharper拡張を含むNuGetパッケージ .nupkg を見つけます。ReSharperギャラリー(英語)から取得するか、ReSharper 開発ガイドの説明に従って独自の拡張用に作成することができます。

  2. この .nupkg ファイルを、InspectCode.exe があるディレクトリにコピーします。

  3. InspectCodeを実行します。ディレクトリ内にReSharper拡張子を持つすべてのNuGetパッケージを検出し、自動的にロードします。

サポートされる言語

InspectCodeは、次の言語のコードの課題を検出します。

Language: C#Language: VB.NETLanguage: C++Language: HTMLLanguage: ASP.NETLanguage: RazorLanguage: JavaScriptLanguage: TypeScriptLanguage: CSSLanguage: XMLLanguage: XAMLLanguage: ResxLanguage: Build ScriptsLanguage: ProtobufLanguage: JSON
Feature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is availableFeature is not availableFeature is not available
最終更新日: 2020年7月2日

関連ページ:

コードインスペクションでコードの課題を見つける

ReSharperの静的コード解析はコード・インスペクションと呼ばれ、サポートされているすべての言語で2300を超える個別コードインスペクションをコードに適用することによって実行されます。コードの課題はいくつかの方法で見つけることができます:ReSharperは、エディターで開かれたすべてのファイル...

dupFinderコマンドラインツール

dupFinderは、C#とVisual Basic .NETコードの重複を検出する無料のクロスプラットフォームコマンドラインツールです。しかし、JetBrainsツールであるdupFinderは、スマートな方法でそれを行います。デフォルトでは、コードフラグメントが同一である場合だけでなく、異なる変...

コマンドラインからのカバレッジ分析

コードインスペクションを実行し、コマンドラインから分析を複製することもできます。dotCoverコンソールランナーは、アーカイブまたはNuGetパッケージ(Windows、macOS、Linux)として無料で配布されるコマンドラインツールです。このツールを使用すると、次のことができます。あらゆるテス...

コード・インスペクション

ReSharperはサポートされているすべての言語で2500以上のインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルで設計時にコードの課題を検出して強調表示するため、および/または特定の範囲内ですべてのコードの課題を見つけるために使用されます。インスペクション Re...

特定の範囲でコードの課題を見つける

設計時コードインスペクションは、エディターでコーディングしたり、特定のファイルを見直したりするときに役立ちます。ただし、ReSharperを使用すると、ソリューション全体または狭い範囲でスタティックコード分析を実行し、結果をフレンドリーな視点で調べることもできます。必要に応じてインスペクション結果を...

コードインスペクション設定の構成

コード注釈を使用して、ReSharperがコードをインスペクションする方法をカスタマイズすることもできます。設計時コードインスペクションを構成する:デフォルトでは、ReSharperはサポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にす...