Saya memiliki file yang dapat dieksekusi, dan saya ingin tahu versi kerangka .NET mana yang perlu dijalankan file ini.
Adakah cara mudah untuk menemukan informasi ini di suatu tempat?
(Sejauh ini saya mencoba ILDASM dan DUMPBIN tanpa keberuntungan.)
.net
version
executable
Sam
sumber
sumber
Jawaban:
Saya pikir yang paling dekat yang bisa Anda dapatkan dengan andal adalah menentukan versi CLR apa yang diperlukan. Anda dapat melakukan ini dengan menggunakan ILDASM dan melihat node "MANIFEST" atau Reflector dan melihat tampilan pembongkaran dari node "Application.exe" sebagai IL. Dalam kedua kasus tersebut ada komentar yang menunjukkan versi CLR. Dalam ILDASM, komentarnya adalah "// Metadata version" dan di Reflector komentarnya adalah "Target Runtime Version".
Berikut adalah contoh untuk aplikasi .NET WinForms bernama WindowsFormsApplication1.exe:
ILDASM:
Reflektor:
Anda juga dapat melihat daftar rakitan yang direferensikan dan mencari referensi dengan nomor versi tertinggi.
Sekali lagi, menggunakan ILDASM dengan melihat data node "MANIFEST":
Dan menggunakan Reflector, melihat dissambly (masih sebagai IL) untuk setiap referensi yang tercantum:
Dengan mencari referensi dengan metadata versi tertinggi, Anda dapat menentukan versi Framework mana referensi tersebut berasal, yang akan menunjukkan bahwa Anda memerlukan versi Framework yang sama yang diinstal agar aplikasi dapat berjalan. Karena itu, saya tidak akan menganggap ini 100% dapat diandalkan, tetapi saya tidak berpikir itu akan berubah dalam waktu dekat.
sumber
Menggunakan Notepad , berusia tiga dekade, berukuran 200kb, alat prainstal:
notepad appname.exe
,F3
sampai.NET Framework,version=vX.Y
munculv2.
... masih 100 kali lebih mudah daripada menginstal gigabyte alat penganalisis dot net dan studio sampah.Editor / penampil lain juga dapat membuka biner, seperti Notepad ++ atau lister penampil teks / hex yang hebat dari totalCommander .
sumber
Pendekatan yang lebih sederhana adalah dengan menggunakan dotPeek dan melihat apa yang muncul di pohon.
Lihat panel properti:
sumber
Anda sekarang dapat menggunakan ILSpy untuk memeriksa kerangka kerja target dari suatu rakitan. Setelah memuat assembly, klik pada root node assembly, dan Anda dapat menemukan informasi di bawah deklarasi TargetFramework:
sumber
Dari kode Anda dapat menggunakan
Assembly.ImageRuntimeVersion
tetapi dengan melihat file mungkin hal terbaik untuk dilakukan adalah menggunakan reflektor dan melihat versi mana yangmscorlib
sedang direferensikan.Sunting: Bahkan lebih baik akan menggunakan ildasm , buka perakitan Anda dan kemudian melihat manifes untuk perakitan. Baris pertama manifes akan memberi tahu Anda versi persis CLR yang digunakan untuk perakitan tersebut.
sumber
Anda dapat menggunakan alat yang disebut CorFlags.exe. Sudah ada sejak .NET 2.0, dan saya tahu pasti bahwa itu disertakan dalam Windows SDK 7.0. Secara default (pada Windows XP Pro) ini diinstal ke C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ CorFlags.exe. Berikan jalur file ke modul terkelola (tanpa tanda baris perintah lainnya) untuk menampilkan informasi headernya, yang menyertakan versinya.
Ingatlah bahwa utilitas ini dirancang untuk mengubah header PE32 dari sebuah modul, jadi jangan gunakan tanda apa pun hingga Anda membaca dokumentasi dengan cermat.
sumber
Dari baris perintah:
find "Framework" MyApp.exe
sumber
Atau Anda bisa mencari tahu referensi System.Core mana yang dimilikinya. Itu akan memberi tahu Anda versi .NET Framework yang digunakan aplikasi ini. Untuk 2.0 versi System.Core adalah 2.0.xxx.xxx. Untuk 3.5 versinya adalah 3.5.xxx.xxx, dll.
sumber
Anda bisa mendapatkan file versi .NET di Windows menggunakan Powershell. Script berikut;
memberikan hasil sebagai berikut;
Perhatikan bahwa hasil mengekstrak versi .NET untuk file exe di folder itu, tetapi itu juga akan melakukan hal yang sama untuk dll.
sumber
Di Linux / OSX / unix Anda dapat menggunakan:
sumber