我已经尝试将服务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中从源代码重新构建)、StructureMap、NoRM (MongoDB)、AutoMapper、Newtonsoft.Json以及我的团队构建的许多其他DLL文件。
发布于 2010-07-23 15:21:17
您试过在grapevinesystemservice.exe的配置文件中设置grapevinesystemservice.exe吗?正如0xA3所提到的,它似乎没有设置为使用4.0。
<startup>
<requiredRuntime version="v4.0.20506" safemode="true"/>
</startup>
发布于 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。
发布于 2011-06-09 19:12:36
在使用installutil安装服务时,我也看到了上面的问题。问题是,我使用来自MSFT的.NET 4框架安装了dotNetFx40_Full_setup.exe。安装程序不向系统PATH
环境变量添加对4.0Framework的引用。
在PATH
环境变量中添加以下内容:
c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319;c:\WINDOWS\Microsoft.NET\Framework\v3.5
这在安装期间和运行时都适用于我。
https://stackoverflow.com/questions/3319367
复制相似问题