.net System.BadImageFormatException:无法加载文件或程序集(从installutil.exe)
我正在尝试使用InstallUtil.exe安装Windows服务,并收到错误消息 System.BadImageFormatException:无法加载文件或程序集“.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
{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项目中遇到此问题。我的解决办法是:
托管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