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


104

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'또는 해당 종속성 중 하나를로드 할 수 없습니다. 잘못된 형식으로 프로그램을로드하려고했습니다 ..

답변:


154

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

요즘이 예외의 가장 일반적인 이유는 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


위에서 말한대로 디버깅을 시작할 때 동일한 문제가 발생했습니다 .Platform :이 x86으로 설정되었습니다. 내가 Any CPU로 변경했을 때 작동했습니다 :)
Atta H.

사용자 지정 작업이있는 Windows 설치 프로그램이 있습니다. 내 설정은 x64 시스템에서 실행되어야하므로 사용자 지정 작업 속성은 "Run64Bit"옵션을 true로 확인해야합니다. 그것은 내 문제를 해결했습니다.
Hagen


9

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

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

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


그것은 나에게 시나리오였습니다. 매우 도움이되는 답변입니다.
Simos Fasouliotis

최소한 원래 답변을 연결하십시오 : stackoverflow.com/revisions/5229405/1
crusy

8

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

여기에 이미지 설명 입력

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

여기에 이미지 설명 입력

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

업데이트-VS2019의 경우 :

여기에 이미지 설명 입력


이 오류를 수정하는 올바른 방법입니다. 즉, 수백 개의 csproj 파일을 엉망으로 만들고 싶지 않은 경우입니다.
Bizhan

6

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

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내 문제가 해결되었습니다. 장애없이 설치된 서비스!

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


32 비트 버전이 무슨 뜻인지 모르겠지만 여기에서 시도했지만 C : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727
user2568374

3

언급 된 모든 솔루션을 시도한 후 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>

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


필자의 경우 64 비트 빌드를 원하는 경우 PropertyGroup 노드 중 하나에 <PlatformTarget> x64 </ PlatformTarget> 노드가 누락되었으므로 기본적으로 32 비트로 설정되고 잘못된 이미지 형식 오류가 발생했습니다. 이 누락 된 노드를 속성 그룹에 추가하면 오류가 사라졌습니다.
Tom Regan

이 솔루션을 시도 하면 구성 파일이 출력 디렉토리에 있음에도 불구하고 런타임 중에 app.config의 appSettings 가로 드되지 않는 또 다른 문제가 발생했습니다 . 그러나 zar의 접근 방식 ( Processor Architecture for AnyCPU Projects) 을 시도하면 모든 것이 다시 작동하기 시작합니다.
Bizhan

1

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

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

0

나는 같은 문제가 있었다. 실행을 위해 표준 명령을 사용합니다. X86 테스트에 대해 X64 ro 실행을 호출했습니다. nunit-runner의 X64 버전이 아니라 X86을 지정해야했습니다.


0

요약하면, 64 비트 시스템에 64 비트 서비스를 성공적으로 설치하려면 Build 및 Project \ Build \ Platform을 x64로 설정해야합니다.


0

내 문제는 달랐습니다. 이것은 내 Windows 7 시스템의 예기치 않은 종료 후에 발생했습니다. 깨끗한 솔루션을 수행했고 예상대로 실행되었습니다.


0

라이브 테스트 에는 이 메시지가 있지만 단위 테스트 에는없는 경우 선택한 어셈블리가 즉석에서 복사되기 때문 $(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\입니다. 그러나 가끔은 interop c ++ / c # 프로젝트의 경우 VC ++ dll과 같이 몇 가지 어셈블리를 선택할 수 없습니다 .

xcopy복사 된 파일은 라이브 테스트 엔진에 의해 지워지기 때문에 빌드 후 문제가 해결되지 않습니다.

현재까지 유일한 해결 방법 (2018 년 12 월 28 일)은 라이브 테스트를 피하고 [TestCategory("SkipWhenLiveUnitTesting")]테스트 클래스 또는 테스트 메서드에 적용된 특성을 사용하여 단위 테스트에서 모든 작업을 수행하는 것입니다 .

이 버그는 Visual Studio 2017에서 최대 15.9.4까지 발견되며 Visual Studio 팀에서 해결해야합니다.


0

대상 빌드 x64 대상 서버 호스팅 IIS 64 비트

웹 사이트 / 웹 애플리케이션을 실행하는 appPool 호스팅을 마우스 오른쪽 버튼으로 클릭하고 32 비트 애플리케이션 활성화 = false를 설정합니다.

여기에 이미지 설명 입력


0

나는 오늘이 문제에 직면했습니다. 필자의 경우 내 애플리케이션 (64 비트 dll에 대한 참조가 있음)의 플랫폼 대상이로 설정 AnyCPU되었지만 플랫폼 대상 섹션 아래의 Prefer 32-bit 확인란 이 기본적으로 선택되어 있습니다. 이것은 문제였으며 Prefer 32-bit옵션을 선택 취소 한 후 모두 정상적으로 작동했습니다 .


0

동일한 증상의 문제에 대한 다른 해결책을 찾았습니다.

프로젝트를 .net 4.7.1에서 4.7.2로 업데이트 할 때이 오류가 발생했습니다.

문제는 프로젝트에서 System.Net.Http를 더 이상 참조하지 않지만 web.config의 dependentAssembily 섹션에 나열되어 있다는 것입니다. web.config에서이 어셈블리와 사용되지 않는 다른 어셈블리 참조를 제거하면 문제가 해결되었습니다.


0

문제는 System.BadImageFormatException: Could not load file or assembly전혀 관련되지 않은 것을 포함하는 installutil.exe모든 것이 바로이 스레드를 가리킨다 는 것 입니다.

  1. 문제가 WindowsBase또는 PresentationFramework dll과 관련 되어 있고 분석기가 설치되어있는 경우 솔루션의 모든 프로젝트에 대해 설치했는지 또는 전혀 설치하지 않았는지 확인하십시오.

    여기에 이미지 설명 입력

  2. .csproj두 가지가 아닌 라이브러리의 파일 에서 전체 프레임 워크를 참조하십시오 dlls.

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>Library</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <RazorLangVersion>3.0</RazorLangVersion>
        <UseWpf>True</UseWpf>
      </PropertyGroup>
  3. 제거 bin하고 objdirs, 솔루션을 청소하고 재건하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.