2010-12-15 7 views
9

가능한 중복 :
Determine framework (CLR) version of assemblyDLL 파일이 컴파일 된 .NET Framework 버전을 확인하려면 어떻게합니까?

내가 .NET Framework의 컴파일 된 라이브러리/DLL 파일이 있습니다.

이제 코딩을하지 않고이 라이브러리를 컴파일하는 데 사용 된 .NET Framework 버전 을 확인하고 싶습니다. 2.0, 3.5 또는 4.0인지 알아야합니다. 이것을 달성하는 데 도움이되는 도구가 있습니까? (프레임 워크 버전 4.0에서 컴파일해야한다는 것을 알고 있지만 Framework 4.0 버전을 사용했는지 100 % 확신해야합니다).

+0

링크 된 대답은 실제와 일치하지 않습니다. CLR 버전! = 프레임 워크 버전. @ 트루 : 귀하의 질문에 닫힙니다, repost 및 dup 귀하의 질문에 대답하지 지적 할 가능성이 높습니다. –

+0

@ 한스 : 왜 재교육하겠습니까? 질문이나 의견을 편집하여이를 지적하십시오. 실수로 닫히면 다시 열립니다. – Cascabel

답변

13

ILDASM을 사용해야합니다. 당신은 매니페스트를 두 번 클릭하면 얻을

// 메타 데이터 버전 : 2.0.50727

또는

// 메타 데이터 버전 : v4.0.30319

프레임 워크 3.0 및 3.5 정말 새 릴리스되지 않습니다 CLR을 사용하면 V2.0을 계속 사용할 수 있습니다. 대부분의 경우, 의존성을 없애기 위해 필요한 프레임 워크를 추측 할 수 있습니다. 일부 dll은 3.5에서만 사용할 수 있지만 2.0 전용 PC에서 수동으로 복사하면 응용 프로그램이 작동합니다. C : \ windows \ Microsoft.NEt \ Framework를 확인하면 해당 폴더에서 찾을 수 있습니다. 프로젝트에서 참조로하는 경우

희망이

4

ILDASM 또는 Reflector을 사용하여 어셈블리 매니페스트를 검사하고 참조되는 System. * 어셈블리의 버전을 확인하십시오. 예를 들어

, 나는 이것이 내가 Reflection 사용하는 것이

// Metadata version: v1.1.4322 
.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern System.Web 
{ 
    .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A)       // .?_....: 
    .ver 1:0:5000:0 
} 
.assembly extern System 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern ICSharpCode.SharpZipLib 
{ 
    .publickeytoken = (1B 03 E6 AC F1 16 4F 73)       // ......Os 
    .ver 0:84:0:0 
} 
.assembly ReverseProxy 
{ 

    // --- The following custom attribute is added automatically, do not uncomment ------- 
    // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, 
    //                    bool) = (01 00 00 01 00 00) 

    .hash algorithm 0x00008004 
    .ver 0:0:0:0 
} 
.module ReverseProxy.dll 
// MVID: {3F1B8B81-1B8F-4DD7-A71F-FD019C095F25} 
.imagebase 0x00400000 
.file alignment 0x00000200 
.stackreserve 0x00100000 
.subsystem 0x0003  // WINDOWS_CUI 
.corflags 0x00000001 // ILONLY 
// Image base: 0x010A0000 
+1

TargetFrameworkAttribute - 시스템 라이브러리의 특정 버전이 아니어야합니다. – Lu55

+0

@ Lu55, TargetFrameworkAttribute가 프레임 워크 4.0에만 도입되었습니다. –

1

을 프레임 워크 1.1을 대상으로 만들어진 것을 볼 수 있습니다 .NET 어셈블리의 매니페스트 볼 수 ILDASM을 사용하여 :

Assembly a = Assembly.ReflectionOnlyLoadFrom("C:\\library.dll"); 
Console.WriteLine(a.ImageRuntimeVersion); 

을하지만,을, I 프로그래머 야. 나는 이런 종류의 것들을 "코딩하지 않고"어떻게 결정할 지 모른다.

+1

끔찍한 대답 임에도 불구하고 마지막 줄에 대해서만이 대답을 upvote하도록 유혹되었습니다. :) – Arafangion

9

을하는 데 도움이됩니다. 해당 참조에 대한 속성에서 런타임 버전을 볼 수 있어야합니다. 필요하지 코딩 = -)

alt text

관련 문제