Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 666. 최신 버전의 ilasm.exe/ildasm.exe 사용하는 방법 [링크 복사], [링크+제목 복사],
조회: 12973
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)
(시리즈 글이 2개 있습니다.)
개발 환경 구성: 666. 최신 버전의 ilasm.exe/ildasm.exe 사용하는 방법
; https://www.sysnet.pe.kr/2/0/13263

개발 환경 구성: 690. 닷넷 코어/5+ 버전의 ilasm/ildasm 실행 파일 구하는 방법 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/13474




최신 버전의 ilasm.exe/ildasm.exe 사용하는 방법

지난 글에서,

ilasm.exe 컴파일 오류 - error : syntax error at token '-' in ... -inf
; https://www.sysnet.pe.kr/2/0/13260

.NET Framework의 ildasm.exe가 "-inf" 토큰을 임의로 사용하는 문제가 있었는데요, 혹시 IL(Intermediate Language) 문법이 발전했던 것이 아닐까요? ^^

그래서, .NET Core/5+와 함께 빌드된 ilasm을 구해봤습니다. 이게 방법이 좀 묘한데요, 우선 대표(?) 패키지는 Microsoft.NETCore.ILAsm입니다.

Microsoft.NETCore.ILAsm 
; https://www.nuget.org/packages/Microsoft.NETCore.ILAsm

하지만 이 패키지가 설치된 디렉터리를 확인해 보면,

// Install-Package Microsoft.NETCore.ILAsm

C:\> dir /b "%USERPROFILE%\.nuget\packages\microsoft.netcore.ilasm\7.0.0"
.nupkg.metadata
.signature.p7s
Icon.png
LICENSE.TXT
microsoft.netcore.ilasm.7.0.0.nupkg
microsoft.netcore.ilasm.7.0.0.nupkg.sha512
microsoft.netcore.ilasm.nuspec
runtime.json
THIRD-PARTY-NOTICES.TXT

보는 바와 같이 바이너리가 없습니다. 검색해 보면,

Where is ilasm.exe in Microsoft.NETCore.ILAsm?
; https://stackoverflow.com/questions/45818560/where-is-ilasm-exe-in-microsoft-netcore-ilasm

"runtime.json" 파일에 각각의 플랫폼에 해당하는 패키지가 있다고 나옵니다.

{
  "runtimes": {
    // ...[생략]...
    "win-x64": {
      "#import": [],
      "Microsoft.NETCore.ILAsm": {
        "runtime.win-x64.Microsoft.NETCore.ILAsm": "[7.0.0, )"
      }
    },
    "win-x86": {
      "#import": [],
      "Microsoft.NETCore.ILAsm": {
        "runtime.win-x86.Microsoft.NETCore.ILAsm": "[7.0.0, )"
      }
    }
  }
}

그러니까, 윈도우에서 실행할 ilasm.exe를 구하고 싶다면 runtime.win-x64.Microsoft.NETCore.ILAsm 패키지를 설치하면 되는 것입니다.

runtime.win-x64.Microsoft.NETCore.ILAsm
; https://www.nuget.org/packages/runtime.win-x64.Microsoft.NETCore.ILAsm




근데, dotnet tool과 같은 형식이 아니라서 어쨌든 더미 프로젝트라도 하나 생성해 패키지 참조 추가를 해야 합니다.

Install-Package Microsoft.NETCore.ILAsm
Install-Package runtime.win-x64.Microsoft.NETCore.ILDAsm

그럼 아래의 디렉터리에 생성되는데,

[ilasm.exe]
%USERPROFILE%\.nuget\packages\runtime.win-x64.microsoft.netcore.ilasm\7.0.0\runtimes\win-x64\native

[ildasm.exe]
%USERPROFILE%\.nuget\packages\runtime.win-x64.microsoft.netcore.ildasm\7.0.0\runtimes\win-x64\native

어차피 빈 프로젝트 생성했으니 그걸 빌드하면 디렉터리의 .\runtimes\win-x64\native 하위에서 ilasm.exe를 찾을 수 있습니다.

그리고, 위와 마찬가지의 방법으로 ildasm.exe도 구할 수 있습니다.

runtime.win-x64.Microsoft.NETCore.ILDAsm 
; https://www.nuget.org/packages/runtime.win-x64.Microsoft.NETCore.ILDAsm




혹은, 어차피 dotnet이 있으니까, 그냥 아래의 4개 명령어를 실행하는 것도 나쁘진 않겠습니다. ^^

c:\temp\testapp> dotnet new console

c:\temp\testapp> dotnet add package runtime.win-x64.Microsoft.NETCore.ILAsm
c:\temp\testapp> dotnet add package runtime.win-x64.Microsoft.NETCore.ILDAsm

c:\temp\testapp> dotnet build

/*
C:\temp\testapp\bin\Debug\net7.0\runtimes\win-x64\native\ilasm.exe
C:\temp\testapp\bin\Debug\net7.0\runtimes\win-x64\native\ildasm.exe

%USERPROFILE%\.nuget\packages\runtime.win-x64.microsoft.netcore.ilasm\7.0.0\runtimes\win-x64\native\ilasm.exe
%USERPROFILE%\.nuget\packages\runtime.win-x64.microsoft.netcore.ildasm\7.0.0\runtimes\win-x64\native\ildasm.exe
*/




자... 이렇게 최신 버전의 ilasm/ildasm을 구했는데요, 과연 IL 언어에 새로운 토큰이 추가된 것이었는지, 지난번 예제를 빌드한 DLL에 대해 ildasm.exe를 해보면,

.method assembly hidebysig static float64 
        '<<Main>$>g__GetResult|0_0'() cil managed
{
    .custom instance void [System.Runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
    // Code size       15 (0xf)
    .maxstack  1
    .locals init (float64 V_0)
    IL_0000:  nop
    IL_0001:  ldc.r8     (00 00 00 00 00 00 F0 FF)
    IL_000a:  stloc.0
    IL_000b:  br.s       IL_000d

    IL_000d:  ldloc.0
    IL_000e:  ret
} // end of method Program::'<<Main>$>g__GetResult|0_0'

-inf 토큰을 사용하지 않고 있습니다. ^^ 음... 결국 .NET Framework 버전에서 발생한 버그(?) 정도에 불과한 것이었다는!




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 12/6/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13952정성태6/15/2025250닷넷: 2336. C# - IValueTaskSource로 인해 주의가 필요한 ValueTask 호출파일 다운로드1
13951정성태6/15/2025229오류 유형: 963. Outlook - 일정이 "You cannot make changes to contents of this read-only folder." 오류 메시지로 삭제가 안 되는 경우
13950정성태6/12/20251050닷넷: 2335. C# - 간단하게 구현해 보는 IValueTaskSource 예제파일 다운로드1
13949정성태6/11/2025892오류 유형: 962. SignTool - "Error: SignerSign() failed." (-2146869243/0x80096005)
13948정성태6/10/2025605오류 유형: 961. 파이썬 - Linux 환경 + TCP 서버 소켓을 사용하는 프로세스 종료 후 재실행하는 경우 "OSError: [Errno 98] Address already in use" 오류 발생
13947정성태6/9/20251354개발 환경 구성: 750. 파이썬 - Azure App Service에 응용 프로그램 배포 후의 환경
13946정성태6/9/20251577개발 환경 구성: 749. 파이썬 - Azure App Service에 응용 프로그램 배포하기 전의 환경
13945정성태6/7/20251519오류 유형: 960. 파이썬 + conda - mysqlclient 사용 시 "NameError: name '_mysql' is not defined" 에러
13944정성태6/7/20255257오류 유형: 959. The trust relationship between this workstation and the primary domain failed. - 네 번째 이야기
13943정성태6/6/20251724개발 환경 구성: 748. Windows + Foundry Local - 로컬에서 AI 모델 활용
13942정성태6/5/20251394오류 유형: 958. winget 설치 시 "0x80d02002 : unknown error"
13941정성태6/2/20251335닷넷: 2334. C# - cpuid 명령어를 이용한 CPU 제조사 문자열 가져오기파일 다운로드1
13940정성태6/1/20251724C/C++: 188. C++의 32비트 + Release 어셈블리 코드를 .NET으로 포팅할 때 주의할 점파일 다운로드1
13939정성태5/29/20252095오류 유형: 957. NVIDIA Triton Inference Server - version `GLIBCXX_3.4.32' not found (required by /opt/tritonserver/backends/python/triton_python_backend_stub)
13938정성태5/29/20251628개발 환경 구성: 747. 파이썬 - WSL/docker에 구성한 Triton 예제 개발 환경
13937정성태5/24/20251519개발 환경 구성: 746. Windows + WSL2 환경에서 (tensorflow 등의) NVIDIA GPU 인식
13936정성태5/23/20251358개발 환경 구성: 745. Linux / WSL 환경에 Miniconda 설치하기
13935정성태5/20/20251323파이썬 - pip 사용 시 "ImportError: cannot import name 'html5lib' from 'pip._vendor'" 오류
13934정성태5/20/20251833스크립트: 77. 파이썬 - 'urllib.request' 모듈의 명시적/암시적 로딩 차이
13933정성태5/19/20251443오류 유형: 956. Visual Studio 2022가 17.12 버전부터 업데이트 되지 않는다면?
13932정성태5/18/20251680스크립트: 76. 파이썬 - Version 문자열 다루기(semver 패키지)
13931정성태5/17/20251989스크립트: 75. 파이썬 - Cython 기본 예제 및 컴파일
13930정성태5/17/20251686개발 환경 구성: 744. 파이썬 - Windows embeddable package 환경에서 외부 패키지 사용하는 방법(ex: UFO² 환경 구성)
13929정성태5/16/20251772오류 유형: 955. 파이썬 - "Windows embeddable package" REPL 환경에서 "NameError: name 'exit' is not defined"
13928정성태5/15/20251729오류 유형: 954. UFO² - "'Invalid URL (POST /v1/chat/completions/chat/completions)'"
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...