【C#】-目標平臺×86、×64、Any CPU的區別

VisionCode發表於2024-07-21

簡單來說,
×86平臺:
將程式集編譯為由相容×86的32位公共語言執行庫執行。
×64平臺:
將程式集編譯為由支援AMD64或EM64T指令集的計算機上的64位公共語言執行庫執行。
Any CPU:
(預設值)將程式集編譯為在任意平臺上執行。
ltanium:將程式集編譯為由採用ltanium處理器的計算機上的64位公共語言執行庫執行。

若你的啟動專案,即主程式(編譯出來的exe檔案的)是×86平臺下編譯的,而它所依賴的一個專案(或動態連結庫)是由×64位平臺編譯出來的,則會提示“未能載入檔案或程式集……或它的某一個依賴性。檢視載入格式不正確的程式。”之類的錯誤。這是因為32位程式不能載入64位的dll,更不能呼叫其他的類、方法和物件等。反之,若主程式是由×64平臺編譯出來的,而dll是×86的呢……當然也是不行的。所以,dll和主程式的生成平臺要一致。
若主程式是在Any CPU平臺型編譯的,那麼編譯dll的平臺必須要和編譯主程式的作業系統一致才行。若主程式是在×86或者×64平臺下編譯的,那麼dll就必須要和主程式一致。

總的來說,
1.主程式是Any CPU、×86、×64平臺編譯的,依賴專案是Any CPU平臺編譯的。
2.主程式的編譯平臺和依賴專案的編譯平臺是一樣的。

雖說Any CPU編譯出來的程式取決於作業系統,但是由Any CPU編譯出來dll則取決於呼叫它的主程式,即若主程式是32位的,那麼dll也是32位的,若主程式是64位的,那麼dll就是64位的。所以dll一般採用Any CPU平臺編譯,而主程式一般採用x86平臺編譯。

Debug和Release的區別?
Debug通常稱為除錯版本,它包含除錯資訊,並且不作任何最佳化,便於程式設計師除錯程式。Release稱為釋出版本,它往往是進行了各種最佳化,使得程式在程式碼大小和執行速度上都是最優的,以便使用者很好的使用。所以一般都是用Release來打包發不程式,另外,Release打包出來的程式也相對來說會小一些。

相關文章