Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 3개 있습니다.)

.NET Core 프로젝트를 Visual Studio에서 실행 시 System.BadImageFormatException 발생하는 경우

분명히, x64 프로젝트로 맞춰 놓고 실행했는데도 불구하고 다음과 같이 오류가 나는 경우가 있습니다.

Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'F:\ConsoleApp1\bin\x64\Release\netcoreapp2.1\ConsoleApp1.dll'. An attempt was made to load a program with an incorrect format.

재미있는 것은, AnyCPU로 맞춰놓으면 "Prefer 32-bit" 옵션을 껐는데도 불구하고 무조건 x86 위치의 dotnet.exe에서 호스팅이 되는 것을 볼 수 있습니다. 물론, 제 컴퓨터에는 x86과 x64 버전의 .NET Core 런타임이 모두 설치된 상태입니다.

검색해 보면 다음의 글이 나옵니다.

BadImageFormatException when PlatformTarget architecture is different than current SDK  #7532 
; https://github.com/dotnet/cli/issues/7532

원인은, Visual Studio가 .NET Core 프로젝트의 PlatformTarget 값에 따라 dotnet.exe를 선택하지 않고 PATH 환경 변수에 맡겨 버린다는 것입니다. 실제로 제 컴퓨터의 PATH에는 다음과 같은 순서로 dotnet 경로가 잡혀 있습니다.

  1. C:\Program Files (x86)\dotnet\
  2. C:\Program Files\dotnet\

따라서 이 순서를 바꿔주면 되지만, 그렇게 되면 x86으로 실행하고 싶을 때에는 반대로 x64 dotnet.exe가 실행되는 문제가 발생합니다.

근본적으로 이를 해결하기 위해서는 해당 .NET Core 프로젝트가 위치한 폴더 또는 그 상위의 어느 폴더에 다음의 내용으로 Directory.Build.targets 파일을 넣어두면 됩니다.

<Project>
  <PropertyGroup 
      Condition="'$(OS)' == 'Windows_NT' and
                 '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and
                 '$(SelfContained)' != 'true'"
                  >
    <RunCommand Condition="'$(PlatformTarget)' == 'x86'">$(MSBuildProgramFiles32)\dotnet\dotnet</RunCommand>
    <RunCommand Condition="'$(PlatformTarget)' == 'x64'">$(ProgramW6432)\dotnet\dotnet</RunCommand>
  </PropertyGroup>
</Project>

이후 Visual Studio를 재시작하면 PlatformTarget이 x86으로 되어 있으면 32비트가, x64로 되어 있으면 64비트 dotnet.exe가 선택되어 올라오게 됩니다.




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

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/11/2018]

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

비밀번호

댓글 작성자
 



2018-06-11 02시51분
Visual Studio에서 ASP.NET Core 실행할 때 dotnet.exe 프로세스의 -532462766 오류 발생
; http://www.sysnet.pe.kr/2/0/11244
정성태

... 151  152  153  154  155  156  157  158  [159]  160  161  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1073정성태6/20/201127191오류 유형: 127. Visual Studio에서 WCF 서비스의 이름 변경 시 발생할 수 있는 오류
1072정성태6/19/201126702.NET Framework: 224. EF 4.1 Code First에서 Identity 칼럼 생성하는 방법파일 다운로드1
1071정성태6/19/201130226.NET Framework: 223. Entity Framework 4.1의 Code First를 이용한 SQL Azure 데이터베이스 생성 [3]파일 다운로드1
1070정성태6/19/201127751.NET Framework: 222. Windows Azure - VM Role 베타 프로그램 참여 [2]
1069정성태6/18/201127837.NET Framework: 221. Cache 영향을 받지 않는 DNS 이름 풀이 [2]파일 다운로드1
1068정성태6/16/201125434개발 환경 구성: 127. Portable Library - 닷넷 N-Screen용 공통 라이브러리 제작 [1]
1067정성태6/15/201124968오류 유형: 126. Windows failed to apply the Group Policy Folder Options settings. [1]
1066정성태6/14/201128013개발 환경 구성: 126. MSDN 구독자 - Windows Azure 무료 서비스 신청하는 방법 [4]
1065정성태6/13/201132837개발 환경 구성: 125. Firebird - 유니코드 기본 문자셋 지정
1064정성태6/11/201127499웹: 22. Visual Studio 2010에서 CSS 3 인텔리센스(intellisense) 지원하는 방법 [1]
1063정성태6/10/201129091웹: 21. Sysnet 웹 사이트의 CSS 2.1 변환 기록 [1]
1062정성태6/9/201129229웹: 20. Sysnet 웹 사이트의 HTML5 변환 기록 [1]
1061정성태6/8/201127497오류 유형: 125. 인터넷 익스플로러 - 개발자 도구에서 정지점(BP: Breakpoint) 설정이 안 되는 경우 [1]
1060정성태6/8/201124047VC++: 51. PHP 모듈의 F5 디버깅
1059정성태6/6/201129157VC++: 50. PHP 모듈 - php_mysql 빌드하는 방법파일 다운로드1
1058정성태6/5/201132806개발 환경 구성: 124. .NET 개발자가 처음 해보는 PHP + MySQL 연동 [2]
1057정성태6/4/201130183VC++: 49. 소스 코드로부터 php5apache2_2.dll 생성하는 방법파일 다운로드1
1056정성태6/2/201128378VC++: 48. 윈도우에서 Apache Module - Content Handler 컴파일파일 다운로드1
1055정성태6/1/201125614오류 유형: 124. MVC 프로젝트의 Site.Master 관련 오류 정리
1054정성태5/31/201129838.NET Framework: 220. ASP.NET MVC Web Site 프로젝트 - 단위 테스트 작성파일 다운로드1
1053정성태5/31/201132352VC++: 47. Apache Module에 대한 'F5 디버그 (Start with debugging)' [2]
1052정성태5/30/201130001.NET Framework: 219. ASP.NET MVC Web Site 프로젝트 구성하기파일 다운로드1
1051정성태5/28/201138456VC++: 46. 윈도우에서 Apache Module 컴파일 (VC++)파일 다운로드1
1050정성태5/28/201124638오류 유형: 123. Firebird - Exception of type 'FirebirdSql.Data.Common.IscException' was thrown.
1049정성태5/28/201130341.NET Framework: 218. WCF REST 서비스 - 웹 브라우저 측 Ajax 호출 캐시 [1]
1048정성태5/27/201132250개발 환경 구성: 123. Apache 소스를 윈도우 환경에서 빌드하기
... 151  152  153  154  155  156  157  158  [159]  160  161  162  163  164  165  ...