Roslynとのコードコントラクトを削除する

画像

コード契約とは


Code Contractsは、2008年にMicrosoft Researchの開発者チームによって作成されました。 コードコントラクトのタスクは、コード内の状態に関する前提条件を記述することです。これは、後でドキュメントを生成し、コードの正確性をチェックするために使用されます コードコントラクトは.NETプラットフォームの一部となり、コンパイラ、プラットフォーム、およびVisual Studioでサポートを受けることが期待されていました。 残念ながら、サポートはプラットフォーム上にSystem.Diagnostics.Contracts名前空間クラスの形式でのみ現れました。 残りについては、プラグインと追加のユーティリティが必要です。
現時点では、プロジェクトはSergeyTと他のいくつかの参加者によってサポートされています。

モノコード契約のサポート


Windowsで開発されたプロジェクトの場合、コードコントラクトインフラストラクチャは理解可能であり、さらに開発されています。 MSBuildにはビルドステップがあり、ユーティリティを使用してアセンブリを書き換え/検証できます。VSおよびResharperにはプラグインがあります。 しかし、Monoのものはあまり良くないので、複雑なコードを壊す自家製のccrewriteがあります。 xbuildおよびMonoDevelopにはサポートがなく、プロジェクトを簡単な方法でビルドすることはできません。

プロジェクトからコード契約を削除する理由:


-プロジェクトがコードコントラクトユーティリティに外部的に依存しているため、プロジェクトを組み立てることができません。
-アセンブリを書き換えるという形での追加のステップにより、コンパイル速度が低下します。
-Monoのサポートの欠如。
「メリットよりも不便が多い。」

ソースからのコードコントラクトの削除


MicrosoftのRoslynプロジェクトのおかげで、C#/ VB.NETでソースコードを分析および処理することは非常に簡単な作業になりました。 そして、ソースコードからコードコントラクトを削除するためにこのパスを選択しました。 ソリューション自体はシンプルで、 CSharpSyntaxRewriterで構成されます。CSharpSyntaxRewriterは、コードを実行し、コードコントラクトチェックを同等の外部コードコントラクトに置き換えます。

コードコントラクトリムーバー自体はNugetパッケージとして設計されており、ユーティリティとして使用でき、Monoで実行されます。
Install-Package CodeContractsRemover 

そして、プロジェクトディレクトリ内のすべてのソースを書き換えるコマンド:
 # code_contracts_remover.exe <Convert|Remove> <directoryPath> [searchPattern=*.cs] [encoding=utf-8] mono packages/CodeContractsRemover.1.0.2/tools/code_contracts_remover.exe Convert ./ 


永遠に契約に別れを告げたくない場合は、このユーティリティをビルドサーバーのビルドステップとして使用できます。

参照資料


GitHubプロジェクト
Nugetパッケージ

Source: https://habr.com/ru/post/J302516/


All Articles