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

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 및 2019 에서이 작업을 수행 할 수 있습니다

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


답변

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

당신을 확인 프로젝트 속성의 빌드 탭 에서이 옵션의 선택 해제 하십시오!

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


답변

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

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