
コード契約とは
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パッケージ