Я думаю самое близкое, которое можно надежно получить, должен определить, какая версия 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%, но я не думаю, что это изменится в ближайшее время.
Из кода вы можете использовать Assembly.ImageRuntimeVersion
, но глядя на файл, вероятно, лучше всего было бы использовать отражатель и посмотреть, на какую версию mscorlib
ссылаются.
Изменить: Еще лучше было бы использовать ildasm , откройте свою сборку, а затем просмотрите манифест сборки. В первой строке манифеста будет указана точная версия CLR, для которой была создана сборка.