Estoy intentando implementar el proyecto de base de datos (formato dbproj, no el nuevo SSDT sqlproj) dentro del procesamiento automatizado del servidor de compilación. He encontrado el siguiente:Por qué la tarea de Msbuild no pudo implementar la base de datos, pero Exec funciona bien
Cuando estoy llamando a desplegar con tarea Exec en mi guión MSBUILD - todo funciona bien:
<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj
/t:Deploy
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\
/p:TargetDatabase=$(DeployDatabaseName)
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" />
Pero cuando trato de repetir esta tarea con MSBUILD - se comporta de manera diferente:
<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj"
Targets="Deploy"
Properties="Configuration=$(BuildConfiguration);
TargetDatabase=$(DeployDatabaseName);
TargetConnectionString="$(DeployDatabaseConnectionString)";
OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
" />
tarea MSBUILD se rompió en un punto y coma en DeployDatabaseConnectionString:
<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>
Se informará algo como esto:
El nombre de "seguridad integrada" contiene un carácter no válido "".
Pero si reemplazo punto y coma con valor porcentual de codificación -% 3B - se rompió dentro SqlDeployTask:
error MSB4018: La tarea "SqlDeployTask" error inesperado.
¿Cuál es la forma correcta de pasar TargetConnectionString para implementar el objetivo de SqlProject?
PD: Puedo vivir bien con la tarea ejecutiva, pero hacer una llamada a msbuild.exe dentro de la secuencia de comandos de msbuild solo lastima a mi hombre perfeccionista interno.