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

Mat*_*zer 16 .net msbuild sandcastle cmd shfb

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

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

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

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

这有什么解决方法吗?

m0s*_*0sa 22

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

msbuild /p:Configuration=Development /p:SolutionDir=MySolutionDir myproject.shfbproj
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*zer 10

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

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

  <PropertyGroup>
    <SolutionDir>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))\</SolutionDir>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

<Import Project="$(SolutionDir)MSBuild\Common.properties" />
Run Code Online (Sandbox Code Playgroud)