Windows服务,32位和64位dll

时间:2009-12-04 00:11:30

标签: windows-services 64-bit

我们有一个Windows服务,它使用从一堆不同的.NET项目中生成的dll。其中一个项目依赖于在32位机器上编译的dll。

我们刚刚将Windows服务移动到64位计算机。默认情况下,.NET项目尝试以64位程序集运行(因为它们在64位计算机上运行)。但是,我可以通过将平台目标指定为“x86”而不是“任何CPU”来强制单个项目作为32位程序集运行。

我的问题是:是否需要强制所有.NET项目作为32位程序集运行? 32位汇编和64位汇编可以一起运行吗?

2 个答案:

答案 0 :(得分:1)

我认为只要你没有使用原生模块或任何东西,你可能会很好,但如果你在任何地方假设指针的大小等等,你的代码中仍然会有bug。

  

“如果您有100%类型安全的托管代码,那么您真的可以将其复制到64位平台并在64位CLR下成功运行。”

http://www.hanselman.com/blog/CommentView.aspx?guid=4099df2d-ef01-4f70-a7f7-829eabc36afc

答案 1 :(得分:0)

如果非托管dll上没有不安全的代码和/或引用,您可以安全地使用目标任何CPU编译所有内容。

然后编译的结果与CPU无关 - 由目标机器上的CLR编译得到的IL是JIT编译的,无论机器是什么。

如果该框是64位框,它将被编译为64位CLR到64位指令集,并将很乐意在本机64位模式下运行