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 예외 발생”검색). 그 페이지)..vdproj
InstallUtilLib
답변
답변
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 프로젝트에서이 문제가 발생했습니다. 내 솔루션은 다음과 같습니다.
- 프로젝트를 마우스 오른쪽 버튼으로 클릭
- 속성 선택
- “32 비트 선호”를 선택하십시오.
- 플랫폼 대상 : 모든 CPU