$(SolutionDir) свойство MSBuild неверно при запуске Sandcastle Help File Builder через CMD

когда я запускаю файл проекта Sandcastle Help File Builder (например myproject.shfbproj) используя Windows CMD, я получаю раздражающую проблему:$(SolutionDir) имеет то же значение, что и $(ProjectDir), и это означает, что источники проектной документации не будут строить правильно, потому что я добавляю пользовательские цели, которые уже используют $(SolutionDir).

если я построю весь конструктор файлов справки Sandcastle из Visual Studio, он будет успешно построен.

я использую следующую команду (выполняется из каталога где хранится проект):

"C:Program Files (x86)MSBuild.0BinMSBuild.exe" /p:Configuration=Development myproject.shfbproj

есть ли обходной путь для этого?

2 ответов


вы получаете только правильный $(SolutionDir) Если вы создаете свое решение (.sln file). The .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


В то время как @m0sa указал на очень очевидный факт (поскольку я создаю проект Sandcastle Help File Builder, нет фактического каталога решений), проблема также происходила во время сборки TFS при создании решения, где находится так называемый проект документации.

на данный момент мне удалось решить проблему, используя гадость решение: добавление SolutionDir свойство в каждом проекте C#, который должен быть построен как часть документации проект:

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

поскольку мой файл решения всегда будет находиться в Родительском каталоге Sandcastle Help File Builder project diretory, в моем случае этот обходной путь работает...

Теперь ссылки на проекты в качестве источников документации могут импортировать пользовательский проект, где я определяю общие свойства MSBuild как в сборках Visual Studio, так и во внешних:

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