$(SolutionDir) MSBuild 属性 当 运行 Sandcastle Help File Builder 通过 CMD 时不正确

$(SolutionDir) MSBuild property incorrect when running Sandcastle Help File Builder via CMD

当我使用 Windows CMD 运行 Sandcastle Help File Builder 项目文件(例如,myproject.shfbproj)时,我遇到了一个恼人的问题:$(SolutionDir) 有与 $(ProjectDir) 相同的值,这意味着项目文档源无法正确构建,因为我正在添加已经使用 $(SolutionDir).

的自定义目标

如果我从 Visual Studio 构建整个 Sandcastle Help File Builder,它会成功构建。

我正在使用以下命令(从存储项目的目录执行):

"C:\Program Files (x86)\MSBuild.0\Bin\MSBuild.exe" /p:Configuration=Development myproject.shfbproj

有解决办法吗?

只有在构建解决方案(.sln 文件)时,您才能得到正确的 $(SolutionDir).shfbproj 是一个项目文件,因此没有对其父解决方案的引用。您可以尝试在命令行中明确指定 $(SolutionDir)

msbuild /p:Configuration=Development /p:SolutionDir=MySolutionDir myproject.shfbproj

供参考:$(SolutionDir) and MSBuild

虽然 @m0sa 指出了一个非常明显的事实(因为我正在构建 Sandcastle Help File Builder 项目,所以没有实际的解决方案目录),但在构建解决方案时,在 TFS Build 期间也发生了这个问题所谓的文档项目驻留。

现在我已经设法使用 讨厌的 解决方法解决了这个问题:在每个需要的 C# 项目中添加 SolutionDir 属性作为文档项目的一部分构建:

  <PropertyGroup>
    <SolutionDir>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))\</SolutionDir>
  </PropertyGroup>

由于我的解决方案文件将始终位于 Sandcastle Help File Builder 项目目录的父目录中,因此在我的情况下,此解决方法有效...

现在作为文档源引用的项目能够导入自定义项目,我在其中定义了通用 MSBuild 属性,在 Visual Studio 构建或外部构建中:

<Import Project="$(SolutionDir)MSBuild\Common.properties" />