Как узнать, какая версия the.NET фреймворк исполняемый файл должен работать?
У меня есть исполняемый файл, и я хотел бы знать, какие версии .NET framework этот файл должен быть запущен.
есть ли простой способ найти эту информацию где-нибудь?
(до сих пор я пробовал ILDASM и команду dumpbin без каких-либо удачи.)
9 ответов:
Я думаю, что ближе всего вы можете надежно получить, чтобы определить, какая версия CLR это. Вы можете сделать это, используя ILDASM и глядя на узел "манифест" или отражатель и глядя на представление dissasembly приложения.exe " узел как IL. В обоих случаях имеется комментарий, указывающий версию среды CLR. В ILDASM комментарий - "/ / версия метаданных", а в Reflector - "целевая версия среды выполнения".
вот примеры для .NET WinForms приложение с именем WindowsFormsApplication1.exe:
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 }и с помощью рефлектора, глядя на dissambly (все еще как IL) для каждой ссылки в списке:
.assembly extern System.Core { .ver 3:5:0:0 .publickeytoken = (B7 7A 5C 56 19 34 E0 89) }найти ссылку с метаданные самой высокой версии вы можете определить, из какой версии фреймворка была получена эта ссылка, что указывает на то, что для запуска приложения вам нужна одна и та же версия фреймворка. Тем не менее, я бы не рассматривал это как 100% надежный, но я не думаю, что это изменится в ближайшее время.
используя Блокнот, три десятилетия, 200 кб в размере, предустановленный инструмент:
- открыть приложение с
notepad appname.exe,- поиск по слову "база",
- повторить последний поиск с
F3до.NET Framework,version=vX.Yпоявляется- если ничего не найдено (версии ниже 3.0) поиск
v2.... еще в 100 раз проще, чем установка гигабайт инструментов dot net analyzer и мусорных студий.любой другой редактор / просмотрщик также может открывать двоичные файлы, такие как Notepad++ или totalcommander's great text/hex viewer Листер.
более упрощенный подход будет использовать dotPeek и посмотреть, что появляется в дереве.
теперь вы можете использовать ILSpy для изучения целевой структуры сборки. После загрузки сборки нажмите на корень узла сборки, и вы можете найти информацию в объявлении TargetFramework:
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
из кода, Вы можете использовать
Assembly.ImageRuntimeVersionно, глядя на файл, вероятно, лучше всего было бы использовать отражатель и посмотреть, какая версияmscorlibссылается.Edit: еще лучше было бы использовать ildasm, откройте сборку, а затем просмотрите манифест для сборки. Первая строка манифеста скажет вам точно версия среды CLR, для которой была создана сборка.
вы можете использовать инструмент под названием CorFlags.исполняемый. Он существует с .NET 2.0, и я точно знаю, что он включен в Windows SDK 7.0. По умолчанию (в Windows XP профессиональная) он устанавливается в C:\Program файлы\Microsoft пакет SDK папке\Windows\В7.0А\бин\CorFlags.исполняемый. Предоставьте ему путь к файлу управляемого модуля (без каких-либо других флагов командной строки) для отображения информации заголовка, которая включает версию.
имейте в виду, что эта программа предназначена для изменения PE32 заголовок модуля, поэтому не используйте ни один из флагов, пока не прочтете документация тщательно.
или вы можете просто узнать, какая ссылка системы.Ядро у него есть. Это скажет вам версию .NET Framework, которую использует это приложение. Для 2.0 версии системы.Ядро будет 2.0.ХХХ.ХХХ. Для 3.5 версия будет 3.5.ХХХ.ХХХ и т. д.

Comments