代码之家  ›  专栏  ›  技术社区  ›  Epaga Alex Reynolds

System.BadImageFormatException:无法加载文件或程序集(从InstallUtil.exe)

  •  89
  • Epaga Alex Reynolds  · 技术社区  · 16 年前

    我正在尝试使用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 版权所有(c)Microsoft Corporation。版权所有。

    初始化安装时发生异常: System.BadImageFormatException:未能加载文件或程序集“file:///c:\xxx.exe”或其依赖项之一。试图加载格式不正确的程序。

    12 回复  |  直到 6 年前
        1
  •  134
  •   knocte    9 年前

    一些更详细的完整性,以防它帮助某人…

    请注意,最近出现这种异常的最常见原因是试图加载32位特定的( /platform:x86 )将dll转换成64位的进程,反之亦然(即加载64位特定的( /platform:x64 )将dll转换为32位的进程)。如果你 platform 是非特定的( /platform:AnyCpu ,这不会发生(假设没有引用的依赖项的位错误)。

    换句话说,跑步:

    %windir%\microsoft.net\framework\v2.0.50727\installUtil.exe

    或:

    %windir%\microsoft.net\framework 六十四 \ v2.0.50727\installUtil.exe版

    不起作用(在其他框架版本中替代: v1.1.4322 (仅限32位,因此不会出现此问题)和 v4.0.30319 如上所述)。

    显然,正如另一个答案所涵盖的,其中一个还需要 installutil 您正在运行的是运行安装程序的exe/dll文件的>=(最好是=)。

    最后,请注意 in Visual Studio 2010, the tooling will default to generating x86 binaries ( rather than Any CPU as previously )

    Complete details of System.BadImageFormatException (说唯一的原因是不匹配的比特数确实是一个严重的过于简单化!).

    另一个原因是 BadImageFormatException 在一个 X64 安装人员就是那个 in Visual Studio 2010, the default .vdproj Install Project type generates a 32-bit InstallUtilLib shim, even on an x64 system (搜索页面上的“64位托管自定义操作引发System.BadImageFormatException异常”)。

        2
  •  15
  •   Ruben Bartelink    6 年前

    确保路径中的第一个是最新的框架(用它编译应用程序的框架)。这为我解决了问题。(发现) on a forum )

        3
  •  8
  •   Ruben Bartelink    6 年前

    我认为您正在使用该工具的64位版本安装32位应用程序。 我今天也面临这个问题,并使用这个框架路径来迎合。

    C:\Windows\Microsoft.NET\Framework\v4.0.30319

    它应该可以很好地安装32位应用程序。

        4
  •  6
  •   Community CDub    8 年前

    好的,这就是我遇到的问题,而且,解决它的方法,似乎与上述问题非常相关。

    我正在使用Visual Studio 2010学习版。我写了一个测试服务,但实际上没有做任何事情。这只是后来真正的练习。

    我编写了该服务并尝试使用 installutil.exe 得到以下错误:

    System.BadImageFormatException:无法加载文件或程序集“文件名.exe”或其依赖项之一。试图加载格式不正确的程序。

    到目前为止和原作者一样。

    Ruben's observation 上面关于Visual Studio 2010的32位输出是这里的救世主。

    我使用了64位版本的 安装程序EXE 当然,Visual Studio 2010构建的输出是32位的。只需在这里添加一点额外的值,就可以找到最新.NET框架的32位版本以及 安装程序EXE C:\Windows\Microsoft.NET\框架 文件夹。使用此版本的 安装程序EXE 解决了我的问题;服务安装没有障碍!

    我希望这能帮助其他人。

        5
  •  1
  •   Community CDub    8 年前

    如果它对任何人都有帮助,我可以使用 this answer 类似的问题,但我没有从使用installUtil.exe中获得异常。

        6
  •  0
  •   dermot kirk    9 年前

    我也有同样的问题。我使用标准命令执行。它正在调用针对x86测试运行的x64 ro。我需要指定x86,而不是nunit runner的x64版本。

        7
  •  0
  •   Daniel D    8 年前

    总而言之,为了在64位系统上成功安装64位服务,必须将build和project\build\platform都设置为x64。

        8
  •  0
  •   GregN    7 年前

    我的问题不同。这是在我的Windows 7计算机意外关闭之后发生的。我做了一个干净的解决方案,它按预期运行。

        9
  •  0
  •   SohamC    6 年前

    在尝试了上述所有解决方案后,我发现 PlatformTarget 以某种方式增加 AnyCPU 我的项目中的配置。

    <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>
    

    拆线对我很有用。

        10
  •  0
  •   Soleil    6 年前

    如果有此消息 现场试验 但是 不在单元测试中 ,这是因为所选程序集被动态复制到 $(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\ . 但有时很少有集会可以 未选中 例如,在互操作C++/C项目中,VC++DLL。

    后建成 xcopy 不会更正问题,因为复制的文件将被实时测试引擎擦除。

    迄今为止(2018年12月28日)唯一的解决方法是避免进行实时测试,并使用该属性在单元测试中执行所有操作。 [TestCategory("SkipWhenLiveUnitTesting")] 应用于测试类或测试方法。

    此错误出现在任何Visual Studio 2017(截至15.9.4)中,需要由Visual Studio团队解决。

        11
  •  0
  •   Suraj Rao Raas Masood    6 年前

    我在使用vs 2015的winforms项目中遇到了这个问题。我的解决方案是:

    1. 右键单击项目
    2. 选择属性
    3. 选中“首选32位”
    4. 平台目标:任意CPU
        12
  •  0
  •   nobody    6 年前

    目标生成x64目标服务器托管IIS 64位

    右键单击运行网站/Web应用程序的AppPool宿主并设置 启用32位应用程序=假。

    enter image description here