MSBuild和$(ProgramFiles)以32/64位发出

dar*_*mos 10 msbuild visual-studio-2010 32bit-64bit

我编写了一个自定义的MSBuild任务,它调用SubWCRev.exe一个(通常)驻留的可执行文件C:\Program Files\TortoiseSVN\bin,无论是32位还是64位,因为TortoiseSVN提供了这两个版本.

问题是,Visual Studio 2010只有32位版本.因此,当我的64位盒子的同事尝试使用我的闪亮的新任务进行构建时,$(ProgramFiles)解析为C:\Program Files(x86)并且它爆炸说SubWCRev.exe无法找到.因为他们有64位版本的TortoiseSVN,它存在C:\Program Files!

有没有比C:\Program Files我的msbuild脚本中的硬编码更好的解决方案,或者每个人都使用32位版本的TortoiseSVN?(实际上它是一个C#项目,我稍微修改了一下MSBuild代码)

mth*_*rba 14

看看这个:

<Project ToolsVersion="4.0" DefaultTargets="PrintValues" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="PrintValues">
    <PropertyGroup>
      <MyProgramFiles>$(ProgramW6432)</MyProgramFiles>
      <MyProgramFiles Condition="$(MyProgramFiles) == ''">$(ProgramFiles)</MyProgramFiles>
    </PropertyGroup>

    <Message Text="MyProgramFiles: $(MyProgramFiles)"/>
  </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

这样可以MyProgramFiles解析32位和64位Windows的"C:\ Program Files"(ProgramW6432非64位版本的Windows上的环境变量为空).