当目标 CPU "Any"并且程序集有两个版本(x32 和 x64)时,会发生什么情况?



假设我们有一个针对任何CPU的应用程序,但是这个应用程序使用第三方程序集,有两种风格,32位和64位。其中哪一个必须使用?

如果"Any"选项同时运行32位和64位的应用程序,我怎么能给它两个版本的程序集?

我的具体需求是一个。net SQLite驱动程序。

真正的简单:

  • 如果你的应用程序的目标是"任意CPU",在所有条件相同的情况下,应用程序可以在32或64位系统上运行。

  • 如果你的"Any CPU"应用程序依赖于32位或64位的dll,如果它试图在一个没有依赖的系统上运行,它将失败。

  • 如果您想要"到处运行",那么您最好的选择可能是瞄准32位(而不是"任何CPU")。除非您对64位有特殊要求,否则您真的不需要64位。

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

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

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

我不是特别了解sqlite驱动程序,但通常使用x86版本的驱动程序应该足够了,这仍然可以通过WOW32仿真机制在x64系统上运行。这意味着您可以只编译一个版本(x86),以便在x86和x64系统上安装(正如Mark Hall在您的上一个问题中提到的)。只有当您打算使用x64特定的特性(如更大的数据类型、更多可用的RAM等)时,才需要为x64进行编译。

最新更新