2015-09-21 7 views
6

SQL Server Data Tools team blog menziona che è ora possibile utilizzare MsBuild per eseguire un confronto di schemi di due DacPac o database. Tuttavia, non menzionano esattamente come passare la stringa di connessione al database di origine e di destinazione. Se ho impostato il parametro/p: source = "la mia stringa di connessione" ottengo l'errore:Come inviare una stringa di connessione come parametro a MsBuild per eseguire il confronto dello schema SQL?

MSBUILD : error MSB4177: Invalid property. The name "Initial Catalog" contains an invalid character " ".

Il mio script PowerShell da riga di comando invia al MSBuild è:

msbuild ".\SchemaCompare.proj" /t:SqlSchemaCompare 
/p:source="$sourceConnString" /p:target="$targetConnString" 
/p:XmlOutput="$schemaCompareReportPath" 

dove lo SchemaCompare. proj contiene il contenuto proposto sul SQL Server Data Tools team blog

risposta

3

si scopre che si deve sostituire il punto e virgola nella stringa di connessione con %3B, in questo modo:

$sourceConnString = $sourceConnString.Replace(";", "%3B") 

Spiegazione: questo modo si evita collisioni delimitatore tra il valore di SQL Server ConnectionString e MSBuild /p (anche noto come /properties) valore che lo contiene. Assente questa codifica URL, MSBuild converte il numero ConnectionString in punti e virgola anziché passare l'intero valore intatto (affinché le librerie client di SQL Server possano tokenizzare). Questo vale anche per l'attributo Properties dello MSBuild Task.

Riferimenti:

Problemi correlati