gpt4 book ai didi

.net - 为什么 .net 程序集对于不同的体系结构会有所不同?

转载 作者:行者123 更新时间:2023-12-03 14:41:07 27 4
gpt4 key购买 nike

我可以为 x86 和 x64 构建我的 C# 项目。为什么?我认为它会生成一个特殊的代码,它根本不是特定于平台的。

最佳答案

首先,让我坦率地说,我不知道这里的整个故事,我将用我认为我知道的来回答。如果有人能告诉我我错在哪里,我会很乐意删除或更改我的答案。

按照我的理解,这个设置是一个标志,上面写着“程序集应该在这种类型的架构中运行”。这适用于 x86 和 x64 设置。 MSIL/.NET 设置只是说“我不在乎,我可以在任何一个上运行,所以选择最佳或可用的那个。”

例如,您可能通过 P/Invoke 调用 Win32 API 函数,在这种情况下,程序集将无法在 x64 上运行,您应该将其标记为 x86。

因此,如果我的理解是正确的,那么这三个标志是如何在不同平台上运行程序集的(注意,是主程序集、程序集决定了这一点,而不是每个单独的程序集):

Setting        x86      x64  <-- Platform (CPU/OS)
MSIL/.NET 32-bit 64-bit
x86 32-bit 32-bit
x64 N/A (*) 64-bit

x86 上 x64 程序集的 N/A 意味着该程序集不会加载,如果您尝试,您将收到异常。

另请注意,涉及 x86 和 x64 的冲突设置将使您的程序在某一点或另一点崩溃。如果主程序集设置为 x86,它将在 32 位和 64 位操作系统上作为 32 位进程运行,任何加载标记为 x64 的程序集的尝试都将失败。同样,如果主程序集设置为 x64,则它只能在 64 位操作系统上运行,任何加载设置为 x86 的程序集的尝试都将失败。

MSIL 主可执行程序集将在 32 位操作系统上作为 32 位运行(就像它被设置为 x86,具有上述故障点,)和在 64 位操作系统上作为 64 位运行(就像如果它设置为 x64,具有上述故障点。)

显然,通常情况下,如果您不调用标记为特定内容的程序集,并且只要您不执行不能跨 32 位和 64 位移植的 P/Invoke,则您希望使用 MSIL 设置(我不知道这是否有效,如果 P/Invoke 到 win-api 函数将映射到正确大小的 dll。)

由于引用是指针,并且指针在两个平台上存储为本地 x 位地址,根据您拥有的引用数量,您可能会反对只使用 MSIL。但是,您应该在更改设置之前确认这是一个问题。

关于.net - 为什么 .net 程序集对于不同的体系结构会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com