【发布时间】:2010-11-11 07:45:58
【问题描述】:
我遇到了一个奇怪的场景,一个 32 位进程声称其 PROCESSOR_ARCHITECTURE 是 AMD64,导致根据该标志做出决策的组件出现故障。
我将其隔离为以下步骤:
- 在 VS2010 中,创建库项目
- 在项目属性/调试选项卡中,将启动外部程序设置为 VS exe(例如 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe)
- 按 Ctrl-F5 运行,启动另一个 VS 实例
- 在第二个实例中,创建一个控制台应用并粘贴以下代码
在主要:
Console.WriteLine(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"));
Console.ReadLine();
- 现在运行控制台应用
它显示 AMD64,即使它是 32 位进程(控制台应用程序的默认设置,每个构建设置)。
问题:其他人也可以复制吗?如果可以,您能解释一下吗?
注意:如果你很好奇,我以这种方式运行 VS 的原因是我在第二个实例中使用了一个实验性配置单元
更新:请注意,在我的真实场景中,我自己并没有查找此环境变量。相反,我使用一个组件 (SQLCE) 来查找它并依赖它是正确的。
【问题讨论】:
-
PROCESSOR_ARCHITECTURE 实际上是每个进程。例如如果您直接从第一个 VS 运行控制台应用程序,则会显示 x86。请注意,我自己并没有查找 env 变量。我正在使用一个组件(SQLCE 4.0),它本身正在查找它(选择正确的本机二进制文件集),所以它不在我的控制之下。
-
我自己试过了,结果发现按照你的步骤我不能执行。 Error Image。显然项目的构建设置针对 64 位?我注意到默认情况下,活动平台设置为“X64”而不是“任何 CPU”。
-
@Jeff:实际上对我来说默认目标是 32 位。您遇到的奇怪错误,无法解释!如果将目标设置为 32 位呢?
-
啊,你知道吗,我在调试模式下运行它...哎呀。
标签: c# visual-studio-2010 environment-variables x86-64