107

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

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

(これまでのところ、 ILDASMDUMPBINを試してみましたが、うまくいきませんでした。)

4

10 に答える 10

73

Notepad、30年前、サイズ200kb、プリインストールされたツールを使用:

  • notepad appname.exeでアプリケーションを 開く
  • 「フレームワーク」という単語を検索し、
  • 表示さF3れるまで最後の検索を繰り返す.NET Framework,version=vX.Y
  • 何も見つからない場合 (バージョン 3.0 未満) ... を検索してv2.も、数ギガバイトのドット ネット アナライザー ツールとガベージ スタジオをインストールするよりも 100 倍簡単です。

Notepad++ や totalCommander の優れた text/hex viewer listerなど、他のエディター/ビューアーでもバイナリを開くことができます。

于 2016-10-24T05:41:40.827 に答える
55

確実に取得できる最も近い方法は、必要なCLRのバージョンを判断することだと思います。これを行うには、ILDASM を使用し、「MANIFEST」ノードまたは Reflector を確認し、「Application.exe」ノードの逆アセンブリ ビューを IL として確認します。どちらの場合も、CLR のバージョンを示すコメントがあります。ILDASM では、コメントは「// メタデータ バージョン」であり、Reflector では、コメントは「ターゲット ランタイム バージョン」です。

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 を使用して「MANIFEST」ノード データを確認します。

.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%信頼できるとは考えていませんが、すぐに変わるとは思いません.

于 2008-11-28T15:00:46.943 に答える
34

より単純なアプローチは、dotPeekを使用してツリーに表示されるものを確認することです。

プロパティ パネルを参照してください。 ここに画像の説明を入力

于 2011-10-25T13:05:21.203 に答える
26

ILSpyを使用して、アセンブリのターゲット フレームワークを調べることができるようになりました。アセンブリをロードした後、アセンブリ ノードのルートをクリックすると、TargetFramework 宣言の下に情報が表示されます。

[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
于 2013-06-11T12:54:33.727 に答える
15

コードから使用できますAssembly.ImageRuntimeVersionが、ファイルを見て、おそらく最善の方法は、リフレクターを使用して、どのバージョンがmscorlib参照されているかを確認することです。

編集: ildasm を使用し、アセンブリを開き、アセンブリのマニフェストを表示することをお勧めします。マニフェストの最初の行は、アセンブリがビルドされた CLRの正確なバージョンを示します。

于 2009-11-24T19:03:54.733 に答える
12

CorFlags.exe というツールを使用できます。これは .NET 2.0 から存在しており、Windows SDK 7.0 に含まれていることは確かです。デフォルト (Windows XP Pro) では、C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\CorFlags.exe にインストールされます。マネージ モジュールへのファイル パスを (他のコマンド ライン フラグなしで) 指定して、バージョンを含むヘッダー情報を表示します。

このユーティリティはモジュールの PE32 ヘッダーを変更するように設計されているため、ドキュメントを注意深く読むまでフラグを使用しないでください。

于 2012-04-06T21:13:44.307 に答える
2

または、 System.Core のどの参照があるかを調べることができます。これにより、このアプリが使用している .NET Framework のバージョンがわかります。2.0 の場合、System.Core のバージョンは 2.0.xxx.xxx になります。3.5 の場合、バージョンは 3.5.xxx.xxx などになります。

于 2013-01-18T18:39:57.243 に答える