C# 在运行时以编程方式读取目标平台

C# 在运行时以编程方式读取目标平台,c#,windows-store-apps,C#,Windows Store Apps,我想知道(出于日志记录目的)存储应用程序是否已针对x86/x64/AnyCPU/Win32编译 我找不到任何信息,但似乎这些信息应该在运行时可用。转到项目属性,为每个平台添加一个条件编译符号(在构建选项卡中)。比如说PLATFORM\u X86,PLATFORM\u X64和PLATFORM\u ANYCPU(您也可以从命令行使用/D选项) 您可以在代码中使用以下符号: #if PLATFORM_X86 // Code specific for X86 builds #endif 如果

我想知道(出于日志记录目的)存储应用程序是否已针对x86/x64/AnyCPU/Win32编译


我找不到任何信息,但似乎这些信息应该在运行时可用。

转到项目属性,为每个平台添加一个条件编译符号(在构建选项卡中)。比如说
PLATFORM\u X86
PLATFORM\u X64
PLATFORM\u ANYCPU
(您也可以从命令行使用
/D
选项)

您可以在代码中使用以下符号:

#if PLATFORM_X86
    // Code specific for X86 builds
#endif
如果需要进行日志记录,只需声明一个常量,如:

#if PLATFORM_X86
private const string Platform = "X86";
#elif PLATFORM_X64
private const string Platform = "X64";
#elif PLATFORM_ANYCPU
private const string Platform = "AnyCPU";
#endif
当然,在为
AnyCPU
编译时,您可以使用
Environment.is64位进程
来了解您的运行位置。

使用

下一个方法在windows应用商店应用程序中不起作用,因为@Adriano Repetti向我发出了标记。
我不会仅出于社区原因删除它。

另一种方法是使用

在这行代码之后,
machineInfo
变量应该是以下其中之一:

  • AMD64
    针对64位AMD处理器
  • ARM
    用于ARM处理器
  • 适用于32位英特尔处理器的I386
  • IA64
    适用于64位英特尔处理器

  • GetPEKind是“普通”网络应用程序的正确方法,但GetPEKind方法在Windows应用商店应用程序中不受支持(正如OP提出的问题)。检查Int32大小不会告诉您是否为X86或AnyCPU编译,它只是一种更脏的方式来获取Environment.Is64Process中的相同信息。
    var result="";
    if (IntPtr.Size == 8)
          result= "x64";
    else
          result="x86";
    
     Assembly assembly = Assembly.GetExecutingAssembly();
     PortableExecutableKinds p;
     ImageFileMachine machineInfo;
     assembly .ManifestModule.GetPEKind(out p, out machineInfo);