[.net] 실행 파일을 실행하는 데 필요한 .NET Framework 버전을 확인하는 방법은 무엇입니까?

실행 파일이 있는데이 파일을 시작해야하는 .NET 프레임 워크 버전을 알고 싶습니다.

어딘가에서이 정보를 쉽게 찾을 수있는 방법이 있습니까?

(지금까지 운없이 ILDASMDUMPBIN 을 시도했습니다 .)



답변

신뢰할 수있는 가장 가까운 방법 은 필요한 CLR 버전을 결정하는 것 입니다. ILDASM을 사용하고 “MANIFEST”노드 또는 Reflector를 확인하고 “Application.exe”노드의 dissasembly 뷰를 IL로 확인하면됩니다. 두 경우 모두 CLR 버전을 나타내는 주석이 있습니다. ILDASM에서 주석은 “// 메타 데이터 버전”이고 Reflector에서 주석은 “대상 런타임 버전”입니다.

다음은 WindowsFormsApplication1.exe라는 .NET WinForms 응용 프로그램의 예입니다.

ILDASM :

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly extern System
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}

반사기:

.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727

참조 된 어셈블리 목록을보고 버전 번호가 가장 높은 참조를 찾을 수도 있습니다.

다시 말하지만 ILDASM을 사용하여 “MANIFEST”노드 데이터를 확인합니다.

.assembly extern System.Drawing
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
  .ver 2:0:0:0
}
.assembly extern System.Core
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 3:5:0:0
}

그리고 Reflector를 사용하여 나열된 각 참조에 대한 dissambly (여전히 IL)를 살펴 봅니다.

.assembly extern System.Core
{
    .ver 3:5:0:0
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}

가장 높은 버전의 메타 데이터가 포함 된 참조를 찾으면 참조가 제공된 Framework 버전을 확인할 수 있습니다. 이는 응용 프로그램을 실행하기 위해 동일한 버전의 Framework가 설치되어 있어야 함을 나타냅니다. 즉, 나는 이것을 100 % 신뢰할 수있는 것으로 취급하지는 않겠지 만 조만간 바뀔 것이라고 생각하지 않습니다.


답변

사용 메모장 삼 년 된, 크기 2백킬로바이트, 사전 설치된 도구를 :

  • 로 애플리케이션 열기 notepad appname.exe,
  • “framework”라는 단어를 검색하고
  • 와 반복 마지막 검색 F3까지 .NET Framework,version=vX.Y나타난다
  • 아무것도 발견되지 않으면 (3.0 이하 버전) 검색 v2.… 여전히 기가 바이트의 닷넷 분석기 도구와 쓰레기 스튜디오를 설치하는 것보다 100 배 더 쉽습니다.

다른 편집기 / 뷰어도 Notepad ++ 또는 totalCommander의 훌륭한 텍스트 / 16 진수 뷰어 목록 과 같은 바이너리를 열 수 있습니다 .


답변

보다 간단한 방법은 dotPeek 를 사용 하여 트리에 표시되는 내용을 확인하는 것입니다.

속성 패널을 참조하십시오.
여기에 이미지 설명 입력


답변

이제 ILSpy 를 사용 하여 어셈블리의 대상 프레임 워크를 검사 할 수 있습니다 . 어셈블리를로드 한 후 어셈블리 노드의 루트를 클릭하면 TargetFramework 선언 아래에서 정보를 찾을 수 있습니다.

[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]


답변

코드에서 사용할 수 Assembly.ImageRuntimeVersion있지만 파일을 보면 아마도 리플렉터를 사용하고 어떤 버전 mscorlib이 참조되고 있는지 확인하는 것이 가장 좋습니다 .

편집 : ildasm 을 사용 하고 어셈블리를 연 다음 어셈블리에 대한 매니페스트를 보는 것이 더 좋습니다 . 매니페스트의 첫 번째 줄은 어셈블리가 빌드 된 정확한 CLR 버전을 알려줍니다 .


답변

CorFlags.exe라는 도구를 사용할 수 있습니다. .NET 2.0부터 사용되어 왔으며 Windows SDK 7.0에 포함되어 있음을 확신합니다. 기본적으로 (Windows XP Pro에서는) C : \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ CorFlags.exe에 설치됩니다. 버전을 포함하는 헤더 정보를 표시하려면 관리되는 모듈에 대한 파일 경로 (다른 명령 줄 플래그 없음)를 제공합니다.

이 유틸리티는 모듈의 PE32 헤더를 수정하도록 설계되었으므로 설명서를 주의 깊게 읽을 때까지 플래그를 사용하지 마십시오 .


답변

명령 줄에서 : find "Framework" MyApp.exe