.NET,“Any CPU/64Bit(x64)/32Bit(x86)”最佳实践、技巧和窍门

8
如果一个.NET程序需要直接或间接调用平台相关/本地/非托管代码,它可能会崩溃。
在我安装了Windows 7 64位系统的新笔记本电脑上尝试使用SQLite数据库后,这个32位/64位主题浮现在我的脑海中。
System.Data.SQLite包含托管代码和非托管代码。有32位版本和64位版本。两者文件名相同,但大小不同,你的EXE文件必须使用正确的版本。
更加复杂的是:我的Visual Studio 2010调试器是32位应用程序,因此当使用“System.Data.SQLite-64bit”时,我无法进行调试!
作为.NET开发人员,我们需要指导、技能和最佳实践。

我知道的收集这种信息的最佳地点是此网站

因此,请分享您的想法和已知问题,这些问题可以作为在32/64/anyCPU .NET世界中生存的最佳实践或指南。

我更喜欢每个“答案”一个问题/技巧,这样可以轻松地进行评论/更新/引用。

  • 随意提供几个“答案”。

我也会将自己的知识作为回答此问题的答案分享。


尽管显然接受的答案为您提供了有关.NET项目位数的信息,但我想提醒您,有一个完全支持位数的友好解决方案,名为C# SQLite http://code.google.com/p/csharp-sqlite/. 它是100% C#编写的。 :) - Lex Li
1个回答

4
提供额外的“仅限x86”的main.exe可以在涉及本机代码时使生活更轻松。
阅读完anycpu-exes-are-usually-more-trouble-then-they-re-worth之后,我意识到提供额外的“仅限x86”的main.exe可以使生活更轻松。
由于Windows 7 64位可以执行x86-32位应用程序,因此x86程序将在大多数.NET系统上运行(但不在非英特尔Mono系统上)。
只要Windows 7 64位Visual Studio 2010调试器是32位应用程序,x86应用程序就可以轻松地进行调试。
x86版本具有尽可能多的“任何CPU” DLL,除了主EXE和特定于CPU的DLL。
对于无法运行x86代码或需要大量内存的机器,您可以提供额外的“任意CPU”EXE版本。此版本需要适当的安装以确保使用正确的平台特定代码。 Visual Studio 2010 How to: Configure Projects to Target Platforms描述了如何将平台设置为x64。同样的方式,您也可以针对x86目标。

第一个链接(实际上)已经失效了。它重定向到一个通用页面。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接