$(SolutionDir) Свойство MSBuild неверно при запуске построителя файла справки Sandcastle через CMD

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

Вы только получите правильный $(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

Для меня я исправил это, имеяDiretory.Build.Propsфайл в корне решения. Вот содержимое моегоDirectory.Build.Props:

Другие вопросы по тегам