C#指令指示32位或64位构建

在使用开发机器(32位或64位)时,是否存在某种类型的C#指令,该指令说明了以下内容:

如果(32位Vista)
     //将属性设置为true
否则如果(64位Vista)
     //将属性设置为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位版本时。

我在C#代码中使用的是IntPtr.Size,它在32位上等于4,在64位上等于8:

 string framework = (IntPtr.Size == 8) ? "Framework64" : "Framework"; 

您可以使用预定义宏来设置编译属性

  #if (_WIN64) const bool IS_64 = true; #else const bool IS_64 = false; #endif 

我不确定这是否是您正在寻找的但我检查IntPtr.Size以检测32位与64位运行时。 请注意,这可以告诉您运行时环境,您可能正在WOW64中运行

 if (IntPtr.Size == 4) { //32 bit } else if (IntPtr.Size == 8) { //64 bit } else { //the future } 

我知道这是一个老话题,但我最近必须达到相同的结果(即在构建时确定,而不是运行时)

我创建了新的构建配置(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 

Build打开Configuration Manager 。 从那里,您应该能够设置Active solution platform并创建专门针对x64,x86或任何CPU的配置。 从那里,您可以根据当前配置有条件地编译代码。

请注意,这通常是一个非常糟糕的主意。 .Net程序通常作为IL而不是本机代码分发。 然后,当用户第一次尝试运行它时,JIT编译器会在每台本地计算机上编译此IL。 通过选择默认的“任何CPU”,您可以允许JIT编译器为每台计算机进行确定。

这种情况的主要例外是当你依赖32位库时。 在这种情况下,您不希望JIT编译器为x64编译,因为它可能会破坏与库的互操作。

内置任何内容都无法为您完成此任务。 您可以随时#define您自己的符号,并根据需要将其用于条件编译。