[英]C# Directive to indicate 32-bit or 64-bit build
是否有某種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
64位有兩個需要注意的條件。 第一個是OS 64位,第二個是64位運行的應用程序 。 如果您只關心應用程序本身,可以使用以下內容:
if( IntPtr.Size == 8 )
// Do 64-bit stuff
else
// Do 32-bit
在運行時,JIT編譯器可以優化false條件,因為IntPtr.Size屬性是常量。
順便提一下,要檢查操作系統是否為64位,我們使用以下內容
if( Environment.GetEnvironmentVariable( "PROCESSOR_ARCHITEW6432" ) != null )
// OS is 64-bit;
else
// OS is 32-bit
您可以使用#if
指令並將值設置為編譯器開關(或在項目設置中):
#if VISTA64
...
#else
...
#endif
並編譯:
csc /d:VISTA64 file1.cs
編譯64位版本時。
我不確定這是否是您正在尋找的但我檢查IntPtr.Size
以檢測32位與64位運行時。 請注意,這可以告訴您運行時環境,您可能正在WOW64中運行
if (IntPtr.Size == 4)
{
//32 bit
}
else if (IntPtr.Size == 8)
{
//64 bit
}
else
{
//the future
}
我在C#代碼中使用的是IntPtr.Size,它在32位上等於4,在64位上等於8:
string framework = (IntPtr.Size == 8) ? "Framework64" : "Framework";
我知道這是一個老話題,但我最近必須達到相同的結果(即在構建時確定,而不是運行時)
我創建了新的構建配置(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
您可以使用預定義宏在編譯時設置屬性
#if (_WIN64)
const bool IS_64 = true;
#else
const bool IS_64 = false;
#endif
從Build
打開Configuration Manager
。 從那里,您應該能夠設置Active solution platform
並創建專門針對x64,x86或任何CPU的配置。 從那里,您可以根據當前配置有條件地編譯代碼。
請注意,這通常是一個非常糟糕的主意。 .Net程序通常以IL而不是本機代碼的形式分發。 然后,當用戶第一次嘗試運行它時,JIT編譯器會在每台本地計算機上編譯此IL。 通過選擇默認的“任何CPU”,允許JIT編譯器為每台機器進行確定。
這種情況的主要例外是當你依賴32位庫時。 在這種情況下,您不希望JIT編譯器為x64編譯,因為它可能會破壞與庫的互操作。
內置任何內容都無法為您完成此任務。 您可以隨時#define
您自己的符號,並根據需要將其用於條件編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.