如何获取对 MSBuild 的调用路径?

How can I get the path of the call to MSBuild?

是否可以访问(在构建文件中)调用 MSBuild.exe 的目录?

我只能获取构建文件本身的路径。我想要从中调用 MSBuild 的目录。

预计

D:\> msbuild foo\foo.proj
...
  MSBuild was called from: D:\>
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="BeforeBuild">
    <Message Text="MSBuild was called from: ???" />
  </Target>
</Project>

为什么

我想知道是否可以替换

中的绝对路径
D:\workdir> msbuild foo\foo.proj /p:Parameter=d:\workdir\Projects\bar\

有相对路径

D:\workdir> msbuild foo\foo.proj /p:Parameter=Projects\bar\

MSBuild Reserved and Well-Known Properties

看起来 MSBuildStartupDirectory 可以帮助您:

TestBuild.vcxproj 片段

  <Target Name="BeforeBuild">
    <Message Text="MSBuild was called from: $(MSBuildStartupDirectory)" />
  </Target>

建造

d:\Data\Visual Studio 2013\Projects>msbuild /m .\TestMsBuild\TestMsBuild\TestMsBuild.vcxproj /verbosity:detailed /t:BeforeBuild

Task "Message"
    MSBuild was called from: d:\Data\Visual Studio 2013\Projects