1

特定のdllに、実際にCLRでロードしようとせずに、.net 4.5でのみ実行できるコードが含まれているかどうかをテストする簡単な方法はありますか?

背景:4.0ターゲットにコンパイルしているDLLがありますが、.net 4.5(vs 2012)ツールセットを使用しています。私の実行環境には4.5がインストールされていません。を使用しAsyncTargetingPackて非同期コードを記述し、コードを.net4.0にターゲティングしています。

誤って、DLLが一部の.net4.5のみのクラス/名前空間を参照するような何かを台無しにしないようにしたいと思います。

4

2 に答える 2

1

これは、CLRのバージョンが大幅に変更された場合を除いて、これまで不可能でした。これは、.NET 1.0から1.1、1.1から2.0、および3.5から4.0で機能しました。中間バージョンにはCLRバージョンの変更はなく、4.0から4.5へのバージョン変更もありません。

これにより、WaitHandle.WaitOne(int)メソッドでかなり悪名高い問題が発生しました。これは、mscorlibの.NET2.0SP1バージョンに追加されたオーバーロードです。対応する変更がなくても、[AssemblyVersion]は2.0.0.0のままです。そのため、プログラマーは無意識のうちにオーバーロードを使用し、サービスパックがインストールされていないマシンにコード爆弾を仕掛けました。

Microsoftは、.NET 4でこの問題を修正し、参照アセンブリはランタイムアセンブリのコピーではなくなりました。メタデータのみが含まれ、ILは含まれません。その結果、何かが壊れることを恐れずにパブリッククラスを変更できるようになり、参照アセンブリは更新されませんでした。.NET 4のアップデートがたくさん出荷されており、事故のことは聞いたことがありません。

.NET4から4.5でも同じです。4.0参照アセンブリを使用する場合、4.5固有のクラスまたはメソッドを誤って使用しないようにすることができます。4.5で追加された機能を実際に使用するには、4.5参照アセンブリでコンパイルする必要があります。

于 2012-07-18T12:56:55.857 に答える
0

.NET Reflectorを使用すると、assembly / dllを開いて、そのターゲットランタイムとプラットフォームターゲットを確認できます。ildasm.exeでもこれを行うことができますが、ヘッダーを見ると少しわかりにくくなります。/headerオプションを検索します。

ildasm.exeは、VisualStudioのコマンドプロンプトから実行できます。

于 2012-07-18T08:42:56.723 に答える