簡體   English   中英

.NET程序集和CPU架構之間有什么關系?

[英]What is the relationship between a .NET assembly and CPU architecture?

.NET程序集與“位數”或正確的CPU架構之間的關系是什么? 我認為.NET程序被編譯成CIL (字節碼),並且它們可能最終在不同的體系結構中運行,並且將被及時編譯。 因此,.NET程序集應該沒有“位”。

但現實世界似乎並不那么簡單。 我在64位計算機上測試程序,並經常在我的程序和另一個.NET庫之間遇到奇怪的兼容性問題。 所以我的問題是:

  • .NET二進制文件能否以某種方式內置CPU架構?
  • 在什么條件下/應該發生這種情況?
  • 在64位計算機上,什么樣的事件鏈導致.NET代碼在32位環境中運行?

順便說一句:這個問題( 32位和64位.NET(4)應用程序之間的差異 )及其最佳答案理所當然地認為.NET應用程序有一定的重要性。 但我認為無法在Visual Studio中設置架構。

你提到的問題是理所當然的,因為它是真的:.NET應用程序是專為不同的CPU架構而構建的(在很多情況下也可以為“混合平台”構建,如果可用的話,它將運行64位,32-否則)。

默認情況下,此選項未在Visual Studio中清晰顯示,但“解決方案平台”下拉列表可以添加到標准工具欄,默認情況下與“解決方案配置”下拉列表一起添加。

此外,如果從配置下拉列表中選擇“配置管理器”,您將看到當前的平台,並可以編輯解決方案中每個程序集的設置。

具體回答你的三顆子彈:

  • 每個.NET二進制文件都內置了CPU架構,即使它是“任何CPU”
  • 每次構建都會發生這種情況 它是非選擇性的
  • 如果出現以下情況,64位計算機將以32位運行.NET程序集:
    • 它是顯式構建的x86
    • 調用程序集是x86(如果引用它的程序集是32位,“任何CPU”dll將以32位運行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM