【发布时间】:2011-03-20 03:53:00
【问题描述】:
我尝试将服务 EXE 文件编译为 AnyCPU、x86 和 x64。它适用于我的 Windows 7 x64 机器。我正在使用 installutil 进行安装,.NET 4 版本。
当我启动服务时,我得到一个错误。它什么也没说,但它确实指出了加载了哪些模块。可能感兴趣的人:
LoadedModule[0]=D:\yellowbook\grapevine_service\grapevinesystemservice.exe LoadedModule3=C:\Windows\system32\KERNEL32.dll LoadedModule4=C:\Windows\system32\KERNELBASE.dll LoadedModule[9]=C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll LoadedModule[17]=C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll LoadedModule[18]=C:\Windows\WinSxS\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_88dce9872fb18caf\MSVCR80.dll LoadedModule[22]=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 中重建)、StructureMap、NoRM (MongoDB)、AutoMapper、Newtonsoft.Json ,以及我的团队构建的许多其他 DLL 文件。
【问题讨论】:
-
如果服务启动失败,事件日志通常包含附加信息。你检查了吗?您是否还确保所有引用的程序集都针对 .NET 4.0 具有正确的位数?您的服务似乎使用的是 .NET 2.0 版本的 mscorlib。
-
是的,事件日志令人惊讶地没有任何有用的东西,除了列出已加载模块的转储文件的链接......我没有包括那个只是因为问题已经很长了我害怕把人吓跑。 :-) 不过感谢您的指点。
-
只是检查问题出在您的项目还是您的服务器上:一个简单的、新创建的 .NET 4.0 服务是否安装和运行完美?
-
这将是我的下一个计划。我拖了后腿,因为安全性使得从这里到那里获取代码变得如此困难。如果这个 .net 框架修复(见下文)不能修复它,那是我的下一个计划。再次感谢另一个好建议。实际上,如果事实证明我的框架安装失败了,那么您的第一个答案也将是 100% 正确的。
标签: .net .net-3.5 windows-services .net-4.0 windows-server-2008