C# 从32位Windows服务切换到64位Windows服务时有什么问题吗?

C# 从32位Windows服务切换到64位Windows服务时有什么问题吗?,c#,.net,windows,windows-services,C#,.net,Windows,Windows Services,我有几个针对32位的Windows服务,但都是在64位操作系统上运行的。我想从64位进程的优势中获益,特别是从内存的角度。除了将平台目标从32位更改为64位之外,还有什么需要我做或注意的吗?请确保您在Windows服务中使用的所有引用也都在“Any”目标下编译,否则在64位服务中加载32位程序集时会遇到问题。答案取决于。你说: 我有几个针对32位的Windows服务,但都是在64位操作系统上运行的 如果您以x86为目标构建应用程序,那么即使在64位计算机上,您仍然可以运行32位 如果要为AnyC

我有几个针对32位的Windows服务,但都是在64位操作系统上运行的。我想从64位进程的优势中获益,特别是从内存的角度。除了将平台目标从32位更改为64位之外,还有什么需要我做或注意的吗?

请确保您在Windows服务中使用的所有引用也都在“Any”目标下编译,否则在64位服务中加载32位程序集时会遇到问题。

答案取决于。你说:

我有几个针对32位的Windows服务,但都是在64位操作系统上运行的

如果您以x86为目标构建应用程序,那么即使在64位计算机上,您仍然可以运行32位

如果要为AnyCPU构建服务,则exe的行为如下:

  • 在32位系统上,它将尝试作为x86加载,并且所有组件必须是x86或AnyCpu

  • 在64位系统上,它将尝试将x86构建的程序集作为x86加载,并且所有组件必须仅为x86。如果您有一些COM或第三方,您可能需要为x86编译

  • 在64位系统上,它会将任何CPU加载到x64上下文中,最好不要为x86构建依赖项。此外,您还可以为x64构建优化代码


所以,为了回答您的具体原话,您需要(至少)以任何CPU或x64为目标,以便在x64上下文中运行您的应用程序。如果它是针对x86构建的—您仍然在32位上下文中运行

如果您使用的是严格管理的资源,那么转换应该是非常轻松的。如果在非托管库外部引用,可能会遇到一些问题。一如既往,YMMV。如果你想确定的话,就测试它。切换到任何CPU。这样你就不需要编译两次了,我现在处于.NET4.5+的“任意CPU-32位”模式。我只需要取消选中“32位优先”吗checkbox@BrianDavidBerman是的-它现在运行32位。这就是为什么感谢的答案!我对您链接的答案感到困惑,因为所有配置似乎都不会导致64位进程。@Briandaviberman我认为,我的答案非常清楚运行x64代码需要什么。-所有组件必须是AnyCPU(无其他选项)或x64