为啥 Microsoft.Build.Evaluation 在 64 位 PC 上将 $(ProgramFiles) 评估为“c:\program files”?
Posted
技术标签:
【中文标题】为啥 Microsoft.Build.Evaluation 在 64 位 PC 上将 $(ProgramFiles) 评估为“c:\\program files”?【英文标题】:Why does Microsoft.Build.Evaluation evaluate $(ProgramFiles) as "c:\program files" on 64 bit PC?为什么 Microsoft.Build.Evaluation 在 64 位 PC 上将 $(ProgramFiles) 评估为“c:\program files”? 【发布时间】:2012-07-19 19:08:01 【问题描述】:我有一个 C# 项目文件 (.csproj),其中包含对 $(ProgramFiles) 的引用。我使用的是 64 位 Windows 7。当我在 Visual Studio 2010 中编译此项目文件时,它会在 c:\Program Files (X86) 中正确定位该文件。
如果我想聪明点,而是使用 Microsoft.Build.Evaluation.ProjectCollection.LoadProject([project file]) 来尝试在代码中构建它,它会评估 $(ProgramFiles)错误地作为 c:\Program Files.
知道问题的原因可能是什么吗?
【问题讨论】:
【参考方案1】:Visual Studio 2010 是 32 位进程,WOW 将为 32 位进程提供 c:\Program Files (X86)
。
我的假设:
如果我尝试聪明一点,而是使用 Microsoft.Build.Evaluation.ProjectCollection.LoadProject([project file]) 来尝试在代码中构建它
当你“在代码中”执行它时,你的代码正在执行 x64,所以你得到了正常的环境值。
如果您需要 x86 程序文件目录的路径,您可以使用 x64 中的 ProgramFiles(x86)
环境变量。在 MSBuild 中,这是 $(MSBuildProgramFiles32)
。
【讨论】:
以上是关于为啥 Microsoft.Build.Evaluation 在 64 位 PC 上将 $(ProgramFiles) 评估为“c:\program files”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?