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

.net System.BadImageFormatException:无法加载文件或程序集(从installutil.exe),.net,windows-services,x86,64-bit,x86-64,.net,Windows Services,X86,64 Bit,X86 64,我正在尝试使用InstallUtil.exe安装Windows服务,并收到错误消息 System.BadImageFormatException:无法加载文件或程序集“{xxx.exe}”或其依赖项之一。试图加载格式不正确的程序 有什么好处 编辑:(不是通过OP)从dup中提取的完整消息获得更多点击[用于googleability]: C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe C:\xxx.exe Micro

我正在尝试使用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)微软公司。版权所有

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


确保最新的框架(编译应用程序时使用的框架)位于路径的第一位。这为我解决了问题。(已找到)

为完整性提供更多细节,以防对某人有所帮助

请注意,目前出现此异常的最常见原因是,试图将32位特定(
/platform:x86
)DLL加载到64位进程中,反之亦然(即,将64位特定(
/platform:x64
)DLL加载到32位进程中)。如果您的
平台
是非特定的(
/platform:AnyCpu
),则不会出现这种情况(假设没有引用的依赖项具有错误的位)

换句话说,跑步:

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

或:

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

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

显然,正如另一个答案所述,您还需要运行的
installutil
的.NET版本号>=(最好=)运行安装程序的EXE/DLL文件的.NET版本号

最后,请注意()

(说唯一的原因是不匹配的苦味,这实在是一种严重的过分简化!)


x64安装程序下出现
BadImageFormatException
的另一个原因是(在页面上搜索“64位托管自定义操作引发System.BadImageFormatException异常)。

好的,这就是我遇到的问题,并且,修复它的方法似乎与上述问题非常相关

我正在使用Visual Studio 2010 Express。我编写了一个测试服务,但实际上什么都没做。这只是后来的练习

我编写了该服务,并尝试使用
installutil.exe
安装它,但出现以下错误:

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

到目前为止,与原作者相同

上面关于VisualStudio2010的32位输出是这里的救星

我使用了64位版本的installutil.exe,果然,VisualStudio2010版本的输出是32位的。只需在此处添加一点附加值,就可以在C:\Windows\Microsoft.NET\framework文件夹中找到最新.NET framework的32位版本以及相关的
installutil.exe
。使用此版本的installutil.exe修复了我的问题;服务安装顺利


我希望这能帮助其他人

我认为您正在使用64位版本的工具来安装32位应用程序。 我今天也遇到了这个问题,并使用此框架路径来满足需求

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


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

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

总之,为了在64位系统上成功安装64位服务,Build和Project\Build\Platform都必须设置为X64。

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

尝试了所有提到的解决方案后,我发现
平台目标
以某种方式添加到了我的项目.csproj中的
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>

pdbonly
真的
bin\Release\
痕迹
促使
4.
x64

删除该行对我很有效。

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

后期生成
xcopy
不会纠正此问题,因为复制的文件将被实时测试引擎擦除

到目前为止(2018年12月28日),唯一的解决办法是避免现场测试,并在单元测试中使用应用于测试类或测试方法的属性
[TestCategory(“SkipWhenLiveUnitTesting”)]
执行所有操作


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

我在使用VS 2015的WinForms项目中遇到此问题。我的解决办法是:

  • 右键单击项目
  • 选择属性
  • 选中“首选32位”
  • 平台目标:任何CPU

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

    右键单击运行网站/web应用程序的appPool hosting并设置 启用32位应用程序=
    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>Library</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <RazorLangVersion>3.0</RazorLangVersion>
        <UseWpf>True</UseWpf>
      </PropertyGroup>
    
    cd\
    cd "C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
    installutil.exe "C:\XXX\Bin\ABC.exe"
    pause