문제

Visual Studio 2008을 사용하여 Windows 7 64비트에서 개발 중입니다.ILMerge를 사용하여 단일 DLL로 병합하는 클래스 라이브러리 컬렉션이 있습니다.그러나 이 병합된 DLL을 사용하려고 하면 다음과 같은 메시지가 나타납니다.

[잘못된이미지형식예외:파일이나 어셈블리 'MyMergedDll' 또는 해당 종속성 중 하나를 로드할 수 없습니다.잘못된 형식의 프로그램을 로드하려고 했습니다.]

이에 대한 도움을 받기 위해 검색해 본 결과 MyMergedDll의 각 프로젝트에서 Build 속성을 x86을 대상으로 설정해야 하는 것 같아서 그렇게 했습니다.또한 MyMergedDll을 참조하여 x86을 대상으로 하는 웹 서비스에서 MSTest가 아닌 모든 프로젝트를 설정했습니다.하지만 여전히 이 오류가 발생합니다.

만약에 이 블로그 항목 다음을 수행하면 이 오류가 발생할 수 있습니다.

public class SpecificClass: BaseClass: where T : class { }

즉, 제네릭에 클래스 제약 조건이 있습니다.하지만 블로그 항목은 2007년의 것이므로 그것이 여전히 적용되는지는 모르겠습니다.제약 조건을 확인하기 위해 프로젝트의 모든 일반 클래스를 추적하기 전에 문제가 무엇이라고 생각하는지 StackOverflow로부터 의견을 듣고 싶었습니다.

중요한 경우 MyMergedDll은 강력한 이름으로 서명됩니다.콘솔 응용 프로그램과 웹 서비스 모두에서 MyMergedDll을 사용하려고 합니다.웹 서비스를 재구축할 때마다 IIS가 업데이트되는지 여부로 인해 상황이 복잡한 것인지는 모르겠습니다.콘솔 응용 프로그램을 사용하면 BadImageFormatException 릴리스 모드에서 빌드할 때.

도움이 되었습니까?

해결책

나는 그것을 작동시켰고 그것은 두 가지 일을 했기 때문이라고 생각합니다:

  1. MyMergedDLL은 내가 제어할 수 있는 몇 가지 다른 어셈블리를 사용하여 구축되었지만 해당 어셈블리는 x86을 대상으로 설정되지 않았습니다.x86을 대상으로 하는 어셈블리를 다시 빌드하고 MyMergedDLL을 구성하는 어셈블리를 다시 빌드한 다음 해당 어셈블리를 다시 병합하여 MyMergedDLL의 새 복사본을 만들었습니다.
  2. MyMergedDLL을 사용하는 콘솔 응용 프로그램은 디버그 모드에서 x86을 대상으로 설정했지만 릴리스 모드는 아니었습니다. 따라서 디버그 모드에서는 작동하지만 BadImageFormatException 릴리스 모드에서.

첫 번째 일은 필요하지 않았을 수도 있습니다.릴리스 모드에서 x86을 대상으로 하려면 MyMergedDLL의 소비자가 필요하다고 생각합니다.내가 사용하고 있는 ILMerge의 버전을 알 수 없어서 Microsoft 사이트에서 찾을 수 있는 최신 MSI로 다시 설치했습니다.

다른 팁

사용중인 Ilmerge 버전을 두 번 확인 했습니까?

aspnet_merge의 오래된 잘못된 버전 (기본적으로 다른 것들 사이에서 동일한 병합을 수행하는 것) 때문에 우리가 설명하는 것과 동일한 문제가 발생했습니다.나는 다른 사람을 위해이 질문에 답변 할 때 몇 가지 세부 사항을갔습니다.그렇게.

ILDASM에서 DLL을 빠르게 볼 가치가있을 수 있습니다 (반사경은 이러한 나쁜 DLL을 디 컴파일하려고 할 때 반사경이 넘어지는 경향이 있습니다. - 아마도 놀랍지 않게).문제가 발생할 수있는 코드가 문제가 발생할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top