Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

Error VSP1033: The file '...' does not contain a recognized executable image.

특정 DLL의 Code Coverage를 위해 vsinstr.exe를 실행했는데,

d:\temp>vsinstr -coverage .\bin\Test.dll
Microsoft (R) VSInstr Post-Link Instrumentation 14.0.25420 x86
Copyright (C) Microsoft Corp. All rights reserved.

Error VSP1033: The file 'd:\temp\UnitTest\bin\Test.dll' does not contain a recognized executable image.

보는 바와 같이 실행 가능한 이미지가 아니라면서 instrumentation 코드 삽입에 실패를 합니다. 딱히 검색을 해봐도 이에 대한 글이 없습니다.

실행된 vsinstr.exe는 32비트 버전임을 where 명령어를 통해서 알 수 있었고,

d:\temp>where vsinstr.exe
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\vsinstr.exe

혹시나 싶어 명시적으로 x64 버전의 vsinstr.exe를 실행해 봤더니 이렇게 잘 됩니다. ^^;

d:\temp>"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\x64\vsinstr.exe" -coverage Test.dll

Microsoft (R) VSInstr Post-Link Instrumentation 14.0.25420 x64
Copyright (C) Microsoft Corp. All rights reserved.

File to Process:
   d:\temp\Test.dll --> d:\temp\Test.dll
Original file backed up to d:\temp\Test.dll.orig

Warning VSP2001: d:\temp\Test.dll is a strongly named assembly.  It will need to be re-signed before it can be executed.
Successfully instrumented file d:\temp\Test.dll.

이상하군요. 분명히 Test.dll은 AnyCPU 모드로 빌드했는데 저렇게 vsinstr.exe의 플랫폼 영향을 받다니!

더욱 이상한 것은, 동일한 DLL을 Visual Studio가 설치된 다른 컴퓨터에서 32비트 버전의 vsinstr.exe를 실행했더니... 잘 됩니다. ^^; 그렇다면 DLL 자체의 문제는 아닌 듯싶고, 뭔가 환경적인 요인이 있는 듯한데 일단 더 이상의 파악은 할 수 없었습니다.

참고로, vsinstr.exe의 32/64비트 실행 파일은 각각 다음의 폴더에 있습니다.

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\x64




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







[최초 등록일: ]
[최종 수정일: 2/19/2017]

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

비밀번호

댓글 작성자
 



2017-02-20 03시58분
[ryujh] 안녕하세요.

vs 2008 에는 없지만
vs 2012 에서 확인해보니

프로젝트 - 속성 - 빌드 - 플랫폼 대상 : Any CPU

아래에 32비트 기본 사용이 체크 되어 있다면 32비트로 빌드된 적이 있습니다.

본문의 vsinstr.exe 와 관련이 있는지는 모르겠습니다.



[guest]
2017-02-20 07시19분
ryujh님의 보충 설명도 도움이 되겠습니다. 단지, 본문의 경우 dll에 대해서 테스트한 것인데, "32비트 기본 사용" 옵션은 DLL 프로젝트에 대해서는 비활성화되어 있습니다. 확신할 수는 없지만, vsinstr.exe 자체가 이미 32/64비트로 결정되었기 때문에 아마도 닷넷 exe에 대해서도 '32비트 기본 사용' 옵션은 크게 의미가 없을 것 같습니다.
정성태

... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...
NoWriterDateCnt.TitleFile(s)
12529정성태2/4/202110118개발 환경 구성: 535. Wireshark + C#으로 확인하는 TCP 통신의 MIN RTO [1]
12528정성태2/1/20219513개발 환경 구성: 534. Wireshark + C#으로 확인하는 TCP 통신의 MSS(Maximum Segment Size) - 윈도우 환경
12527정성태2/1/20219738개발 환경 구성: 533. Wireshark + C#으로 확인하는 TCP 통신의 MSS(Maximum Segment Size) - 리눅스 환경파일 다운로드1
12526정성태2/1/20217584개발 환경 구성: 532. Azure Devops의 파이프라인 빌드 시 snk 파일 다루는 방법 - Secure file
12525정성태2/1/20217289개발 환경 구성: 531. Azure Devops - 파이프라인 실행 시 빌드 이벤트를 생략하는 방법
12524정성태1/31/20218328개발 환경 구성: 530. 기존 github 프로젝트를 Azure Devops의 빌드 Pipeline에 연결하는 방법 [1]
12523정성태1/31/20218347개발 환경 구성: 529. 기존 github 프로젝트를 Azure Devops의 Board에 연결하는 방법
12522정성태1/31/20219841개발 환경 구성: 528. 오라클 클라우드의 리눅스 VM - 9000 MTU Jumbo Frame 테스트
12521정성태1/31/20219875개발 환경 구성: 527. 이더넷(Ethernet) 환경의 TCP 통신에서 MSS(Maximum Segment Size) 확인 [1]
12520정성태1/30/20218375개발 환경 구성: 526. 오라클 클라우드의 VM에 ping ICMP 여는 방법
12519정성태1/30/20217496개발 환경 구성: 525. 오라클 클라우드의 VM을 외부에서 접근하기 위해 포트 여는 방법
12518정성태1/30/202124939Linux: 37. Ubuntu에 Wireshark 설치 [2]
12517정성태1/30/202112530Linux: 36. 윈도우 클라이언트에서 X2Go를 이용한 원격 리눅스의 GUI 접속 - 우분투 20.04
12516정성태1/29/20219189Windows: 188. Windows - TCP default template 설정 방법
12515정성태1/28/202110401웹: 41. Microsoft Edge - localhost에 대해 http 접근 시 무조건 https로 바뀌는 문제 [3]
12514정성태1/28/202110707.NET Framework: 1021. C# - 일렉트론 닷넷(Electron.NET) 소개 [1]파일 다운로드1
12513정성태1/28/20218717오류 유형: 698. electronize - User Profile 디렉터리에 공백 문자가 있는 경우 빌드가 실패하는 문제 [1]
12512정성태1/28/20218515오류 유형: 697. The program can't start because VCRUNTIME140.dll is missing from your computer. Try reinstalling the program to fix this problem.
12511정성태1/27/20218256Windows: 187. Windows - 도스 시절의 8.3 경로를 알아내는 방법
12510정성태1/27/20218646.NET Framework: 1020. .NET Core Kestrel 호스팅 - Razor 지원 추가 [1]파일 다운로드1
12509정성태1/27/20219593개발 환경 구성: 524. Jupyter Notebook에서 C#(F#, PowerShell) 언어 사용을 위한 환경 구성 [3]
12508정성태1/27/20218195개발 환경 구성: 523. Jupyter Notebook - Slide 플레이 버튼이 없는 경우
12507정성태1/26/20218316VS.NET IDE: 157. Visual Studio - Syntax Visualizer 메뉴가 없는 경우
12506정성태1/25/202111581.NET Framework: 1019. Microsoft.Tye 기본 사용법 소개 [1]
12505정성태1/23/20219348.NET Framework: 1018. .NET Core Kestrel 호스팅 - Web API 추가 [1]파일 다운로드1
12504정성태1/23/202110468.NET Framework: 1017. .NET 5에서의 네트워크 라이브러리 개선 (2) - HTTP/2, HTTP/3 관련 [1]
... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...