実行可能ファイルを実行する必要がある.NET Frameworkのバージョンを確認する方法

StackOverflow https://stackoverflow.com/questions/325918

  •  11-07-2019
  •  | 
  •  

質問

実行可能ファイルがあります。このファイルを起動する必要がある.NETフレームワークのバージョンを知りたいです。

この情報をどこかに簡単に見つける方法はありますか?

(これまでに ILDASM DUMPBIN は運がありません。)

役に立ちましたか?

解決

確実に取得できる最も近い方法は、必要な 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'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top