У меня есть старая dll, которая была скомпилирована против платформы .NET и развернута. Я не уверен, какая версия .NET Framework была скомпилирована. Мне интересно, как я могу определить, какая версия .NET Framework была скомпилирована dll? Я не могу доверять исходному коду, потому что считаю, что он был обновлен до Visual Studio 2008 и изменен на .NET framework версии 3.5.
Определить версию .NET Framework для dll
Ответ 1
Загрузите его в Reflector и посмотрите, что он ссылается?
например:
Ответ 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, это хорошая альтернатива.
Ответ 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
.
Ответ 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 файла.