更改msbuild.exe的工作目录

时间:2011-10-04 14:23:23

标签: msbuild

我正在从批处理文件中执行MSBuild。 MSBuild脚本与我希望MSBuild在运行脚本时考虑工作目录的目录位于不同的目录中。调用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。

3 个答案:

答案 0 :(得分:21)

我在寻找解决问题的方法时遇到了这个问题。这是我的解决方案(构建脚本):

<?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构建脚本正在其他地方运行,批处理文件无法找到第二个批处理文件。

答案 1 :(得分: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>  

答案 2 :(得分:0)

在当前版本的MSBuild中,可以在msbuild文件中使用众所周知的属性MSBuildStartupDirectory来检索调用MSBuild的文件夹的绝对路径。

https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-reserved-and-well-known-properties?view=vs-2019

在询问问题的时间前后,msbuild中可能不存在此选项。我不想花太多时间研究它。