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

时间:2014-07-30 11:20:48

标签: c# windows-store-apps

我想知道(用于记录目的)是否为x86 / x64 / AnyCPU / Win32编译了商店应用程序。

我找不到任何东西,但似乎这些信息应该在运行时提供。

2 个答案:

答案 0 :(得分:4)

转到您的项目属性,并为每个平台添加条件编译符号(在构建标签中)。让我们说PLATFORM_X86PLATFORM_X64PLATFORM_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.Is64BitProcess来了解您正在运行的位置。

答案 1 :(得分:1)

使用IntPtr.Size

尝试这种方式
var result="";
if (IntPtr.Size == 8)
      result= "x64";
else
      result="x86";

下一个方法无法在windows-store-apps 中工作,因为@Adriano Repetti已经标记给我了。
我不会因社区原因删除它。

另一种方法是使用\[Module.GetPEKind Method\]

 Assembly assembly = Assembly.GetExecutingAssembly();
 PortableExecutableKinds p;
 ImageFileMachine machineInfo;
 assembly .ManifestModule.GetPEKind(out p, out machineInfo);

这段代码machineInfo变量应该是以下之一:

  1. AMD64用于定位64位AMD处理器
  2. ARM用于ARM处理器
  3. I386用于32位Intel处理器
  4. IA64用于64位Intel处理器