ReSharper 2020.3 ヘルプ

InspectCode コマンドラインツール

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

InspectCode を実行する

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

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

  3. ターゲットソリューションを構築します。適切なビルド構成を使用していることを確認してください。

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

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

  5. または、.NET Core ツールとしての ReSharper コマンドラインツールをインストールして、jb コマンドで InspectCode を実行することもできます。

出力の理解

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

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

    • Id — 各問題を対応するインスペクションにリンクできます。

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

    • SubCategory — 一部の問題タイプが同じ SubCategory 属性を持っている場合、問題が同じですが、異なる言語または異なるスコープで見つかったことを意味します。さらにグループ化するために使用できます。

    • Description — 問題を説明します

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

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

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

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

    • 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 ファイルへのパスを指定することができます(他の設定ファイルの設定がある場合はそれを上書きします)。

EditorConfig を使用して、コードインスペクションを構成する

プロジェクトのコードスタイルを管理するために EditorConfig を使用する場合は、.editorconfig ファイルからコードインスペクションを設定することもできます。

EditorConfig の規則が示すように、InspectCode は、ルートファイルパスに到達するか、root=true を含む EditorConfig ファイルが見つかるまで、現在のファイルのディレクトリとそのすべての親ディレクトリにある .editorconfig という名前のファイルで定義されたインスペクション設定を適用します。 *Test.cs などの .editorconfig ファイルで指定されたファイルマスクも考慮されます。

.editorconfig ファイルのインスペクション設定は、他のプロパティと同様に構成されます。対応する行を追加します。

[inspection_editorconfig_property]=[error | warning | suggestion | hint | none]

例: 次の行を使用して、可能性のある 'System.NullReferenceException' インスペクションの重大度レベルエラーに変更できます。

resharper_possible_null_reference_exception_highlighting=error

各インスペクションの EditorConfig プロパティは、コードインスペクション索引セクションと EditorConfig プロパティのインデックスページのページにあります。- ブラウザー検索を使用して目的のインスペクションのプロパティを探すだけです。

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

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

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

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

  • --include/--exclude — インスペクション中に含める / 除外するファイルを定義する相対パスまたはワイルドカード。 --include--exclude の両方が定義されていて、同じファイルセットをカバーしている場合、--exclude の優先度が高くなります。
    複数のパスまたはワイルドカードを指定するには、セミコロンで区切るか、--include/--exclude パラメーターを数回使用します。

  • --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 Core3.x の 2019 および 16.0 です。

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

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

  • --dotnetcoresdk — このオプションを使用して、MSBuild を提供する .NET CoreSDK のバージョンを指定します。例: SDK 2.0.3 および 3.0.100 を使用して .NETCore をインストールした場合、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 — 指定された設定レイヤーを無効にします。許容値: GlobalAllGlobalPerProductSolutionSharedSolutionPersonal

  • --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"

MS ビルド: 考えられる問題と解決策

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 および ConfigurationInspectCode を実行する環境がプロジェクトが最後にビルドされた環境と異なる場合、次のようなエラーを受け取る可能性があります: 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 DevGuide の説明に従って独自の拡張用に作成することができます。

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

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

サポートされる言語

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

関連ページ:

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

ReSharper の静的コード分析はコードインスペクションと呼ばれ、サポートされているすべての言語のコードに 2300 を超える個別のコードインスペクションを適用することによって実行されます。コードの問題はいくつかの方法で見つけることができます:ReSharper は、エディターで開かれたすべてのファイルについて、設計時に自動的にコードの問題を見つけてハイライトします。設計時コードインスペクションスコープは、ソリューション全体の分析を使用してソリューション全体に拡張できます。この場合、ソリュー...

dupFinder コマンドラインツール

dupFinder は、C# と Visual Basic .NET コードの重複を検出する無料のクロスプラットフォームコマンドラインツールです。しかし、JetBrains ツールである dupFinder は、スマートな方法でそれを行います。デフォルトでは、コードフラグメントが同一である場合だけでなく、異なる変数、フィールド、メソッド、型またはリテラルが含まれている場合でも、構造的に類似している場合、コードフラグメントを重複と見なします。もちろん、許可された類似度と、複製されたフラグメントの最...

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

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

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

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

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

コードアノテーションを使用して、ReSharper がコードをインスペクションする方法をカスタマイズすることもできます。設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押し...

ReSharper 設定の管理と共有

ReSharper は、階層化された設定のメカニズムを使用して環境設定を保存するため、次の利点があります。さまざまなソリューションで異なる設定を行うことができます。環境設定のさまざまなサブセットを別の場所に保存し、特定のソリューションで作業するときに環境設定を組み合わせることができます。例: 記号のアイコンとチーム設定のコード形式を個人設定で保存し、これらの設定を自動的に組み合わせることができます。設定の特定のサブセットを VCS に保持することにより、チーム内の設定を同期できます。ReShar...