MSBuild: Wie kann das Parsen einer durch Semikolon getrennten Eigenschaft gesteuert werden?

8

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.

    
KMoraz 03.11.2009, 00:49
quelle

3 Antworten

9

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.

    
radical 03.11.2009, 07:58
quelle
9

In MSBuild 4.0 können Sie $([MSBuild]::Escape($(ConnectionString))) verwenden.

    
Rory MacLeod 07.12.2010 20:41
quelle
8

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 ersetzen     
Lance Fisher 10.09.2010 06:34
quelle