当我使用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
有没有解决方法呢?
答案 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" />