実行可能ファイルを実行する必要がある.NET Frameworkのバージョンを確認する方法
-
11-07-2019 - |
解決
確実に取得できる最も近い方法は、必要な CLR のバージョンを判断することです。これを行うには、ILDASMを使用して「MANIFEST」を確認します。ノードまたはリフレクターで、「Application.exe」の逆ビューを確認します。 ILとしてのノード。どちらの場合も、CLRバージョンを示すコメントがあります。 ILDASMでは、コメントは" // Metadata version"です。 Reflectorでは、コメントは" Target Runtime Version"です。
WindowsFormsApplication1.exeという名前の.NET WinFormsアプリケーションの例を次に示します。
ILDASM:
// Metadata version: v2.0.50727
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly extern System
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
リフレクター:
.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727
また、参照されているアセンブリのリストを見て、最大のバージョン番号を持つ参照を探すこともできます。
再び、「マニフェスト」を見てILDASMを使用します。ノードデータ:
.assembly extern System.Drawing
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 2:0:0:0
}
.assembly extern System.Core
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 3:5:0:0
}
そして、Reflectorを使用して、リストされている各参照の分解(ILのまま)を確認します。
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
最高バージョンのメタデータを持つ参照を見つけることにより、参照がどのフレームワークのバージョンであるかを判断できます。これは、アプリケーションを実行するために同じバージョンのフレームワークをインストールする必要があることを示します。とはいえ、これを100%信頼できるものとして扱うつもりはありませんが、すぐに変わるとは思いません。
他のヒント
メモ帳を使用して、30年前、サイズが200kbのプリインストールツール:
-
notepad appname.exe
でアプリケーションを開く、 - 単語「quotawork」を検索、
-
.NET Framework、version = vX.Y
が表示されるまで、最後の検索をF3
で繰り返します - 何も見つからない場合(バージョン3.0以下)
v2を検索します。
...ギガバイトのドットネットアナライザーツールとガベージスタジオをインストールするよりも100倍簡単です。
Notepad ++やtotalCommanderの優れたテキスト/ 16進ビューアなど、他のエディタ/ビューアもバイナリを開くことができます lister 。
より単純なアプローチは、 dotPeek を使用して、ツリーに表示される内容を確認することです。
ILSpy を使用して、アセンブリのターゲットフレームワークを調べることができます。アセンブリを読み込んだ後、アセンブリノードのルートをクリックすると、TargetFramework宣言の下に情報が表示されます。
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
コードから アセンブリを使用できます。 ImageRuntimeVersion
ですが、ファイルを確認する場合、おそらくリフレクターを使用して、 mscorlib
のどのバージョンが参照されているかを確認することをお勧めします。
編集:さらに良いのは、 ildasm 、アセンブリを開き、アセンブリのマニフェストを表示します。マニフェストの最初の行は、アセンブリが作成されたCLRの exact バージョンを示します。
CorFlags.exeというツールを使用できます。これは.NET 2.0以来存在しており、Windows SDK 7.0に含まれていることは確かです。デフォルト(Windows XP Pro)では、C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ CorFlags.exeにインストールされます。マネージモジュールへのファイルパス(他のコマンドラインフラグなし)を提供して、バージョンを含むヘッダー情報を表示します。
このユーティリティはモジュールのPE32ヘッダーを変更するように設計されているため、ドキュメントを慎重に。
コマンドラインから: find" Framework" MyApp.exe
または、System.Coreのどの参照があるかを調べることができます。これにより、このアプリが使用している.NET Frameworkのバージョンがわかります。 2.0の場合、System.Coreのバージョンは2.0.xxx.xxxになります。 3.5の場合、バージョンは3.5.xxx.xxxなどになります。
Linux / OSX / unixでは次を使用できます:
strings that_app.exe | grep 'v2.\|Framework'