CleanupCode コマンドラインツール
CleanupCode は 無料のクロスプラットフォーム コマンドラインツールであり、プロジェクトやソリューションで コードのクリーンアップ (フォーマット修正、構文スタイルの適用、冗長な部分の削除など)を実行して、統一されたコードベースを実現します。
ソリューションやプロジェクトがなくても、指定した .NET ソースファイルのセットを再フォーマットすることもできます。
CleanupCode を実行する
ReSharper コマンドラインツールをダウンロードします。 ダウンロードボタンの横にあるセレクタを使用して、オペレーティングシステムを選択します。
コマンドラインツールパッケージを任意のディレクトリに解凍します。
ダウンロードした .zip ファイルを展開する前に「ブロック解除」されていることを確認してください。ファイルを右クリックし、 プロパティ を選択して ブロック解除する をクリックします。 これを行わないと、.NET フレームワークがアプリケーションを部分信頼で読み込むため、正しく読み込まれず実行されません。
ソリューションをクリーンアップし、ソリューションファイルを引数として使用する場合は、ツールを実行する前に、ソリューションが適切なビルド構成を使用してビルドされていることを確認してください。
次のコマンドを実行します:
cleanupcode.exe YourSolution.slnソリューション全体をクリーンアップする、または
cleanupcode.exe File1 File2 File3 ...1 つ以上の .NET ファイルをクリーンアップする、または
cleanupcode.exe <FileMaskForTargetFiles>ファイルマスクに一致する .NET ファイルのセットをクリーンアップします。
または、 .NET ツールとしての ReSharper コマンドラインツールをインストールして、
jbコマンドで CleanupCode を実行することもできます。
DotSettings で CleanupCode を構成する
以前に JetBrains Rider でターゲットソリューションを作業したことがある場合は、すでにコードスタイル設定を構成している可能性があります。 その場合、CleanupCode は カスタム設定 を .DotSettings ファイルで見つけて適用します。
CleanupCode は、DotSettings ファイルから次の設定を読み取ります。
CI サーバーで CleanupCode を構成したい場合は、JetBrains Rider を使ってローカルですべての設定を行い、 ソリューションチーム共有レイヤーに設定を保存し、ソリューションディレクトリ内の生成された YourSolution.sln.DotSettings ファイルを VCS にコミットできます。 サーバー上の CleanupCode は、これらの設定を見つけて適用します。
別の方法として、 --settings パラメーターを介して共有 .DotSettings ファイルへのパスを指定することができます(他の設定ファイルの設定がある場合はそれを上書きします)。
EditorConfig で CleanupCode を構成する
コードスタイル設定は EditorConfig を介して行うことができます。 これらの設定は、ソリューション階層の異なるレベルの .editorconfig ファイルに保存できます。 これらのファイルは通常、VCS に配置され、そこで定義された設定がプロジェクトチーム間で共有されます。
JetBrains Rider を使うと、EditorConfig を使って、JetBrains Rider の 設定 ダイアログで利用できる任意のコードスタイル環境設定を定義できます。 サポートされている EditorConfig プロパティの名前と説明は、 EditorConfig リファレンスにあります。
.editorconfig ファイルで定義されたコードスタイルプロパティは、この .editorconfig ファイルが適用されるスコープで JetBrains Rider の設定で定義された同じプロパティをオーバーライドすることに注意してください。
コマンドラインパラメーターで CleanupCode を構成する
クリーンアップパラメーター
--profile— 実行するクリーンアップタスクを一覧表示するコードクリーンアッププロファイル。デフォルトでは、CleanupCode は Built-in: Full Cleanup profile で指定されたコードのクリーンアップタスク、つまり ファイルヘッダーの更新を除くすべての 利用可能なクリーンアップタスクを適用します。
さらに、組み込みプロファイルが 2 つあります — Built-in: Reformat Code は コードフォーマット環境設定 のみを適用し、 Built-in: Reformat & Apply Syntax Style は コードフォーマット環境設定 と コード構文スタイルの両方を適用します。
これらのプロファイルの 1 つまたは任意の カスタムプロファイルを使用するには、
--profileパラメーターを介してプロファイル名を渡します(例:--profile="Built-in: Reformat Code" YourSolution.sln)。--include/--exclude— クリーンアップ中に含める / 除外するファイルを定義するファイルマスク。--includeと--excludeの両方が定義され、同じファイルセットをカバーする場合、--excludeが優先されます。ファイルマスクで Ant スタイルのワイルドカード(英語)を使用できます。
ディレクトリ区切り文字を除く単一文字に一致する
?ディレクトリ区切り文字を除く 0 文字以上に一致する
*ディレクトリ区切り文字を含む任意の数の文字に一致する
**OS パス形式に関係なくディレクトリ区切り文字と一致する
/または\
たとえば、パターン
**Test?\**.*は次のファイルと一致します。C:\Projects\MyTestX\data\file_one.txt
/home/projects/TestY/file_two.xml
だがしかし:
C:\Projects\Test\data\file_one.txt
/home/projects/TestY/file_two
複数のパスまたはワイルドカードを指定するには、セミコロン
;で区切るか、--include/--excludeパラメーターを複数回使用します。
MSBuild 関連のパラメーター
--properties— MSBuild のプロパティを上書きできます。 各プロパティを個別に設定するか(--properties:prop1=val1--properties:prop2=val2)、セミコロンを使用して複数のプロパティ--properties:prop1=val1;prop2=val2を区切ることができます。セミコロンは値の中で使用できないことに注意してください。例:
--properties:ReferencePath="r:\reference1\;r:\reference2\"。 このような場合は、それぞれの値を別々に別の--propertiesパラメーターで指定してください。値は結合されます。指定されたプロパティは、分析されたすべてのプロジェクトに適用されます。 現在、特定のプロジェクトのみにプロパティを設定する直接的な方法はありません。 回避策は、このプロジェクトでカスタムプロパティを作成し、それを目的のプロパティに割り当ててから、CleanupCode パラメーターでカスタムプロパティを使用することです。
--toolset— このオプションを使うと、MSBuild バージョンを正確に指定できます。 例えば 12.0:--toolset=12.0デフォルトでは利用可能な中で最も高い MSBuild バージョンが使用されます。 同じバージョンのインストールが複数ある場合(例えば Visual Studio 2019 の 16.0 と .NET Core 3.x の 16.0 など)、このオプションが正しく動作しない可能性があります。--toolset-path— このオプションを使用して、MSBuild への正確なパスを指定します。 カスタム MSBuild インストールがあり、それを CleanupCode で使用する場合に役立ちます (例:--toolset-path="c:\tools\msbuild\bin\MsBuild.exe")。--dotnetcore— デフォルトでは、.NET インストールは自動検出されます。 自動検出で競合が発生した場合は、このオプションを使用して特定の .NET インストールを指定できます。 .NET Core を無視するには、引数なしで使用します。 例:--dotnetcore=/usr/local/share/dotnet/dotnet--dotnetcoresdk— このオプションを使用して、MSBuild を提供する .NET SDK バージョンを指定します。 例: .NET を SDK 5.0.100 および 6.0.302 とともにインストールした場合、CleanupCode は 6.0.302 (プレビューバージョンを含む最新版) を優先します。 CleanupCode を .NET SDK 5.0.100 とともに実行する場合は、コマンドラインに--dotnetcoresdk=5.0.100を追加します。--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"。
補助パラメーター
--verbosity— デフォルトでは、CleanupCode は出力にエラーメッセージのみを表示します。 このパラメーターを使用して、出力に書き込まれる情報の量を次のレベルで変更します (順序は少ないものから詳細なものへ):[OFF, FATAL, ERROR, WARN, INFO, VERBOSE, TRACE]--LogLevel— このパラメーターを使用して、--LogFileまたは--LogFolderで指定された、ログファイルに書き込まれる情報の量を制御します。 次のレベルがあります (順序は少ないものから詳細なものへ):[OFF, FATAL, ERROR, WARN, INFO, VERBOSE, TRACE].例えば、CleanupCode で問題が発生した場合は、JetBrains Rider サポートに連絡して、すべての TRACE メッセージを含むログファイルを共有できます:
--LogLevel=TRACE。--LogFile— このパラメーターを使用して、CleanupCode からのメッセージのログファイルへの絶対パスを指定します。 MSBuild および Roslyn からのログも必要な場合は、代わりに--LogFolderパラメーターを使用します。--LogFolder— このパラメーターを使用して、CleanupCode からのログと MSBuild および Roslyn からのログを書き込むディレクトリへの絶対パスを指定します。 CleanupCode からのログのみが必要な場合は、代わりに--LogFileパラメーターを使用します。--caches-home— CleanupCode がキャッシングするデータのカスタム保存場所を指定できます。 デフォルトでは %LOCALAPPDATA% ディレクトリが使われますが、設定ファイルがある場合はそちらの指定が優先されます。 このパラメーターは、高速 SSD をキャッシング用に使いたい場合や、ビルド処理データを一箇所に保存したい場合などに便利です。--config-createと--config— これらのオプションで、上記のパラメーターを構成ファイル経由で渡すことができます。 最初のオプションは現在のパラメーターに基づいて構成ファイルを作成し、2 つ目のオプションはそのファイルからパラメーターを読み込みます。--debug (-d)— このオプションを使用して、CleanupCode の実行の詳細を出力に追加します。 CleanupCode に問題がある場合は、これらの詳細が サポートチーム(英語)に連絡するときに役立ちます。--eXtensions (-x)— 指定されたプラグインをインストールして有効にします。プラグインはその ID で指定します。ID は JetBrains Marketplace のプラグインページで、目的のプラグインを探して 概要 タブの一番下までスクロールすることで確認できます。
例: JetBrains による StyleCop(英語) プラグインのプラグイン ID は
StyleCop.StyleCopであり、このプラグインで CleanupCode を実行するには、コマンドラインに-x=StyleCop.StyleCopを追加する必要があります。複数のプラグインを指定するには、それらの ID をセミコロンで区切ります。
--source— プラグインをインストールするためのカスタムパッケージソース、つまり .nupkg ファイルがあるディレクトリ(例:--source="C:\plugins")を指定できます。 指定がない場合は、CleanupCode は JetBrains Marketplace 内でプラグインを検索します。--measure— 特定のハードウェアやターゲットソリューションでツールを実行した際にパフォーマンスが充分でない場合に役立つ診断オプションです。 このオプションは次のいずれかの引数[sampling | timeline (Windows-only) | memory]と組み合わせて使い、プロファイリングの種類を定義します。例:CleanupCode.exe YourSolution.sln --measure=timeline実行が終了すると、CleanupCode は実行スナップショットを作成し、スナップショットファイルへのパスを表示します。 JetBrains ツールを使用してスナップショットを調べることができます。
サンプリングまたは タイムラインプロファイリング: 結果の .zip ファイルを分析するには、それを解凍し、サンプリングスナップショットファイル ( .dtp ) またはタイムラインスナップショットファイル ( .dtt ) を JetBrains dotTrace で開きます。
メモリプロファイリング: 結果の dotMemory ワークスペースファイル ( .dmw ) を分析するには、 JetBrains dotMemory で開きます。
--version (-v)— このオプションを使用して、ツールの現在のバージョンを表示して終了します。--no-updates— デフォルトでは、CleanupCode は実行ごとに更新をチェックします。 更新のチェックを無効にするには、このオプションを使用します。
ReSharper 設定を制御するパラメーター
--settings— デフォルトでは、CleanupCode は、 'Solution team-shared' layer SolutionName.DotSettings の ReSharper 設定でデフォルト設定をオーバーライドします(存在する場合)。 必要に応じて、このパラメーターを使用して、他のすべての設定をオーバーライドする別の .DotSettings ファイルを指定できます。 たとえば、--settings="C:\Work\MyRsSettings.DotSettings"。
--disable-settings-layers (-dsl)— 指定された 設定レイヤーを無効にします。 許容値:GlobalAll、GlobalPerProduct、SolutionShared、SolutionPersonal--no-buildin-settings— グローバル、ソリューション、プロジェクト設定レイヤーからの設定を抑制します。--disable-settings-layers: GlobalAll; GlobalPerProduct; SolutionShared; SolutionPersonal; ProjectShared; ProjectPersonalと同等
MSBuild。 考えられる問題と解決策
CleanupCode がターゲットソリューションファイルを受信すると、クリーンアップするファイルのリストを作成し、言語バージョンなどの多くのプロパティを初期化する必要があります。 CleanupCode は MSBuild を使用して、プロジェクトファイルからこの情報を取得します。
ほとんどの場合、CleanupCode は自動的にターゲットソリューションのための適切な MSBuild の実行可能ファイルを検索します。 ただし、ソリューションランタイムのバージョンがインストールされている .NET SDK のバージョンと一致しない場合など、自動検出を妨げる問題がある可能性があります。
CleanupCode で 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 がすでにマシンにインストールされており、複数のインストールが存在することが多いため、ターゲットソリューションに適合するものを提供する必要があります。
ほとんどの場合、追加が必要なのは --toolset または --dotnetcore のいずれか 1 つのパラメーターです。 複雑なケース、例えばマシン上にさまざまなインストールがある場合や MSBuild のカスタムバージョンを使用している場合には、他のパラメーター --toolset-path、 --mono、 --targets-for-references、 --targets-for-items が必要になる場合もあります。
--dotnetcore または --dotnetcoresdk を指定すると、CleanupCode は .NET SDK の MSBuild を使用し、その他は無視します。 例: マシンに MSBuild、v 16.0 が複数インストールされていて、 --dotnetcore を使用して .NET インストールへのパスを指定すると、CleanupCode は指定されたインストールから .NET MSBuild を使用します。 --dotnetcore が指定されていない場合、CleanupCode はソリューションディレクトリを調べて global.json を見つけ、そこに指定されている SDK バージョンを使用します。 何も見つからない場合は、利用可能な最新の SDK バージョンが使用されます。
プロジェクト参照。 考えられる問題と解決策
CleanupCode も MSBuild を使い、参照プロジェクトやアセンブリからシンボルを解決します。 環境に応じて異なる参照を使用するためのプロジェクトプロパティが 2 つあります: Platform と Configuration。 CleanupCode を実行する環境が直前にビルドした環境と異なる場合、 Can't resolve reference XXX: Reference wasn't resolved by MsBuild または Could not resolve this reference. Could not locate the assembly "XXX" のようなエラーが発生することがあります。
このようなエラーが発生した場合は、出力を確認して、ビルド構成に不一致があるかどうかを確認してください。 たとえば
上記では、プロジェクトファイルで指定されたプラットフォームが x86 であることがわかりますが、ツールは 64 ビットモードで実行されています。 これを修正するには、 --properties パラメーター --properties:Platform=x64;Configuration=Debug を使用してターゲットプラットフォームと構成を明示的に指定します。