Определить версию .NET Framework для dll - PullRequest
120 голосов
/ 11 августа 2010

У меня есть старая dll, которая была скомпилирована с платформой .NET и развернута.Я не уверен, с какой версией .NET Framework он был скомпилирован.Мне интересно, как я могу определить, с какой версией .NET Framework эта DLL была скомпилирована?Я не могу доверять исходному коду, поскольку считаю, что он был обновлен до Visual Studio 2008 и изменен на .NET Framework версии 3.5.

Ответы [ 11 ]

100 голосов
/ 03 сентября 2014

В PowerShell вы можете использовать следующее, чтобы получить целевую среду выполнения:

$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion

Я адаптировал это для PowerShell из Ответ Бена Грисволда .

Если вы хотитечтобы узнать версию целевой платформы, указанную в Visual Studio, используйте:

$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).CustomAttributes |
Where-Object {$_.AttributeType.Name -eq "TargetFrameworkAttribute" } | 
Select-Object -ExpandProperty ConstructorArguments | 
Select-Object -ExpandProperty value

Вы должны получить что-то вроде

.NETFramework, Version = v4.5.2

65 голосов
/ 03 декабря 2011

dotPeek - отличный (бесплатный) инструмент для отображения этой информации.

Если у вас возникли некоторые проблемы с использованием Reflector, то это хорошая альтернатива.

enter image description here

49 голосов
/ 11 августа 2010

Загрузите его в Отражатель и посмотрите, на что он ссылается?

например:

enter image description here

45 голосов
/ 11 августа 2010

Вы можете использовать ILDASM ...

ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil

и проверьте «раздел метаданных» в выходных данных. Было бы что-то вроде этого:

Раздел метаданных: 0x424a5342, версия: 1.1, дополнительная: 0, версия len: 12, версия: v4.0.30319

Тег 'version' сообщит вам версию .NET Framework. В приведенном выше примере это 4.0.30319

15 голосов
/ 11 августа 2010

У вас есть несколько вариантов: чтобы получить его программно, из управляемого кода, используйте Assembly.ImageRuntimeVersion:

Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll")
Dim s As String = a.ImageRuntimeVersion

В командной строке, начиная с версии 2.0, ildasm.exe покажет его, если дважды щелкнуть «МАНИФЕСТ» и найти «Версия метаданных». Определение версии CLR изображения

14 голосов
/ 04 августа 2014

Использовать ILSpy http://ilspy.net/

с открытым исходным кодом, бесплатно, безусловно, вариант, так как теперь рефлектор оплачивается.

14 голосов
/ 06 июня 2013

Просто просто

var tar = (TargetFrameworkAttribute)Assembly
          .LoadFrom("yoursAssembly.dll")
          .GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();
11 голосов
/ 06 февраля 2013

Еще один вариант с помощью Visual Studio: добавить ссылку на DLL в любой проект, затем щелкнуть правой кнопкой мыши новую ссылку и щелкнуть Свойства, чтобы увидеть, что вы ищете в Runtime-версии:

enter image description here

8 голосов
/ 11 августа 2010

Декомпилируйте его с помощью ILDASM и посмотрите на версию mscorlib, на которую ссылается (должна быть почти в самом верху).

0 голосов
/ 25 июня 2019

Расширяя здесь ответы, это может взорваться, если есть зависимая сборка.Если вам повезло и вы знаете, где находится иждивенец (или даже счастливчик, он в GAC), тогда это может помочь .../ сообщения / 2006 / Декабрь / 22 / Reflection-на-задача-сборка

...