2011-10-04 54 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'属性是我正在寻找的。太感谢了! –