Вопрос

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

Это было полезно?

Решение

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

Например:

enter image description here

Другие советы

В 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, версия = v4.5.2

DotPeek. это отличный (бесплатный) инструмент, чтобы показать эту информацию.

Если у вас есть несколько вопросов, получающих отражатель, то это хорошая альтернатива.

enter image description here

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

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

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

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

Тег «Версия» расскажет вам .NET Framework Version. В приведенном выше примере это 4.0.30319

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

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

Из командной строки, начиная с V2.0, ilyasm.exe покажет его, если дважды щелкнули «Манифест» и ищите «версию метаданных». Определение версии CLR изображения

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

Открытый источник, бесплатный, определенно вариант, так как сейчас Reflector выплачивается.

Просто

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

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

enter image description here

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

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

Can you see this screenshot? im not:(

Расширение ответов здесь, это может взорвать, если есть зависимая сборка. Если вам повезет, и вы знаете, где зависимый (или даже убитый, это в 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-sashimlies.

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

https://github.com/stuartjsmith/binarydetailer.

Просто передайте каталог в качестве параметра, и он сделает все возможное, чтобы сообщить вам Net Framework для каждой DLL и EXE

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top