
コード契約とは
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
そして、プロジェクトディレクトリ内のすべてのソースを書き換えるコマンド:
永遠に契約に別れを告げたくない場合は、このユーティリティをビルドサーバーのビルドステップとして使用できます。
参照資料
GitHubプロジェクトNugetパッケージ