更改msbuild.exe的工作目录

Rat*_*eek 11 msbuild

我正在从批处理文件中执行MSBuild.MSBuild脚本与我希望MSBuild在运行脚本时考虑工作目录的目录位于不同的目录中.调用MSBuild.exe时,如何更改其工作目录?

编辑:更多细节
假设我有一个位于其他服务器上的MSBuild脚本.我想这样运行一个命令:

msbuild.exe \\my_server\c$\My\Path\To\Scripts\TestScript.msbuild
Run Code Online (Sandbox Code Playgroud)

我在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>
Run Code Online (Sandbox Code Playgroud)

我将进入命令shell CDing到c:\ temp然后执行脚本.无论有没有@Nick Nieslanik提到的/ p:OutDir开关,HelloWorld.txt文件都会出现在*.msbuild文件所在的文件夹中,而不是c:\ temp.

Pla*_*ble 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>
Run Code Online (Sandbox Code Playgroud)

我相信你原本想要的更多吗?

我的问题是我的批处理文件调用另一个它预期在同一目录中,但由于我的ms构建脚本正在其他地方运行,批处理文件无法找到第二个批处理文件.


Nic*_*nik 4

@jkohlhepp - 我现在明白了。在某种程度上,您所做的与我在评论中描述的相反。
MSBuild 常见目标使用 MSBuildProjectDirectory 来确定输出文件夹,除非您覆盖它。所以在你的情况下,你可以运行

msbuild.exe \\my_server\c$\My\Pat\To\Scripts\TestScript.msbuild /p:OutDir=c:\temp 
Run Code Online (Sandbox Code Playgroud)

强制将输出丢弃在该位置。

编辑:
鉴于上面的项目文件,您需要对其进行编辑以执行类似以下操作才能正常工作:

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