1. ホーム
  2. .net

[解決済み] 実行ファイルがどのバージョンの.NET Frameworkで実行する必要があるかを調べるには?

2022-11-03 06:26:23

質問

実行可能なファイルを持っていますが、このファイルを起動するために必要な Microsoft .NET Framework のバージョンを知りたいです。

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

(今までのところ、私は ILDASM ダンプビン を実行しましたが、うまくいきませんでした)。

どのように解決するのですか?

のバージョンを判断することが、最も信頼できる方法だと思います。 CLR が必要なのかを判断することです。これは ILDASM を使って "MANIFEST" ノードを見るか、Reflector を使って "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

また、参照されているアセンブリのリストを見て、最も高いバージョン番号を持つ参照を探すこともできます。

再び、"MANIFEST"ノードデータを見ながら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を使って、リストアップされた各参考文献のdissambly(やはりILとして)を見てみます。

.assembly extern System.Core
{
    .ver 3:5:0:0
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}

最も高いバージョンのメタデータを持つ参照を見つけることによって、その参照がどのバージョンの Framework から来たかを決定することができ、それは、アプリケーションを実行するために、同じバージョンの Framework をインストールする必要があることを示します。とはいえ、私はこれを 100% 信頼できるものとして扱いませんが、すぐに変わるとは思えません。