Programing

플랫폼이 동일하더라도 "잘못된 형식의 프로그램을로드하려고했습니다"

lottogame 2020. 2. 17. 22:07
반응형

플랫폼이 동일하더라도 "잘못된 형식의 프로그램을로드하려고했습니다"


64 비트 시스템의 32 비트 관리되지 않는 DLL에서 함수를 호출하고 있습니다. 내가 얻는 것은 :

BadImageFormatException : 형식이 잘못된 프로그램을로드하려고했습니다. (HRESULT 예외 : 0x8007000B)

처음에는 프로젝트를 Any CPU 플랫폼으로 설정했기 때문에 둘 다 x86으로 변경했지만이 오류는 여전히 발생합니다. 이것이 내가 아는 유일한 해결책입니다.

DLL은 다른 프로그램 (소스가없는)과 함께 사용할 수 있기 때문에 손상되지 않았습니다. 나는 그것이 의존성을 찾지 못하고 있다고 생각했지만 확인하고 모두 거기에 있습니다. 게다가, DllNotFoundException그 경우에 던지지 않습니까?

다른 무엇을 할 수 있습니까? 그리고 "64 비트 관리되지 않는 DLL을 대신 사용하십시오"라고 말하기 전에 하나도없는 것으로 지적하겠습니다. ;)


IIS 7 (및 / 또는 64 비트 OS 시스템)에서 32 비트 응용 프로그램을 실행하려고하면 동일한 오류가 발생합니다. 따라서 IIS 7에서 응용 프로그램의 응용 프로그램 풀을 마우스 오른쪽 단추로 클릭하고 "고급 설정"으로 이동하여 "32 비트 응용 프로그램 사용"을 "TRUE"로 변경하십시오.

웹 사이트를 다시 시작하면 작동합니다.

여기에 이미지 설명을 입력하십시오


어떻게 든 구성 관리자 빌드 확인란이 내 실행 파일에 대해 선택되지 않았으므로 여전히 이전 Any CPU 빌드로 실행 중이었습니다. 이 문제를 해결 한 후 Visual Studio는 어셈블리를 디버깅 할 수 없지만 다시 시작하여 수정되었다고 불평했습니다.


에서 비주얼 스튜디오 , 오른쪽 클릭 프로젝트 -> 왼쪽 창에서 클릭 빌드 탭을,

프로젝트 속성, 빌드 탭

아래 플랫폼 대상 86 선택 (또는 더 일반적으로 아키텍처는 당신이 연결되어있는 라이브러리와 일치)

프로젝트 속성, 플랫폼 대상

나는 이것이 누군가를 돕기를 바랍니다! :)


방금이 문제가있었습니다. 여기에있는 모든 제안을 시도했지만 도움이되지 않았습니다.

나는 그것을 고쳐주는 또 다른 것을 발견했다. Visual Studio에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 "속성"을 엽니 다. "컴파일"(또는 "빌드") 탭을 클릭 한 다음 하단의 "고급 컴파일 옵션"을 클릭하십시오.

"타겟 CPU"드롭 다운을 확인하십시오. 빌드중인 "플랫폼"과 일치해야합니다. 즉, "Any CPU"를 구축하는 경우 "Target CPU"는 "Any CPU"라고 표시해야합니다. 활성화하여 모든 플랫폼을 살펴보고이 설정을 확인하십시오.


녹색 화살표 버튼을 클릭하여 응용 프로그램을 실행할 때이 오류가 발생하지만 여전히 64 비트로 응용 프로그램을 실행하려고합니다. VS 2013, 2015 및 2017 에서이 작업을 수행 할 수 있습니다

도구> 옵션> 프로젝트 및 솔루션> 웹 프로젝트> 64 비트 버전의 IIS Express 사용으로 이동하십시오.


모든 CPU를 사용하는 경우 32 비트 선호 옵션을 선택 하면이 문제가 발생할 수 있습니다 .

프로젝트 속성의 빌드에서이 옵션의 선택해제 하십시오!

여기에 이미지 설명을 입력하십시오


이 게시물에 대한 약간의 주제가 있지만이 오류 메시지를 검색하면 여기로 이동했습니다.

팀 시스템을 통해 빌드하고이 오류가 발생하면 빌드 정의 프로세스 탭에 "MSBuild 플랫폼"설정이 있습니다. 이것이 "자동"으로 설정되어 있으면이 문제가 발생할 수 있습니다. "X86"으로 변경하면 오류를 해결할 수도 있습니다.


필자의 경우 C #에서 네이티브 DLL을 사용하고있었습니다. 이 DLL은 누락 된 다른 DLL 몇 개에 의존했습니다. 다른 DLL이 추가되면 모든 것이 작동했습니다.


또한 이 대답을 참조하십시오. 이것은 저에게 동일한 문제를 해결했습니다.

2010 년 5 월 12 일 오전 8시 50 분에 Luis Mack에 의해 게시 됨 64 비트 컴퓨터에서 컴파일 할 때 특정 프로젝트에 대해서만 동일한 문제가 발견되었습니다. SEEMS가 작동하는 수정은 사용자 컨트롤 또는 양식이 디자이너에서 편집 될 때마다 이미지 스트림에서 한 문자를 수동으로 변경하는 것입니다.

 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w

로 변경

 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w

00LjAuMC4w에 다시 0yLjAuMC4w 줄 끝에 (해당 제품이 다시 00)


필자의 경우 Reflection을 통해 참조 된 DLL을 다시로드하는 작은 .exe를 사용하고 있습니다. 그래서 나는 단지 하루를 절약하는 다음 단계를 수행합니다.

솔루션 탐색기의 프로젝트 속성에서 빌드 탭의 x86에서 대상 플랫폼을 선택합니다.


필자의 경우 MSTest를 통해 테스트를 실행하고 테스트 디렉토리에 32 비트 및 64 비트 DLL을 모두 배포하고 있음을 알았습니다. 프로그램이 64 비트 DLL을 선호하여 실패했습니다.

TL; DR 테스트에는 32 비트 DLL 만 배포해야합니다.


@paibamboo의 답변을 바탕으로

그는 말했다 : 도구> 옵션> 프로젝트 및 솔루션> 웹 프로젝트> 64 비트 버전의 IIS Express 사용

동료가이 확인란을 선택했지만 (명시 적으로 찾음) 오류 메시지가 표시되었습니다. 몇 시간 후 그는 박스의 체크를 해제하고 다시 체크했다. Lo : 보라 : 이제 코드가 성공했다.

이 상자의 상태가 저장되지 않은 두 곳이 동기화되지 않은 것으로 보입니다. 다시 확인한 후 다시 동기화했습니다.

더 많은 지식이있는 사용자를위한 질문 : 상태를 동기화 해제 한 업데이트 또는 지난 주 (VS 2015)가 있습니까?


I got this issue solved in the 'Windows' way. After checking all my settings, cleaning the solution and rebuilding it, I simply close the solution and reopened it. Then it worked, so VS probably didn't get rid of some stuff during cleaning. When logical solutions don't work, I usually turn to illogical (or seemingly illogical) ones. Windows doesn't let me down. :)


I was able to fix this issue by matching my build version to the .NET version on the server.

I double clicked the .exe just to see what would happen and it told me to install 4.5....

So I downgraded to 4.0 and it worked!

So make sure your versions match. It ran on my dev box fine, but server had older .NET version.


내 경우에는 파일의 내용이 잘못되었습니다. DLL은 웹에서 다운로드되었지만 DLL의 내용은 HTML 페이지입니다 .D 올바른 DLL처럼 보이는 경우 이진 파일인지 확인하십시오. :)


.NET 코어에서 동일한 문제가 발생했습니다. 해결책은 32 비트 .netcore 런타임을 다운로드하고 프로젝트를 대상으로하는 것입니다.x86

당신에 csproj파일 추가

  <PropertyGroup>
    <PlatformTarget>x86</PlatformTarget>  
  </PropertyGroup>

  <PropertyGroup>
    <RunCommand Condition="'$(PlatformTarget)' == 'x86'">$(MSBuildProgramFiles32)\dotnet\dotnet</RunCommand>    
  </PropertyGroup>

이것은 Windows 시스템에 사용되었으며 Linux / OSX에 대한 경로 등을 조정해야합니다.


비슷한 문제가 있었고 Platform 대상을 x86으로 설정하여 문제를 해결할 수있었습니다. 프로젝트 속성-> 빌드

참고 : https://stackoverflow.com/questions/2023766/an-attempt-was-made-to-load-a-program-with-an-incorrect-format-even-when-the-p


반응형