当目标CPU为“Any”并且程序集有两个版本x32和x64时会发生什么?

时间:2012-12-27 05:19:02

标签: .net visual-studio sqlite .net-assembly cpu-architecture

假设我们有一个针对 Any CPU 的应用程序,但此应用程序使用具有两种风格的第三方程序集,32位和64位。必须使用哪一个?

如果“Any”选项以32位和64位运行应用程序,我该如何为它提供两个版本的程序集?

我的特殊需求是.NET SQLite驱动程序。

2 个答案:

答案 0 :(得分:2)

真的很简单:

  • 如果你的应用程序针对“任何CPU”,所有条件相同,该应用程序可以在32位或64位系统上运行。

  • 如果您的“任何CPU”应用程序依赖于32或64位dll,如果它尝试在缺少依赖关系的系统上运行,则会失败。

  • 如果你想“到处跑”,那么你最好的选择可能是针对32位(而不是“任何CPU”)。除非您对64位有特殊要求,否则您确实不需要64位。

  • 如果您遇到在64位运行应用程序的“BadImageExceptions”,您可能希望考虑“自定义操作”:

    http://adamhouldsworth.blogspot.com/2010/10/64bit-custom-actions.html

答案 1 :(得分:0)

因为您最有可能静态引用程序集,所以需要两个版本的应用程序 - 一个编译为x86,另一个编译为x64。

我不是特别了解Sqllite驱动程序,但通常使用x86版本的驱动程序就足够了,这仍然可以通过WOW32仿真机制在x64系统上运行。这意味着您只需编译一个版本(x86)即可安装到x86和x64系统上(如previous question上的Mark Hall所述)。如果要使用x64特定功能(如更大的数据类型,更多可用的RAM等),则只需编译x64。