VC++ 비 관리 DLL을 사용하는 C# .NET 3.5 콘솔 응용 프로그램에서 일하고 있습니다. 그것은 몇 주 전에 작업했을 때 문제없이 실행되었지만, 오늘 다시 돌아와서 BadImageFormatException을 얻고 있습니다 ("잘못된 형식의 프로그램을로드하려고 시도했습니다. (HRESULT의 예외 : 0x8007000B)).NET 어셈블리에서 BadImageFormatException의 다른 원인은 무엇입니까?
내 개발 워크 스테이션에서 64 비트 Windows 7을 실행하고 있으며 관리되지 않는 코드로 상당한 작업을 수행하므로 .NET 어셈블리와 VC++ 라이브러리에 x86 대상이 모두 있는지 즉시 확인했습니다.
그냥 내가 청소해야하고 아무 소용에 VC++ 라이브러리 및 .NET 어셈블리를 재 구축합니다. 어느 시스템이 특별히 이상한 점이하고있다을. 벤처 캐피탈 ++ 라이브러리로드 진 날엔 파일을 읽고 수학 내용을 처리합니다. .NET 어셈블리에는 라이브러리 용 DllImports와 일부 코드가 연결되어 있습니다. 이것은 모두 몇 주 전에 일했습니다.
그래서 지금 실행중인 x86/x64 충돌보다 일반적인 BadImageFormatException의 다른 원인이 있는지 궁금하게 생각합니다.
감사합니다.
EDIT : x86 또는 x64 모드에 관계없이 동일한 오류가 발생하지만 'Any CPU'로 설정하면 실행은 그 지점을 지나지 만 나중에 예외없이 VC++ 라이브러리를 호출하면 실행이 중단됩니다. 이 문제와 관련이 있는지 여부에 관계없이 '모든 CPU'가 x86 및 x64와 다르게 수행되면서이 문제에 대해 의견이 분분합니까?
실행중인 응용 프로그램이 x64 버전의 VC++ 라이브러리에 대한 액세스 권한을 갖고 있으며 대신 해당 라이브러리를로드하려고 시도합니까? 또는 실행중인 응용 프로그램이 x86이 아닌 AnyCPU를 대상으로 할 수 있습니까? AnyCPU는 64 비트 환경에있는 경우 64 비트로로드됩니다. – Anzurio
좋은 질문입니다. 전자는 그럴 것 같지 않습니다. 프로젝트를 복사 한 적이없는 다른 컴퓨터에 프로젝트를 복사하려고 시도했습니다. 어셈블리의 x86 버전 만 복사하면됩니다. 다른 컴퓨터에서 같은 문제가 발생했습니다. 응용 프로그램이 x86으로 설정되어 있습니다. 호기심에서 나는 'Any CPU'에서 실행되도록 설정했다. 그렇게하면 VC++ 라이브러리 (x86 또는 x64로 설정되면 종료됩니다)에 대한 첫 번째 호출을 지나치게되지만 나중에 라이브러리 호출시 실행이 종료됩니다. –
.exe에서 종속성 워커 x86을 실행 한 다음 .dll에서 실행하십시오. 64 비트 컴퓨터에서 system32의 msvcr120.dll을 복사 한 후에이 문제가 발생했습니다. 오우! –