アセンブリがロードされているフレームワークを特定する方法は?
-
29-09-2019 - |
質問
ユーザーは、.NET 4をインストールした後、アプリケーションの奇妙な動作を解決できると報告しました。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
アセンブリを指定しなければ、より高いが互換性のあるバージョンでロードされる可能性があることを知りませんでした。
実行可能ファイルが実行しているフレームワークを特定することは可能ですか?実行時に?または、外部プロセスを通じて?これが事実であることを確認したいと思いますが、ユーザーエクスペリエンスは他の問題の結果ではありません。
Process Explorerは、Evemonが2.0の下で実行されていると言います、私は問題が環境だったと疑っています:
解決
アセンブリの実行コード内から、System.Environment.version staticプロパティを使用して、実行中のCLRバージョンを決定できます。
アセンブリコードを変更したくない場合は、使用できます プロセスエクスプローラー 実行時にプロセスでDLLがロードされていることを確認します。 CLRバージョンは、mscoree.dllのバージョンから識別できます。
他のヒント
CLRバージョン2.0.50727を対象としたプログラムは、.NET 4.0で自動的に実行されません。明示的な.configファイルエントリが必要です。 .configファイルを使用したクライアントの腕前を考えると、これは彼女が実際に行ったことかもしれませんが、そこに問題があることがわかりました。
ニコールが言ったように、プロセスエクスプローラーは間違いなく最も簡単な方法です。 WindDBGを使用して、この情報をフルメモリダンプから取得することもできます。
また、4.0で並んでいることに注意してください CLRホスティング. 。あなたが持っていたプロセスを所有していなかった場合、4.0の前に CLRがロードされたものを知る方法はありません. 。これが、あなたが説明した行動を経験した理由になる可能性があります。