2011-10-04 16 views
10

Sto eseguendo MSBuild da un file batch. Lo script MSBuild si trova in una directory diversa dalla directory in cui voglio che MSBuild consideri la directory di lavoro durante l'esecuzione dello script. Quando si richiama MSBuild.exe, come posso cambiare la sua directory di lavoro?Modifica directory di lavoro di msbuild.exe

Edit: Maggiori dettagli
Diciamo che ho uno script MSBuild situato su qualche altro server. Voglio eseguire un comando nel seguente modo:

msbuild.exe \\my_server\c$\My\Path\To\Scripts\TestScript.msbuild 

ho eseguito quel comando con il mio prompt dei comandi in c: \ temp. Diciamo che il mio TestScript.msbuild ha un'attività per creare un file. Il file non ha percorso solo un nome di file. Mi aspetto che il file venga creato all'interno di c: \ temp. Ma non viene creato accanto al file msbuild che si trova sul server. Questo è il comportamento che voglio cambiare.

Modifica # 2
Ecco lo script che sto utilizzando nel mio test:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <Files Include="HelloWorld.txt" /> 
    </ItemGroup> 

    <Target Name="TouchFiles"> 
     <Touch Files="@(Files)" AlwaysCreate="True" /> 
    </Target> 
</Project> 

sto andando in un guscio CDing comando nella c: \ temp e quindi l'esecuzione dello script. Con o senza l'opzione/p: OutDir che @Nick Nieslanik menziona, il file HelloWorld.txt viene visualizzato nella cartella in cui si trova il file * .msbuild e non c: \ temp.

+0

Non sono sicuro di aver capito la tua domanda. Se ho un file cmd nella directory A e lo chiamo dalla directory B, echo out% cd% mostrerà la directory B come directory corrente. Quindi, a meno che non si stia cambiando la directory nello script, dovrebbe già considerare la directory corrente come directory di lavoro. Puoi chiarire? –

+0

Sono d'accordo con il comportamento che descrivi. Tuttavia, MSBuild non sembra farlo. Sembra prendere la posizione del file * .build come directory di lavoro. Modificherò la mia domanda per descrivere più specifiche sulla mia configurazione. – RationalGeek

risposta

3

@jkohlhepp - Vedo ora. Stai facendo l'opposto di quello che ho descritto nel mio commento in una certa misura.
MSBuild obiettivi comuni utilizzano MSBuildProjectDirectory per determinare la cartella di output a meno che non si sostituisca quella. Quindi nel tuo caso, è possibile eseguire

msbuild.exe \\my_server\c$\My\Pat\To\Scripts\TestScript.msbuild /p:OutDir=c:\temp 

per forzare l'uscita di essere caduto in quella posizione.

EDIT:
Dato il file di progetto di cui sopra, avresti bisogno di modificarlo per fare qualcosa di simile alla seguente per far funzionare tutto questo:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <OutDir Condition=" '$(OutDir)' == '' ">bin\debug\</OutDir> 
    </PropertyGroup> 
    <ItemGroup> 
    <!-- Without prefacing files with paths, they ar assumed relative to the proj file --> 
    <FilesToCreate Include="$(OutDir)HelloWorld.txt" /> 
    </ItemGroup> 
    <Target Name="TouchFiles"> 
    <Touch Files="@(FilesToCreate)" AlwaysCreate="True" /> 
    </Target> 
</Project> 
+0

Hrmmm .... non sembra funzionare per me. Nel mio script di esempio che ho creato per questa domanda, ho un compito che specifica solo un nome di file, senza directory. Anche quando si specifica/p: Outdir = c: \ temp il file toccato finisce comunque accanto al file di script msbuild. – RationalGeek

+0

Puoi mostrare un po 'di quel file msbuild nella domanda? –

+0

Sì, posso. Aggiunto lo script completo alla domanda. – RationalGeek

16

mi sono imbattuto in questo mentre alla ricerca di una soluzione al mio problema. Ecco la mia soluzione (script di costruzione):

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Default"> 
    <Exec Command="build.bat" WorkingDirectory="..\[your dir]\" /> 
    </Target> 
</Project> 

Credo che sia più quello che stavi cercando originariamente?

Il mio problema era che il mio file batch chiamava un altro che avrebbe dovuto trovarsi nella stessa directory, ma poiché il mio script di compilazione ms veniva eseguito altrove, il file batch non riusciva a trovare il secondo file batch.

+0

Mi hai salvato la vita. Exit code 99, begone. – mmmeff

+0

L'attributo 'WorkingDirectory' era quello che stavo cercando. Grazie mille! –

Problemi correlati