Определить версию .NET Framework для dll

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

Ответ 1

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

например:

enter image description here

Ответ 2

В 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

Ответ 3

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

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

enter image description here

Ответ 4

Вы можете использовать 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

Ответ 5

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

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

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

Ответ 6

Просто

var tar = (TargetFrameworkAttribute)Assembly
          .LoadFrom("yoursAssembly.dll")
          .GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();

Ответ 7

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

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

Ответ 8

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

введите описание изображения здесь

Ответ 9

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

Ответ 10

Если у вас есть DotPeek от JetBrains, вы можете увидеть его в Assembly Explorer.

Can you see this screenshot? im not:(

Ответ 11

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

using System.Reflection;
using System.Runtime.Versioning;
// ...
{
    AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
    var asm = System.Reflection.Assembly.LoadFrom(@"C:\Codez\My.dll");
    var targetFrameAttribute = asm.GetCustomAttributes(true).OfType<TargetFrameworkAttribute>().FirstOrDefault();
    targetFrameAttribute.Dump();
}

Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
    var name = args.Name;

    if (name.StartsWith("Depends"))
        return System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"C:\Codez\Depends.dll");

    return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}

Ссылка: https://weblog.west-wind.com/posts/2006/Dec/22/Reflection-on-Problem-Assemblies

Ответ 12

Я быстро написал это консольное приложение С#, чтобы сделать это:

https://github.com/stuartjsmith/binarydetailer

Просто передайте каталог в качестве параметра, и он сделает все возможное, чтобы рассказать вам о сетевом фреймворке для каждой dll и exe файла.