2015-09-21 1 views
6

Die SQL Server Data Tools team blog erwähnt, dass es jetzt möglich ist, MsBuild zu verwenden, um einen Schemavergleich von zwei DacPacs oder Datenbanken durchzuführen. Sie erwähnen jedoch nicht genau, wie die Verbindungszeichenfolge an die Quell- und Zieldatenbank übergeben wird. source = "meine Verbindungszeichenfolge" Ich erhalte die Fehlermeldung: Wenn ich die Parameter/p gesetztWie wird eine Verbindungszeichenfolge als Parameter an MsBuild gesendet, um SQL Schema Compare durchzuführen?

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

Die Befehlszeilen meines Powershell-Skript sendet msbuild ist:

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

wo die SchemaCompare. proj enthält den Inhalt auf dem

SQL Server Data Tools team blog vorgeschlagen

Antwort

3

Es stellt sich heraus, dass Sie die Semikolons in der Verbindungszeichenfolge mit %3B zu ersetzen haben, etwa so:

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

Erläuterung: Dies verhindert Begrenzer Kollisionen zwischen dem SQL Server ConnectionString Wert und den MSBuild /p (auch bekannt als /properties) Wert, der es enthält. Wenn diese URL-Codierung nicht vorhanden ist, wird MSBuild das Zeichen ConnectionString für Semikolons ausgeben, anstatt den gesamten intakten Wert (für die SQL Server-Clientbibliotheken zum Tokenisieren) weiterzugeben. Dies gilt auch für das Properties Attribut der MSBuild Task.

Referenzen:

Verwandte Themen