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パッケージ



All Articles