Wenn eine einzelne Eigenschaft Semikolons enthält, parst MSBuild die Eigenschaft automatisch in eine Liste von Eigenschaften, wenn sie in einer Elementgruppe verwendet wird. Hier ist ein Auszug aus meinem Projekt:
%Vor%Wenn eine Task die Elementgruppe @ (InstallShieldProperties) verwendet, analysiert MSBuild die ConnectionString-Eigenschaft in einer Liste von Subset-Eigenschaften, da sie Semikolons enthält.
%Vor%Ich weiß, dass ich das Trennzeichen der Elementgruppe ändern kann, aber das macht keinen Unterschied. Ich versuche zu vermeiden, das Array string [] innerhalb der benutzerdefinierten Aufgabe zu manipulieren.
AFAICS, Sie können entweder das Semikolon in der $ (ConnectionString) -Eigenschaft wie folgt umgehen:
%Vor%Oder verwenden Sie eine Aufgabe, um das ";" Setzen Sie die Eigenschaft ConnectionString auf '% 3B' und verwenden Sie diese Eigenschaft dann im Element InstallShieldProperties.
Die andere Möglichkeit könnte darin bestehen, den Eigenschaftstyp in der benutzerdefinierten Aufgabe von string [] in string zu ändern und sie dann selbst so zu teilen, wie Sie es möchten. Sie könnten umschließende Anführungszeichen verwenden, um Verbindungszeichenfolge von anderen Schlüssel / Wert-Paaren zu trennen.
Oder, wenn es für Ihre benutzerdefinierte Aufgabe sinnvoll ist, dann ist die Verbindungszeichenfolge möglicherweise eine spezielle Eigenschaft, die eine separate Aufgabeneigenschaft haben soll.
In MSBuild 4.0 können Sie $([MSBuild]::Escape($(ConnectionString)))
verwenden.
In MSBuild 4.0 gibt es jetzt Eigenschaftenfunktionen . Eine Sache, die Sie tun können, ist, .NET String-Instanzmethoden direkt auf Ihren Eigenschaften aufzurufen, als wären sie Strings (was sie sind).
In Ihrem Beispiel anstelle von:
%Vor%Sie könnten verwenden:
%Vor%Dies wird die String-Methode Replace () aufrufen, um Semikolons durch% 3B
zu ersetzenTags und Links msbuild msbuild-propertygroup