如果.NET程序直接或间接需要调用依赖于平台的/ native / un managed代码,它可能会崩溃。
在安装了Windows 7 64位的新笔记本电脑并尝试使用SQLite数据库进行开发之后,我想到了这个32位/ 64位主题。
System.Data.SQLite
包含托管代码和非托管代码。有一个32位版本和一个64位,两者都有相同的文件名但不同的大小,你的EXE必须使用正确的。
要使它更复杂:我的Visual Studio 2010 debugger is a 32-bit application,所以当使用GAC中的“System.Data.SQLite-64bit”时我无法调试!
作为.NET开发人员,我们需要指南/技术诀窍/最佳实践。
收集此类信息的最佳位置是此网站(https://stackoverflow.com/)。
所以,请分享您的想法和已知问题,这些问题可以作为最佳做法或指南 在32/64 / anyCPU dotnet世界中生存。
我赞成每个“答案”一个问题/技巧 所以它可以很容易地评论/更新/引用。 - 随意给几个“答案”。
我也将分享自己的知识作为这个问题的答案。
答案 0 :(得分:3)
提供额外的“仅x86”main.exe可以在涉及本机代码时更轻松
阅读anycpu-exes-are-usually-more-trouble-then-they-re-worth后,我意识到提供额外的“仅限x86”的main.exe可以让生活更轻松。
由于Windows 7 64位可以执行x86-32位应用程序,x86程序将在大多数.NET系统上运行 (但不适用于非Intel Mono系统)。
只要可以轻松调试Windows 7 64-bit Visual Studio 2010 debugger is a 32-bit application x86应用程序。
除了主要的EXE和CPU特定的DLL之外,x86版本拥有尽可能多的“任何CPU”DLL。
对于无法运行x86代码或需要大量内存的机器,您可以提供额外的“任何CPU” EXE版本。此版本需要进行适当的安装,以确保使用正确的平台特定代码。
Visual Studio 2010 How to: Configure Projects to Target Platforms介绍了如何将平台设置为x64。与您定位x86的方式相同。