5

PostSharp についての最近の言及で、次のことを思い出しました。

私が働いていた昨年、PostSharp を使用してインストルメンテーションをコードに挿入することを考えていました。これは、Team Foundation Server チーム ビルド/継続的統合環境にありました。

考えてみると、PostSharp の動作方法 (コンパイラによって生成された IL を編集する) についてしつこい感じがしました。これは少し気になりました。

私は、PostSharp が正しく機能しないことをあまり心配していませんでした。このようなツールについて聞いたのは初めてだったので心配でした。他のツールがこれを考慮していないのではないかと心配していました。

実際、作業を進めていくと、PostSharp が元の IL がどのフォルダーにあるかについて混乱してたという事実に起因する問題がいくつか発生しました。これにより、ビルドが壊れていました。プロジェクト参照を解決する MSBUILD ターゲットとの競合が原因のようです。この競合は、PostSharp が一時ディレクトリを使用して変更されていないバージョンの IL を保存しているためと思われます。

とにかく、当時は参照する StackOverflow がありませんでした。ビルド プロセスの一部として IL を編集するツールを他にご存知でしょうか。または、マイクロソフトがそのようなツールを Visual Studio、MSBUILD、チーム ビルドなどで考慮に入れているかどうか。


更新:回答ありがとうございます。

要するに、少なくとも VS 2010 では、Microsoft はこの種のことが起こる可能性があることを認識しておく必要があるようです。したがって、VS2010 でこの領域に問題がある場合、Microsoft が責任を共有する可能性があります。

4

4 に答える 4

4

.NET 4.0 には、Microsoft Research のコード コントラクトプロジェクトが含まれています。これは、メソッドの事前/事後条件で実行時 (および一部のコンパイル時) のアサーションを実行します。アサーションはライブラリに実装され、.NET コンパイラは IL のメソッド呼び出しとして事前/事後条件を発行します。ただし、コントラクトは通常、メソッドの開始時に指定されるため、二次ツールで IL を書き直して、アサーションを正しい順序と正しい場所に配置する必要があります。

編集:

  • cccheckは、ビルド後に実行されるツールであり、コンパイル時にコントラクトを検証する静的チェッカーです。
  • ccrewriteは、ポスト cccheck を実行し、IL を書き換えて、コントラクトからランタイム チェックを生成するツールです。

(これらのツールに関する追加の技術情報は見つかりません)

Visual Studio 2010 はまだ使用していませんが、Code Contracts 機能のデモを見たことがあります。これは IDE ビルド プロセスに統合されています。cccheck は常に実行する必要があり、ビルドされたアセンブリにコントラクトが存在する場合はコードを返します。それらが存在する場合、コードは ccrewrite を実行する必要があることを示します。

于 2009-07-16T14:27:28.070 に答える
4

System.Reflection ツールセットを拡張するフレームワーク ライブラリであるMono.Cecilについて知っています。これはLin Fuプロジェクトで使用されています。

ビルド プロセスのサポートについてはよくわかりません。サイズを確認する必要があります。

于 2009-07-16T13:15:15.050 に答える
3

コードの難読化ツールである Dotfuscator がアセンブリ アセンブリの IL を変更し、多くのビルド プロセスで使用されていることは知っています。

IL は、コードの難読化と保護のためだけでなく、アプリケーションに追加機能を挿入するためにも変更されます (こちらのランタイム インテリジェンスに関する (PreEmptive の) ブログ投稿を参照してください

さらに、Microsoft の Common Compiler Infrastructure には、アセンブリを読み取り、変更し、再書き込みする機能があります。プロジェクトについてはCodePlexを参照してください。

于 2009-07-16T14:34:16.463 に答える
1

Fodyは、プラグイン アーキテクチャに基づいて .net アセンブリを作成するための拡張可能なツールです。

于 2015-08-10T23:28:27.823 に答える