2013-04-25 22 views
7

Quando provo a passare un po 'il percorso della directory in script MSBuild come segue:Come passare percorso con gli spazi e barra rovesciata finale per MSBuild come proprietà

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

E in .proj lima lo uso come

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

Quindi MSBuild compone FilePath come c:\this\is\directory"file.txt. Se passo DirPath senza virgolette ma con barra finale (/p:DirPath=c:\this\is\directory\) o senza barra finale ma con virgolette (/p:DirPath="c:\this\is\directory\") allora tutto funziona correttamente.

Cosa si può fare per consentire il passaggio del percorso della directory con la barra finale (sarebbe più conveniente) e tra virgolette (poiché il percorso può contenere spazi)? O è un bug in MSBuild e dovrei usare qualche soluzione, come rimuovere la barra retroversa finale passandolo in msbuild?

+0

hai provato virgolette singole? – leppie

+0

@leppie questa proprietà viene passata dallo script di compilazione e dallo strumento di integrazione continua (strumento di sviluppo FAKE) quindi non ho alcuna opzione qui. –

risposta

9

È a causa del modo in cui la proprietà viene impostata sulla riga di comando. MSBuild sta aggiungendo "alla fine del valore a causa dell'ultimo '\' e quindi" viene aggiunto alla fine del percorso della stringa.

Aggiungi un \ in più quando si imposta il valore dalla riga di comando e la stringa aggiungerà il backslash per te come previsto o non collocare il "alla fine

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

Il valore è quindi:. C: \ questo \ è \ directory \ file.txt

Un'altra soluzione consiste si può mettere questa funzione nel progetto MSBuild per sostituire i ":

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

La prima soluzione IMO non è comoda, è strano passare due backslash quando tutte le altre backslash passano di una. E la seconda soluzione non funzionerebbe in questa forma quindi Proprietà in MSBuild ordinariamente immutabili, ovvero non è possibile sovrascrivere la proprietà passata tramite/p: propname = propvalue, devi definire una nuova proprietà come '<_DirPath> $ (DirPath.Replace ('"' '" "))'. Ho deciso di tagliare la barra retroversa finale e aggiungerla nel file .proj. –

+0

Volevo solo dire che questo non è un errore di msbuild. Sta facendo esattamente quello che stai dicendo fare. Aggiungere un "alla fine di questo valore di proprietà. Questo perché stai impostando il valore con il trailing \ che dice a Msbuild che il prossimo carattere dovrebbe essere incluso. In questo caso è un ".Normalmente non si inserirà alcuna barra rovesciata finale su un valore di proprietà di directory. Non sono sicuro del perché consideri la soluzione strana dato che in questo caso è come si imposta correttamente una variabile di directory con un necessario" \ "Appeso al valore, sono contento che tu sia riuscito a capire la tua soluzione. Grazie – SoftwareCarpenter

+1

Ridicolo, ma funziona. Grazie. –

Problemi correlati