[.net] System.BadImageFormatException : installutil.exe에서 파일 또는 어셈블리를로드 할 수 없습니다.

InstallUtil.exe를 사용하여 Windows 서비스를 설치하려고하는데 오류 메시지가 나타납니다.

System.BadImageFormatException : 파일 또는 어셈블리 ‘ {xxx.exe}‘또는 해당 종속성 중 하나를 로드 할 수 없습니다 . 잘못된 형식으로 프로그램을로드하려고했습니다.

무엇을 제공합니까?


편집 : (OP에 의해 아님) dup에서 추출 된 전체 메시지가 [googleability를 위해] 더 많은 조회수를 얻습니다.

C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> InstallUtil.exe C : \ xxx.exe Microsoft (R) .NET Framework 설치 유틸리티 버전 4.0.30319.1 Copyright (c) Microsoft Corporation. 판권 소유.

설치를 초기화하는 동안 예외가 발생했습니다. System.BadImageFormatException : 파일 또는 어셈블리 ‘file : /// C : \ xxx.exe’또는 해당 종속성 중 하나를로드 할 수 없습니다. 잘못된 형식으로 프로그램을로드하려고했습니다 ..



답변

누군가에게 도움이 될 경우를 대비하여 완성도를 위해 좀 더 자세히 …

요즘이 예외의 가장 일반적인 이유는 32 비트 특정 ( /platform:x86) DLL을 64 비트 프로세스에로드하거나 그 반대의 경우 (즉, 64 비트 특정 ( /platform:x64) DLL을 프로세스에 로드 하려는 것입니다.) 32 비트). 귀하의 경우 platform비특이적을 (이다 /platform:AnyCpu),이 (NO 참조 의존성이 잘못된 비트 수의입니다 가정) 발생하지 않습니다.

즉, 다음을 실행합니다.

% windir % \ Microsoft.NET \ Framework \ v2.0.50727 \ installutil.exe

또는:

% windir % \ Microsoft.NET \ Framework 64 \ v2.0.50727 \ installutil.exe

작동하지 않습니다 (다른 프레임 워크 버전에서 대체 : v1.1.4322(32 비트 전용이므로이 문제가 발생하지 않음 v4.0.30319)).

분명히 다른 답변에서 다루었 듯이 installutil설치 프로그램을 실행중인 EXE / DLL 파일 의 .NET 버전 번호 가> = (바람직하게 =)이어야합니다.

마지막으로 Visual Studio 2010에서는 도구가 기본적으로 x86 바이너리를 생성합니다 ( 이전의 모든 CPU가 아닌 ).

System.BadImageFormatException의 전체 세부 정보 (유일한 원인이 일치하지 않는 bittedness라고 말하는 것은 실제로 지나치게 단순화 된 것입니다!)

x64 설치 프로그램 BadImageFormatException아래에있는 또 다른 이유 는 Visual Studio 2010에서 기본 설치 프로젝트 유형 이 x64 시스템에서도 32 비트 shim을 생성하기 때문 입니다 ( “64 비트 관리 사용자 지정 작업에서 System.BadImageFormatException 예외 발생”검색). 그 페이지)..vdprojInstallUtilLib


답변

최신 프레임 워크 (앱을 컴파일 한 프레임 워크)가 PATH에서 첫 번째인지 확인합니다. 그것은 나를 위해 문제를 해결했습니다. ( 포럼 에서 찾았 습니다 )


답변

64 비트 버전의 도구를 사용하여 32 비트 응용 프로그램을 설치하고있는 것 같습니다. 나는 또한 오늘이 문제에 직면했고이 프레임 워크 경로를 사용하여.

기음 : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

32 비트 응용 프로그램을 잘 설치해야합니다.


답변

핵심은 두 위치에있는 프로젝트에 대한 매치 프로세서 설정을 지정하는 것입니다.

여기에 이미지 설명 입력

또한 아래에 표시된대로 테스트 메뉴 >> 테스트 설정 >> 기본 프로세서 아키텍처 >>에서 아키텍처 설정이 동일한 지 확인하십시오.

여기에 이미지 설명 입력

이것은 VS2013 용이지만 다른 버전에서도 동일 할 수 있습니다.

업데이트-VS2019의 경우 :

여기에 이미지 설명 입력


답변

좋아요, 이것이 제가 가진 문제이고, 그것을 고친 것은 위와 매우 관련이있는 것 같습니다.

Visual Studio 2010 Express를 사용하고 있습니다. 실제로 아무것도하지 않는 테스트 서비스를 작성했습니다. 나중에 진짜 연습 일뿐입니다.

서비스를 작성하고 사용하여 설치하려고했는데 installutil.exe다음과 같은 오류가 발생했습니다.

System.BadImageFormatException : 파일 또는 어셈블리 ‘{filename.exe}’또는 해당 종속성 중 하나를로드 할 수 없습니다. 잘못된 형식으로 프로그램을로드하려고했습니다.

지금까지 원저자와 동일합니다.

Visual Studio 2010의 32 비트 출력에 대한 Ruben의 관찰 은 여기에서 구세주였습니다.

나는 64 비트 버전을 사용 installutil.exe했고 확실히 Visual Studio 2010 빌드의 출력은 32 비트였습니다. 여기에 약간의 추가 값을 추가하기 installutil.exe위해 C : \ Windows \ Microsoft.NET \ framework 폴더 에서 최신 .NET 프레임 워크의 32 비트 버전을 찾을 수 있습니다 . 이 버전을 사용하면 installutil.exe내 문제가 해결되었습니다. 장애없이 설치된 서비스!

나는 이것이 다른 누군가를 돕기를 바랍니다.


답변

언급 된 모든 솔루션을 시도한 후 PlatformTarget어떻게 든 AnyCPU내 프로젝트 .csproj의 구성에 추가 되었음을 발견했습니다 .

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>

줄을 제거하는 것이 저에게 효과적이었습니다.


답변

VS 2015를 사용하는 WinForms 프로젝트에서이 문제가 발생했습니다. 내 솔루션은 다음과 같습니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭
  2. 속성 선택
  3. “32 비트 선호”를 선택하십시오.
  4. 플랫폼 대상 : 모든 CPU