2011-10-04 128 views
10

我正在執行批處理文件中的MSBuild。 MSBuild腳本位於與MSBuild在運行腳本時考慮工作目錄的目錄不同的目錄中。當調用MSBuild.exe時,如何更改其工作目錄?更改msbuild.exe的工作目錄

編輯:更多細節
比方說,我有一些位於其他服務器上的一個MSBuild腳本。我想正是如此運行命令:

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

我在C運行該命令與我的命令提示符:\ TEMP。假設我的TestScript.msbuild有一個創建文件的任務。該文件沒有路徑只是一個文件名。我期望該文件在c:\ temp中創建。但它不會在坐在服務器上的msbuild文件旁邊創建。這是我想改變的行爲。

編輯#2
下面是我用在我的測試腳本:

<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> 

我進入一個命令shell CDing到C:\ TEMP,然後執行腳本。有或者沒有@Nick Nieslanik提到的/ p:OutDir開關,HelloWorld.txt文件出現在* .msbuild文件所在的文件夾中,而不是c:\ temp。

+0

我不知道我理解你的問題。如果我在目錄A中有一個cmd文件並從目錄B調用它,然後回顯%cd%它會將目錄B顯示爲當前目錄。因此,除非您在腳本中更改目錄,否則它應該已將當前目錄視爲工作目錄。你能澄清嗎? –

+0

我同意你描述的行爲。但是,MSBuild似乎沒有這樣做。它似乎將* .build文件的位置作爲工作目錄。我將編輯我的問題來描述我的設置的更多細節。 – RationalGeek

回答

3

@jkohlhepp - 我現在看到。你在某種程度上與我在評論中所描述的相反。
MSBuild公共目標使用MSBuildProjectDirectory來確定輸出文件夾,除非您覆蓋它。所以你的情況,你可以運行

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

強制輸出在該位置將被丟棄。

編輯:
鑑於上述項目文件,你需要修改它做類似下面的這個工作:

<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 ....那似乎不適合我。在我爲這個問題構建的示例腳本中,我有一個任務,它只指定文件名,沒有目錄。即使當我指定/ p:Outdir = c:\ temp時,所觸及的文件仍然會在msbuild腳本文件旁邊結束。 – RationalGeek

+0

你可以在問題中顯示一些msbuild文件嗎? –

+0

是的,我可以。在問題中添加了完整的腳本。 – RationalGeek

16

我碰到這個同時跑在尋找一個解決我的問題。這裏是我的解決方案(構建腳本):

<?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> 

我相信這是你最初尋找什麼?

我的問題是,我的批處理文件,另一個叫,它預計將在同一目錄中,但因爲我的MS構建腳本是在其他地方運行,該批處理文件未能找到第二個批處理文件。

+0

你救了我的命。退出代碼99,即可。 – mmmeff

+0

'WorkingDirectory'屬性是我正在尋找的。太感謝了! –