$(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
: