为什么Microsoft.Build.Evaluation在64位PC上将$(ProgramFiles)评估为"c:\ program files"?

Ste*_*uer 2 .net c# windows msbuild visual-studio-2010

我有一个C#项目文件(.csproj),其中包含对$(ProgramFiles)的引用.我使用64位Windows 7.当我在Visual Studio 2010中编译此项目文件时,它在c:\ Program Files(X86)中正确定位文件.

如果我试图聪明而改为使用Microsoft.Build.Evaluation.ProjectCollection.LoadProject([project file]),试图在代码中构建它,它会错误地将$(ProgramFiles)计算为c:\ Program Files.

知道问题的原因是什么吗?

vcs*_*nes 5

Visual Studio 2010是一个32位进程,WOW将提供c:\Program Files (X86)32位进程.

我的假设在这里:

如果我试图聪明,而是使用Microsoft.Build.Evaluation.ProjectCollection.LoadProject([project file]),试图在代码中构建它

当您在"代码中"执行此操作时,您的代码正在执行x64,因此您将获得正常的环境值.

ProgramFiles(x86)如果需要x86程序文件目录的路径,可以使用x64中的环境变量.在MSBuild中,就是这样$(MSBuildProgramFiles32).