是的,你需要确保你把所有的DLL的64位版本你参考。不,依靠你的32位测试绝对不安全! (您已经知道了吧?)
我们几年前移植我们的系统为64位,由几件事情感到惊讶:
- 一般港口是容易得多,比我们此前的预期在最奇怪的地方出现
- 最困难的问题,我们所想象的地方将是直接的
- 后续构建已经无故障
一些unexpe的例子cted和棘手的问题...
我们的系统包括一个Visual Studio项目向导。 Visual Studio只有32位,但我们的客户可能仍然希望定位到64位机器。所以我们的x86安装程序必须包含我们的x64程序集。通常没问题 - 安装程序发现我们在x86项目中包含了x64文件,发出警告,但仍在继续。但是其中一个程序集包含混合托管/非托管代码,我们的安装程序无法处理该代码。 (我们当时正在使用Visual Studio安装程序,但自那时起我们一直在成长。)因此,我们编写了一个工具,对64位DLL进行十六进制编码并将其写入文本文件,将该文件包含在安装程序中项目,然后有一个自定义安装程序步骤,逆转编码并恢复DLL。
我们的项目向导依赖于一些COM DLL,它们必须在32位注册表中注册,因为Visual Studio是32位的。但在x64上,我们的安装程序以64位运行,因此会调用64位regsvr32.exe,它将DLL注册到错误的位置。所以我们编写了一个在32位注册表中注册DLL的64位工具。
恰巧我们的向导需要知道我们产品的安装位置。所以我们的安装程序将这些信息写入注册表。但在x64上,安装程序以64位运行并将该信息写入64位注册表,但我们的向导以32位运行在Visual Studio中,因此无法读取注册表的这一部分。所以我们再一次写了一个特殊的工具让安装程序将信息写入注册表的两端。
这些问题可能听起来不那么糟糕。毕竟,解决方案非常整齐,非常小巧。但考虑一下:我们的系统是混合托管/非托管COM/C++和C#,第三方库如Boost,Apache HTTPd和OpenSSL,所有这些都必须重新编译。我原本以为这是很难的部分,但只花了两天的时间来移植代码的相关部分并让项目编译。然后花了整整一周的时间来了解和解决我上面描述的问题。话虽如此,但整个港口只用了一周半的时间,我仍感到非常惊喜。
一个离别的想法......你说你想利用你的64位机器的力量。那是什么意思?非常粗略地说,除非你需要访问超过2GB的RAM,否则你将无法从64位运行中获益。
可能重复的[C#开发的64位东西](http://stackoverflow.com/questions/ 1889941/64-bit-stuff-for-c-sharp-development) – 2012-03-15 22:49:01
如果您的应用程序由纯粹的.NET程序集组成,那么您可能会考虑将目标设定为AnyCPU而不是32位或64位。然后,您的应用程序将在目标机器上使用最合适的运行时版本(32位或64位)。但是下面答案中的测试评论依然存在。 – Glenn 2012-03-16 02:47:57