为什么.NET开发人员提供32位/64位版本的.NET组件?

问题描述 投票:0回答:2

evey时不时地看到.NET组件的x86和x64版本。考虑SharePoint的以下Web部分。为什么开发人员不只是提供一个版本,而让JIT编译器整理其余版本?当我看到这些产品时

任期

从我在下面得到的内容,X86和X64构建都提供了以下一个或多个原因:

    开发人员希望避免进行打键并创建其代码的本地图像,并使用ngen.exe.
  1. 的工具来定位给定的体系结构。

  2. 组件包含平台特定的com调用,因此毫无意义地将其构建为AnyCPU。在这些情况下,构建针对不同平台的目标可能包含不同的代码。
  3. 组件可以使用PINVOKE包含Win32呼叫,而PinVoke不会被JIT重新映射,因此构建应针对其绑定的平台。
  4. 如果他们使用特定的non-.net API,那么可能有两个代码库,一个完美的示例是com控件。 正如您提到的那样,ngen也是另一个很好的理由。
.net 64-bit jit
2个回答
6
投票
当您编译.NET应用程序时,您必须在构建设置中选择平台目标。选择是Anycpu,x86和x64。 一个常见的错误是在项目中指定ANYCPU,其中包括为X86编译的本机DLL。在64位计算机上运行时,这将导致错误,这是在64位机器上测试的一个充分理由。

因此,要支持其他依赖性强迫为X86或X64建造的人,大会都提供了两者。

COM在32/64位边界上处理并拆除整理。 但是,它不能为将替代类型的二进制类型的二进制装置带入公寓的错误提供任何支持。 Many组件依赖于本机代码(例如,大多数SQL驱动程序以C或C ++编写)。 对于使用P/Invoke的任何东西,这都是非常明显的。因此,具有不同的指针编译和分布式的指针意味着64位版本的软件包很可能包含64位本机DLL,并且32位版本可能包含32位本机DLL。 即使32和64位版本是从同一代码编译的,也是如此。

6
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.