developer tip

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

copycodes 2020. 8. 25. 08:17
반응형

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 비트 응용 프로그램을 잘 설치해야합니다.


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

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

The key is to set match processor settings for the project which are at two places.

enter image description here

And also make sure the archtecuture settings is same in Test menu >> Test Settings >> Default Processor Archtecture >> as show below.

enter image description here

This is for VS2013 but maybe same for other versions too.


I had the same issue. I using the standard command for execution. It was calling the X64 ro run against X86 tests. I needed to specify the X86 and not the X64 version of the nunit-runner.


Summarizing, both the Build and Project\Build\Platform has to be set to x64 in order to successfully install 64 bit service on 64 bit system.


My issue was different. This occurred after an unexpected shutdown of my windows 7 machine. I performed a clean solution and it ran as expected.


In the case of having this message in live tests, but not in unit tests, it's because selected assemblies are copied on the fly to $(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\. But sometime few assemblies can be not selected, eg., VC++ dlls in case of interop c++/c# projects.

Post-build xcopy won't correct the problem, because the copied file will be erased by the live test engine.

The only workaround to date (28 dec 2018), is to avoid Live tests, and do everything in unit tests with the attribute [TestCategory("SkipWhenLiveUnitTesting")] applied to the test class or the test method.

This bug is seen in any Visual Studio 2017 up to 15.9.4, and needs to be addressed by the Visual Studio team.


Target build x64 Target Server Hosting IIS 64 Bit

Right Click appPool hosting running the website/web application and set the enable 32 bit application = false.

enter image description here


I have faced this issue today. In my case, my application's (had a reference to a 64-bit dll) platform target was set to AnyCPU but Prefer 32-bit check box under platform target section was ticked by default. This was the problem and worked all fine after un-checking Prefer 32-bit option.


We found a different solution to a problem with the same symptom:

We saw this error when we updated the project from .net 4.7.1 to 4.7.2.

The problem was that even though we were not referencing System.Net.Http any more in the project, it was listed in the dependentAssembily section of our web.config. Removing this and any other unused assembly references from the web.config solved the problem.

참고URL : https://stackoverflow.com/questions/323140/system-badimageformatexception-could-not-load-file-or-assembly-from-installuti

반응형