2015-09-07 20 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