首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows在Windows 2008上抛出System.BadImageFormatException,x64,.NET 4从3.5迁移

Windows在Windows 2008上抛出System.BadImageFormatException,x64,.NET 4从3.5迁移
EN

Stack Overflow用户
提问于 2010-07-23 15:00:25
回答 4查看 7.9K关注 0票数 5

我已经尝试将服务EXE文件编译为AnyCPU、x86和x64。它在我的Windows7 x64盒上工作。我正在安装.NET 4版本的installutil。

当我启动服务时,我会得到一个错误。它什么也没说,但它确实指向了加载到哪些模块。可能感兴趣的:

LoadedModule=D:\yellowbook\grapevine_service\grapevinesystemservice.exe LoadedModule3.=C:\Windows\system32\KERNEL32.dll LoadedModule4.=C:\Windows\system32\KERNELBASE.dll LoadedModule9=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll LoadedModule17=C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll LoadedModule18=C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_88dce9872fb18caf\MSVCR80.dll LoadedModule22=C:\Windows\assembly\NativeImages_v2.0.50727_64\mscorlib\9a017aa8d51322f18a40f414fa35872d\mscorlib.ni.dll

我可以使用命令行开关作为控制台应用程序运行此服务,这将产生以下结果:

未处理的异常: System.BadImageFormatException:无法加载文件或程序集“grapevinesystemservice.exe”或其依赖项之一。此程序集是由比当前加载的运行时更新的运行时生成的,无法加载。文件名:“grapevinesystemservice.exe”

我尝试使用注册表攻击来强制使用最新的运行时。没有效果。我已经查看了反射中安装的EXE文件,以确保它没有被构建服务器所吞食,但它的目标是4.0.30319。我的本地、构建和测试服务器都有30319作为.NET 4版本。没有人有测试版/RC版。

它们没有在加载模块中列出,但我还使用了log4net (在.NET 4中从源代码重新构建)、StructureMapNoRM (MongoDB)、AutoMapper、Newtonsoft.Json以及我的团队构建的许多其他DLL文件。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-23 15:21:17

您试过在grapevinesystemservice.exe的配置文件中设置grapevinesystemservice.exe吗?正如0xA3所提到的,它似乎没有设置为使用4.0。

代码语言:javascript
运行
复制
<startup>
  <requiredRuntime version="v4.0.20506" safemode="true"/>
</startup>
票数 6
EN

Stack Overflow用户

发布于 2010-07-23 15:07:01

您的一个依赖DLL文件尚未用AnyCPU编译。有关如何检查它们的详细信息,请参见堆栈溢出问题https://stackoverflow.com/questions/270531/how-to-determine-if-a-net-assembly-was-built-for-x86-or-x64

票数 3
EN

Stack Overflow用户

发布于 2011-06-09 19:12:36

在使用installutil安装服务时,我也看到了上面的问题。问题是,我使用来自MSFT的.NET 4框架安装了dotNetFx40_Full_setup.exe。安装程序不向系统PATH环境变量添加对4.0Framework的引用。

PATH环境变量中添加以下内容:

代码语言:javascript
运行
复制
c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;c:\WINDOWS\Microsoft.NET\Framework\v3.5

这在安装期间和运行时都适用于我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3319367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档