2013-04-25 3 views
7

Wenn ich versuche, etwas Verzeichnispfad in MSBuild Skript übergeben, wie folgt:Wie passieren Pfad mit Leerzeichen und Backslash zu MSBuild als Eigenschaft

MSBuild.exe myproj.proj /p:DirPath="C:\this\is\directory\" 

Und in .proj Datei verwende ich es als

<PropertyGroup> 
    <FilePath>$(DirPath)file.txt</FilePath> 
<PropertyGroup> 

Dann komponiert MSBuild FilePath als c:\this\is\directory"file.txt. Wenn ich DirPath ohne Anführungszeichen übergebe, aber mit Schrägstrich (/p:DirPath=c:\this\is\directory\) oder ohne Schrägstrich, aber mit Anführungszeichen (/p:DirPath="c:\this\is\directory\"), dann funktioniert alles gut.

Was kann getan werden, um Verzeichnispfad mit abschließendem Schrägstrich (es wäre bequemer) und in Anführungszeichen übergeben (da Pfad Leerzeichen enthalten kann)? Oder ist es ein Fehler in MSBuild, und ich sollte eine Problemumgehung verwenden, wie das Entfernen des nachfolgenden Backslashs nach dem Übergeben in MSbuild?

+0

Haben Sie versucht, einfache Anführungszeichen? – leppie

+0

@leppie Diese Eigenschaft wird vom Build-Skript und dem Tool für die fortlaufende Integration (FAKE-Build-Tool) übergeben. Daher habe ich hier keine Option. –

Antwort

9

Dies liegt an der Art, wie die Eigenschaft in der Befehlszeile festgelegt wird. MSBuild fügt das "an das Ende des Werts wegen des letzten" hinzu "und daher" wird an dem Ende des Zeichenfolge-Pfads angefügt.

extra \ hinzufügen, wenn der Wert von der Befehlszeile Einstellung und der String wird die Backslash für Sie bestimmt sind oder nicht setzen die "am Ende

MSBuild.exe myproj.proj /p:DirPath="C:\this\is\directory\\" 

Der Wert ist dann anhängen. C: \ diese \ ist \ Verzeichnis \ file.txt

Eine weitere soulution ist diese Funktion in Ihrem MSBuild Projekt setzen können "ersetzen:

<PropertyGroup> 
    <DirPath>$(DirPath.Replace('"',""))</DirPath> 
</PropertyGroup> 
+0

IMO erste Lösung ist nicht zu bequem, es ist seltsam, zwei Backslashes zu übergeben, wenn alle anderen Backslashes an einem übergeben. Und die zweite Lösung würde in dieser Form nicht funktionieren. Eigenschaften in MSBuild sort of immutable, dh Sie können die über/p: propname = propvalue übergebene Eigenschaft nicht überschreiben, sondern müssen eine neue Eigenschaft wie '<_DirPath> $ (DirPath.Replace ('"'" "))'. Ich habe beschlossen, triding Backslash zu trimmen und fügen Sie es in der .proj-Datei. –

+0

Ich wollte nur erwähnen, dass dies kein Msbuild-Fehler ist. Es tut genau das, was Sie es sagen zu tun.Anhängen eines "am Ende dieses Eigenschaftswerts. Das liegt daran, dass Sie den Wert mit dem folgenden Wert festlegen, der Msbuild mitteilt, dass das nächste Zeichen eingeschlossen werden soll. In diesem Fall ist es ein ".Normalerweise würden Sie keinen nachfolgenden Backslash auf einen Verzeichniseigenschaftswert setzen. Ich bin mir nicht sicher, warum Sie die Lösung für seltsam halten, da Sie in diesem Fall eine Verzeichnisvariable mit einem benötigten" \ "An den Wert angehängt. Froh, dass Sie in der Lage waren, Ihre eigene Lösung zu finden. Danke – SoftwareCarpenter

+1

Lächerlich! Aber es funktioniert. Danke." –

Verwandte Themen