我们有一个Windows服务,它使用从一堆不同的.NET项目中生成的dll。其中一个项目依赖于在32位机器上编译的dll。
我们刚刚将Windows服务移动到64位计算机。默认情况下,.NET项目尝试以64位程序集运行(因为它们在64位计算机上运行)。但是,我可以通过将平台目标指定为“x86”而不是“任何CPU”来强制单个项目作为32位程序集运行。
我的问题是:是否需要强制所有.NET项目作为32位程序集运行? 32位汇编和64位汇编可以一起运行吗?
答案 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位模式下运行