Я пытаюсь развернуть проект базы данных (формат dbproj, а не новый SSDT sqlproj) внутри автоматической обработки сервера сборки. Я нашел следующее:
Когда я вызываю развертывание с задачей Exec в моем скрипте Msbuild - все работает нормально:
<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj
/t:Deploy
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\
/p:TargetDatabase=$(DeployDatabaseName)
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" />
Но когда я пытаюсь повторить это с задачей Msbuild - она ведет себя по-другому:
<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj"
Targets="Deploy"
Properties="Configuration=$(BuildConfiguration);
TargetDatabase=$(DeployDatabaseName);
TargetConnectionString="$(DeployDatabaseConnectionString)";
OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
" />
Сбой задачи Msbuild в точках с запятой в DeployDatabaseConnectionString:
<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>
Он сообщит что-то вроде этого:
Имя "Integrated Security" содержит недопустимый символ "" .
Но если я заменю точки с запятой на процентное значение кодировки -% 3B - оно сломается внутри SqlDeployTask:
ошибка MSB4018: задача «SqlDeployTask» неожиданно завершилась неудачей.
Как правильно передать TargetConnectionString в цель развертывания SqlProject?
PS: Я мог бы нормально жить с задачей exec, но сделать вызов msbuild.exe внутри скрипта msbuild просто больно моему внутреннему перфекционисту.