Почему задаче Msbuild не удалось развернуть базу данных, но Exec работает нормально

Я пытаюсь развернуть проект базы данных (формат 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=&quot;$(DeployDatabaseConnectionString)&quot;;
            OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
            " />

Задача Msbuild сломалась на точках с запятой в DeployDatabaseConnectionString:

<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>

Он сообщит что-то вроде этого:

Имя "Интегрированная безопасность" содержит недопустимый символ " ".

Но если я заменю точку с запятой значением кодировки в процентах - %3B - это сломается внутри SqlDeployTask:

error MSB4018: Неожиданный сбой задачи "SqlDeployTask".

Как правильно передать TargetConnectionString для развертывания цели SqlProject?

PS: Я мог бы жить с задачей exec, но вызов msbuild.exe внутри скрипта msbuild просто ранит моего внутреннего перфекциониста.

5
задан Alexey Shcherbak 31 March 2012 в 19:05
поделиться