실행 파일을 실행하는 데 필요한 .NET Framework 버전을 확인하는 방법은 무엇입니까?
실행 파일이 있는데이 파일을 시작해야하는 .NET 프레임 워크 버전을 알고 싶습니다.
어딘가에서이 정보를 쉽게 찾을 수있는 방법이 있습니까?
(지금까지 운없이 ILDASM 과 DUMPBIN 을 시도했습니다 .)
신뢰할 수있는 가장 가까운 방법 은 필요한 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백킬로바이트, 사전 설치된 도구를 :
- open application with
notepad appname.exe
, - search for word "framework",
- repeat last search with
F3
until.NET Framework,version=vX.Y
shows up - if nothing found (versions below 3.0) search for
v2.
... still 100 times easier then installing gigabytes of dot net analyzer tools and garbage studios.
Any other editor/viewer can open binaries too, like Notepad++ or totalCommander's great text/hex viewer lister.
A more simplified approach would be to use dotPeek and see what shows up in the tree.
You can now use ILSpy to examine the target framework of an assembly. After loading the assembly, click on the root of the assembly node, and you can find the information under the TargetFramework declaration:
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
From code you can use Assembly.ImageRuntimeVersion
but by looking at the file probably the best thing to do would be to use reflector and see which version of mscorlib
is being referenced.
Edit: Even better would be to use ildasm, open your assembly and then view the manifest for the assembly. The first line of the manifest will tell you the exact version of CLR that the assembly was built for.
You can use a tool called CorFlags.exe. It has been around since .NET 2.0, and I know for sure that it is included in the Windows SDK 7.0. By default (on Windows XP Pro) it is installed to C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\CorFlags.exe. Provide it with the file path to a managed module (without any other command-line flags) to display its header information, which includes the version.
Keep in mind that this utility is designed to modify the PE32 header of a module, so don't use any of the flags until you read the documentation carefully.
From the command line: find "Framework" MyApp.exe
Or you can just find out which reference of System.Core it has. That will tell you the .NET Framework version this app is using. For 2.0 the version of System.Core will be 2.0.xxx.xxx. For 3.5 the version will be 3.5.xxx.xxx, etc.
On Linux/OSX/unix you can use:
strings that_app.exe | grep 'v2.\|Framework'
'developer tip' 카테고리의 다른 글
사용자 지정 이니셜 라이저가있는 Swift 열거 형에서 rawValue 이니셜 라이저가 손실 됨 (0) | 2020.09.08 |
---|---|
Interface Builder의 "너비가 높이와 같음"제약 조건 (0) | 2020.09.07 |
임의 정밀도 산술 설명 (0) | 2020.09.07 |
JSON.parse 대 eval () (0) | 2020.09.07 |
서비스 시작을위한 Android onCreate 또는 onStartCommand (0) | 2020.09.07 |