2015-09-07 19 views
10

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

如果我建立从Visual Studio整个沙堡帮助文件生成它成功生成。

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

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

有没有办法解决这个?

+0

您使用的是什么命令行? 'msbuild myproject.shfbproj'? – m0sa

+0

@ m0sa肯定的,而且提供了一个属性来定义生成配置 –

+0

@ m0sa我已经更新了我的Q可为您提供完整的命令。 –

回答

7

虽然@ m0sa指出一个很明显的事实(因为我建沙堡帮助文件生成器项目,有没有实际的解决方案目录),这个问题也发生在一个TFS建筑物所在的所谓的文档项目的解决方案时建立。

现在我已经成功地解决了使用讨厌解决方法问题:

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

由于我的解决方案:在需要被构建为文档项目的一部分,每一个C#项目添加SolutionDir属性文件将始终位于Sandcastle帮助文件生成器项目diretory的父目录中,在我的情况下,此解决方法可行...

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

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

你只能得到正确的$(SolutionDir)如果您正在构建您的解决方案(.sln文件)。 .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

+0

我试过这个没有运气。在我需要正确的'$(SolutionDir)'值之前,我设法解决了在每个csproj中定义整个解决方案目录的问题。 –

+0

我会在几分钟内发布解决方法,我们可以讨论它... –

+0

此解决方案的确对我来说工作得很好。 – zellus