我可以为x86和x64构建我的C#项目.为什么?我认为它会生成一个特殊的代码,而不是特定于平台的代码.
ang*_*son 22
首先,让我直言不讳地说我不知道这里的整个故事,我将回答我认为我知道的事情.如果有人能告诉我哪里错了,我会很乐意删除或更改我的答案.
我理解它的方式,这个设置是一个标志,说"组件应该在这种类型的架构中运行".这是针对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
Run Code Online (Sandbox Code Playgroud)
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的情况.但是,在更改设置之前,应该验证这是一个问题.
| 归档时间: |
|
| 查看次数: |
5301 次 |
| 最近记录: |