$(SolutionDir)通过CMD运行Sandcastle帮助文件生成器时,MSBuild属性不正确

时间:2015-09-07 09:45:23

标签: .net cmd msbuild sandcastle shfb

当我使用Windows CMD运行Sandcastle帮助文件生成器项目文件(例如myproject.shfbproj)时,我遇到了一个恼人的问题:$(SolutionDir)$(ProjectDir)具有相同的值,这意味着项目文档来源无法正确构建,因为我添加了已使用$(SolutionDir)的自定义目标。

如果我从Visual Studio构建整个Sandcastle帮助文件生成器,它就会成功构建。

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

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

有没有解决方法呢?

2 个答案:

答案 0 :(得分:20)

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

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

供参考:http://blogs.msdn.com/b/pfedev/archive/2008/09/26/solutiondir-and-msbuild.aspx

答案 1 :(得分:9)

虽然@ m0sa已经指出了一个非常明显的事实(因为我正在构建Sandcastle帮助文件生成器项目,但是没有实际的解决方案目录),在构建TFS构建期间也会出现问题解决方案所在的所谓文档项目。

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

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

由于我的解决方案文件将始终位于Sandcastle帮助文件构建器项目目录的父目录中,因此在我的情况下此解决方法有效...

现在作为文档源引用的项目能够导入一个自定义项目,我在Visual Studio版本或外部版本中定义了常见的MSBuild属性:

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