System.BadImageFormatException:无法加载文件或程序集(来自installutil.exe)
104954 观看
13回复
我正在尝试使用InstallUtil.exe安装Windows服务,并收到错误消息
System.BadImageFormatException:无法加载文件或程序集'
{xxx.exe}
'或其依赖项之一。尝试加载格式不正确的程序。
是什么赋予了?
编辑:(不是由OP)从dup获取的完整消息获得更多点击[对于googleability]:
作者: Epaga 的来源 发布者: 2019 年 5 月 29 日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'或其依赖项之一。尝试加载格式不正确的程序。
回应 (13)
134像
一些更详细的完整性,以防它有助于某人......
请注意,目前这种异常的最常见原因是尝试将32位特定的(/platform:x86
)DLL加载到64位进程中,反之亦然(即将64位特定的(/platform:x64
)DLL 加载到进程中32位)。如果您platform
是非特定的(/platform:AnyCpu
),则不会出现这种情况(假设没有引用的依赖项具有错误的位数)。
换句话说,运行:
%WINDIR%\ Microsoft.NET \框架\ V2.0.50727 \ installutil.exe
要么:
%windir%\ Microsoft.NET \ Framework 64 \ v2.0.50727 \ installutil.exe
将无法工作(在其他框架版本中替代:( v1.1.4322
仅限32位,因此不会出现此问题)并且v4.0.30319
如上所述)。
显然,正如另一个答案中所述,还需要installutil
您运行的.NET版本号> =(最好是=)您运行安装程序的EXE / DLL文件的版本号。
最后请注意,在Visual Studio 2010中,工具将默认生成x86二进制文件(而不是以前的任何CPU)。
System.BadImageFormatException的完整细节(说唯一的原因是不匹配的苦味实际上是一个粗略的过度简化!)。
BadImageFormatException
在x64安装程序下的另一个原因是,在Visual Studio 2010中,默认的.vdproj
Install Project类型生成32位InstallUtilLib
填充程序,即使在x64系统上也是如此(搜索“64位托管自定义操作抛出System.BadImageFormatException异常”)这页纸)。
9像
我认为您使用该工具的64位版本来安装32位应用程序。我今天也遇到了这个问题,并使用此框架路径来满足。
C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319
它应该安装你的32位应用程序就好了。
作者: Sachin Kalia 发布者: 05.07.2013 07:356像
好吧,这就是我遇到的问题,而且修正了它,似乎与上述问题非常相关。
我正在使用Visual Studio 2010 Express。我写了一个没有真正做任何事情的测试服务。这只是后来真正的实践。
我编写了该服务并尝试使用它安装它installutil.exe
并收到以下错误:
System.BadImageFormatException:无法加载文件或程序集“{filename.exe}”或其依赖项之一。尝试加载格式不正确的程序。
到目前为止与原作者相同。
Ruben关于Visual Studio 2010的32位输出的观察是这里的救世主。
我使用的是64位版本,installutil.exe
当然,Visual Studio 2010版本的输出是32位。只是在这里添加一些额外的价值,你可以找到最新的.NET Framework和32位版本的关联installutil.exe
在C:\ WINDOWS \ Microsoft.NET \框架文件夹。使用此版本installutil.exe
修复了我的问题; 服务安装顺利!
我希望这可以帮助其他人。
作者: James Crowther 发布者: 23.01.2013 08:431像
1像
我使用VS 2015的WinForms项目遇到了这个问题。我的解决方案是:
- 右键单击Project
- 选择属性
- 检查“首选32位”
- 平台目标:任何CPU
0像
我遇到过同样的问题。我使用标准命令执行。它正在调用X64测试对抗X86测试。我需要指定X86而不是nunit-runner的X64版本。
作者: dermot kirk 发布者: 27.01.2016 11:570像
0像
0像
在尝试了所有提到的解决方案之后,我发现在我的项目.csproj中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>
删除线为我工作。
作者: SohamC 发布者: 15.08.2018 06:490像
如果在实时测试中有此消息,但在单元测试中没有,那是因为选定的程序集即时复制到$(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团队解决。
作者: Soleil 发布者: 28.12.2018 10:080像
目标构建x64目标服务器托管IIS 64位
右键单击appPool托管运行网站/ Web应用程序并设置启用32位应用程序= false。
作者: VK_217 发布者: 18.01.2019 07:500像
我今天遇到了这个问题。就我而言,我的应用程序的(必须是64位的DLL参考)平台目标设置为AnyCPU
,但Prefer 32-bit
复选框根据目标平台部分被默认勾选。这是问题,并且在取消选中之后一切正常Prefer 32-bit
。
来自类别的问题 :
- .net 如何计算C#中某人的年龄?
- .net 你如何按价值排序字典?
- .net 如何从Type创建新的对象实例
- .net 在.NET中使用后将对象设置为Null / Nothing
- windows-services 更轻松地调试Windows服务
- windows-services 以编程方式提升进程权限?
- windows-services 我是作为一种服务运行的
- windows-services Windows服务如何以编程方式自行重启?
- x86 x86中“非暂时”内存访问的含义是什么?
- x86 将3D数学转换为SSE或其他SIMD需要多少加速?
- x86 System.BadImageFormatException:无法加载文件或程序集(来自installutil.exe)
- x86 EBP帧指针寄存器的用途是什么?
- 64bit 你如何编译OpenSSL for x64?
- 64bit x64上的sizeof(int)?
- 64bit OpenProcess在64位平台上返回access_denied
- x86-64 LEA指令的目的是什么?
- x86-64 在OSX10.6上反汇编到x86_64(但使用_Intel_语法)
- x86-64 为什么Visual Studio使用xchg ax,ax