2009-12-04 305 views
1

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

我们刚把windows服务移到了64位机器上。默认情况下.NET项目试图以64位程序集运行(因为它们在64位机器上运行)。但是,我可以强制单个项目以32位程序集的形式运行,只需将平台目标指定为“x86”而不是“任何CPU”即可。

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

回答

0

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

编译的结果是CPU不可知的 - 生成的IL是JIT - 由目标机器上的CLR编译,无论机器是什么。

如果盒子是这将是由64位CLR被编译到的64位指令集,并愉快地在原生64位模式

+0

其中引用的是第三方DLL,它似乎在32位机器上正常工作,但折腾64位计算机上的错误。 (即我不能重新编译该DLL,我不能保证它是与目标'任何CPU'编译)基本上解决方案在32位机器上的罚款,但在64位机器apachefop.net抛出的错误“无法加载文件或程序集'apachefop.net试图加载一个格式不正确的程序。”,我想知道是否必须转换单个项目(具有依赖项的项目),或者如果必须转换解决方案中的每个项目。 – Daniel 2009-12-04 01:03:48