답변:
그것을 반사판에 넣고 그것이 참조하는 것을 봅니까?
예를 들면 다음과 같습니다.
PowerShell에서 다음을 사용하여 대상 런타임을 얻을 수 있습니다.
$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion
Ben Griswold의 답변 에서 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 는이 정보를 보여주는 훌륭한 도구입니다.
Reflector를 잡는 데 약간의 문제가 있다면 이것이 좋은 대안입니다.
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입니다.
// Metadata section: 0x424a5342, version: 1.1, extra: 0, version len: 12, versio n: v4.0.30319
몇 가지 옵션이 있습니다. 관리되는 코드에서 프로그래밍 방식으로 가져 오려면 Assembly.ImageRuntimeVersion을 사용하십시오.
Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll")
Dim s As String = a.ImageRuntimeVersion
v2.0부터 명령 줄에서 ildasm.exe는 "MANIFEST"를 두 번 클릭하고 "Metadata version"을 찾으면이를 표시합니다. 이미지의 CLR 버전 확인
ILSpy 사용 http://ilspy.net/
오픈 소스, 무료, 확실히 반사판이 지불 된 이후 옵션입니다.
단순히
var tar = (TargetFrameworkAttribute)Assembly
.LoadFrom("yoursAssembly.dll")
.GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();
GetCustomAttributes
없습니다 TargetFrameworkAttribute
. 그러나 ImageRuntimeVersion은 제대로 작동하지만 바이너리가 작성된 올바른 CLR을 검색합니다. 빌드 된 대상 프레임 워크 버전이 필요합니다.
Visual Studio를 통한 또 다른 옵션은 프로젝트에 DLL 참조를 추가 한 다음 새 참조를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭하면 런타임 버전에서 찾고있는 것을 볼 수 있습니다.
이 작업을 수행하기 위해이 C # 콘솔 앱을 신속하게 작성했습니다.
https://github.com/stuartjsmith/binarydetailer
디렉토리를 매개 변수로 전달하면 각 dll 및 exe의 net 프레임 워크를 알려주는 것이 가장 좋습니다.
여기에 대한 답변을 확장하면 종속 어셈블리가있는 경우 폭발 할 수 있습니다. 운이 좋으며 부양 가족이 어디에 있는지 (또는 운이 좋으면 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