是否有某種形式的C#指令的使用開發機(32位或64位),說的東西的影響時使用:C#指令指示的32位或64位建立
if (32-bit Vista) // set a property to true else if (64-bit Vista) // set a property to false
但我想在Visual Studio中這樣做,因爲我有一個應用程序正在處理,需要在32/64位版本的Vista中進行測試。
是這樣的可能嗎?
是否有某種形式的C#指令的使用開發機(32位或64位),說的東西的影響時使用:C#指令指示的32位或64位建立
if (32-bit Vista) // set a property to true else if (64-bit Vista) // set a property to false
但我想在Visual Studio中這樣做,因爲我有一個應用程序正在處理,需要在32/64位版本的Vista中進行測試。
是這樣的可能嗎?
你能在運行時做到嗎?
if (IntPtr.Size == 4)
// 32 bit
else if (IntPtr.Size == 8)
// 64 bit
沒有什麼內置的,會爲你做這個。如果您願意,您可以隨時使用#define
自己的符號並將其用於條件編譯。
您可以使用#if
指令,並將其值設置爲一個編譯器開關(或項目的設置):
#if VISTA64
...
#else
...
#endif
,並用編譯:
csc /d:VISTA64 file1.cs
編譯的64位版本時, 。
使用64位有兩個條件需要注意。首先是64位的OS,其次是運行在64位的應用程序。如果你只關心應用程序本身,你可以使用以下命令:
if(IntPtr.Size == 8)
// Do 64-bit stuff
else
// Do 32-bit
在運行時,JIT編譯器可以優化掉虛假的條件,因爲IntPtr.Size屬性是不變的。
順便提及,以檢查是否OS是64位的,我們使用下面的
if(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432") != null)
// OS is 64-bit;
else
// OS is 32-bit
打開Configuration Manager
從Build
。從那裏你應該可以設置Active solution platform
並創建專門針對x64,x86或任何CPU的配置。從那裏你可以擁有基於當前配置有條件編譯的代碼。
請注意,這通常是一個非常糟糕的主意,但。 .Net程序通常作爲IL而不是本地代碼分發。這個IL然後在用戶第一次嘗試運行時由每個本地機器上的JIT編譯器編譯。通過選擇默認的「任何CPU」,您可以讓JIT編譯器爲每臺機器做出決定。
這種情況的主要例外是當你有一個32位庫的依賴。在這種情況下,您不希望JIT編譯器針對x64進行編譯,因爲它可能會破壞與庫的互操作。
我不知道這是你在找什麼,但我檢查IntPtr.Size
檢測32位與64位運行時間。請注意,這告訴你運行時環境,你可能正在運行WOW64
if (IntPtr.Size == 4)
{
//32 bit
}
else if (IntPtr.Size == 8)
{
//64 bit
}
else
{
//the future
}
我在我的C#代碼中使用的是IntPtr。大小,它在64位等於4對32位和8:
string framework = (IntPtr.Size == 8) ? "Framework64" : "Framework";
您可以使用預定義宏來在編譯設置屬性
#if (_WIN64)
const bool IS_64 = true;
#else
const bool IS_64 = false;
#endif
我知道這是一個老話題,但我最近有以獲得相同的結果(即在構建時確定,而不是運行時)
我在「條件編譯符號」中創建了新的構建配置(x86調試版,x86發行版,x64調試版,x64版本)並設置了BUILD64或BUILD32。框中的每個配置的應用程序屬性。
當我需要做的事情之間架起不同(如改變從一個.dll一些出口x86的方法簽名),然後我用標準的構建指令來實現我所需要的。例如:
#if BUILD64
// 64 Bit version
// do stuff here
#endif
#if BUILD32
// 32 Bit version
// do different stuff here
#endif
在現實中,一種編譯「任何CPU」,而在64位模式會阻止您部署到32位模式,除非MS固定在VS2008這個bug ......但最後,我試過了,你必須指定32位。 – 2009-07-02 20:14:52