Как узнать, какую версию Платформы.NET исполняемый файл должен выполнить?

90
задан Peter Mortensen 8 January 2011 в 23:04
поделиться

2 ответа

Я думаю самое близкое, которое можно надежно получить, должен определить, какая версия CLR требуется. Можно сделать это при помощи ILDASM и рассмотрения "ЯВНОГО" узла или Отражателя и рассмотрения dissasembly представления узла "Application.exe" как IL. В обоих случаях существует комментарий, который указывает на версию CLR. В ILDASM комментарий "//версия Метаданных", и в Отражателе комментарий является "Версией Целевой среды выполнения".

Вот являются примеры для.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%, но я не думаю, что это изменится в ближайшее время.

55
ответ дан Scott Dorman 24 November 2019 в 07:02
поделиться

Из кода вы можете использовать Assembly.ImageRuntimeVersion , но глядя на файл, вероятно, лучше всего было бы использовать отражатель и посмотреть, на какую версию mscorlib ссылаются.

Изменить: Еще лучше было бы использовать ildasm , откройте свою сборку, а затем просмотрите манифест сборки. В первой строке манифеста будет указана точная версия CLR, для которой была создана сборка.

15
ответ дан 24 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: