【问题标题】:Platform agnostic .NET bitness - from OS or calling application?与平台无关的 .NET 位数 - 来自操作系统或调用应用程序?
【发布时间】:2010-10-07 19:51:42
【问题描述】:
我知道平台无关的 .NET 应用程序“浮动”到操作系统的位数。但是,从非 .NET 应用程序调用的 .NET 程序集是一个库而不是可执行文件呢?
我们有一个 .NET DLL,它是 SQL Server 2005 的 CLR 扩展存储过程。目前它与平台无关。从 64 位 Windows 上运行的 32 位 SQL Server 实例调用扩展存储过程时会发生什么?
【问题讨论】:
标签:
.net
64-bit
32-bit
platform-agnostic
【解决方案1】:
这取决于程序集的编译目标。如果您在项目构建选项中选择“任何 CPU”或“x86”,则 DLL 应作为 32 位实例运行。如果您选择“x64”,它将引发异常(内存中的 BadImageFormatException)。
在 Windows 下,32 位进程无法加载 64 位 DLL,因此 SQL Server 将在其进程内运行 32 位版本的 .net 运行时。因此,即使在 64 位机器上,您的 .net 程序集也将作为 32 位运行。