回答:
あなたが確実に得ることができる最も近いのは、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
参照されているアセンブリのリストを見て、最も高いバージョン番号の参照を探すこともできます。
繰り返しますが、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
}
そして、リフレクターを使用して、リストされている各リファレンスの詳細を(まだILとして)調べます。
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
最も高いバージョンのメタデータを持つ参照を見つけることで、その参照のフレームワークのバージョンを判別できます。これは、アプリケーションを実行するために同じバージョンのFrameworkをインストールする必要があることを示します。とはいえ、これを100%信頼できるものとして扱うつもりはありませんが、すぐに変わるとは思いません。
30年前のサイズ200kbのメモ帳を使用して、あらかじめインストールされているツール:
notepad appname.exe
、 F3
れるまで最後の検索を繰り返し.NET Framework,version=vX.Y
ますv2.
...ギガバイトのドットネットアナライザーツールとガベージスタジオをインストールするよりも100倍簡単です。他のエディタ/ビューアは、メモ帳++またはtotalCommanderの偉大なテキスト/六角ビューワのように、あまりにもバイナリを開くことができますリスタ。
より簡単な方法は、dotPeekを使用して、ツリーに何が表示されるかを確認することです。
ILSpyを使用して、アセンブリのターゲットフレームワークを調べることができます。アセンブリを読み込んだ後、アセンブリノードのルートをクリックすると、TargetFramework宣言の下に情報が表示されます。
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
コードから使用できますAssembly.ImageRuntimeVersion
が、ファイルを確認する場合、おそらくリフレクターを使用して、参照されているのバージョンを確認することをお勧めしますmscorlib
。
編集:ildasm を使用してアセンブリを開き、アセンブリのマニフェストを表示することをお勧めします。マニフェストの最初の行は、アセンブリがビルドされたCLR の正確なバージョンを示します。
CorFlags.exeというツールを使用できます。これは.NET 2.0から存在し、Windows SDK 7.0に含まれていることは確かです。デフォルトでは(Windows XP Pro)、C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ CorFlags.exeにインストールされます。マネージモジュールへのファイルパス(他のコマンドラインフラグなし)を指定して、バージョンを含むヘッダー情報を表示します。
このユーティリティはモジュールのPE32ヘッダーを変更するように設計されているため、ドキュメントを注意深く読むまで、フラグを使用しないでください。
または、それがSystem.Coreのどの参照を持っているかを見つけることができます。これにより、このアプリが使用している.NET Frameworkのバージョンがわかります。2.0の場合、System.Coreのバージョンは2.0.xxx.xxxになります。3.5の場合、バージョンは3.5.xxx.xxxなどになります。
Windowsでは、Powershellを使用して.NETバージョンのファイルを取得できます。次のスクリプト。
$path=’.\’
$ErrorActionPreference = "SilentlyContinue"
$files=Get-ChildItem -Path $path -Recurse -include *.dll,*.exe
foreach($file in $files)
{
$filename = $file.BaseName
$version = $([System.Reflection.Assembly]::ReflectionOnlyLoadFrom($file.FullName).GetCustomAttributesData() |
select-object -ExpandProperty ConstructorArguments |
select-object -ExpandProperty Value |
select-string -Pattern '.NET')
Write-Output "$filename,$version"
}
結果は、そのフォルダー内のexeファイルの.NETバージョンを抽出しましたが、dllについても同じことを行います。