Sto provando a distribuire il progetto di database (formato dbproj, non nuovo SSDT sqlproj) all'interno dell'elaborazione del server di build automatizzato. Ho trovato il seguente:Perché l'attività di Msbuild non è riuscita a distribuire il database, ma Exec funziona correttamente
Quando sto chiamando distribuire con compito Exec nel mio script MSBuild - tutto funziona bene:
<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj
/t:Deploy
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\
/p:TargetDatabase=$(DeployDatabaseName)
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" />
Ma quando provo a ripetere questo con compito MSBuild - si comporta in modo diverso:
<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj"
Targets="Deploy"
Properties="Configuration=$(BuildConfiguration);
TargetDatabase=$(DeployDatabaseName);
TargetConnectionString="$(DeployDatabaseConnectionString)";
OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
" />
compito MSBuild rotto il punto e virgola in DeployDatabaseConnectionString:
<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>
Riporterà qualcosa del genere:
Il nome "Sicurezza integrata" contiene un carattere non valido "".
Ma se sostituisco il punto e virgola con valore di codifica per cento -% 3B - sarà rotto all'interno SqlDeployTask:
errore MSB4018: Il compito "SqlDeployTask" falliti inaspettatamente.
Qual è il modo corretto per passare TargetConnectionString a Deploy target di SqlProject?
PS: I Potrebbe vivere bene con il compito di exec, ma effettuare una chiamata a msbuild.exe all'interno dello script di msbuild mi fa solo male al perfezionista interiore.