Измените рабочий каталог msbuild.exe

Я запускаю MSBuild из командного файла. MSBuild script находится в другом каталоге, а не в директории, в которой MSBuild должен рассматривать рабочий каталог при запуске script. При вызове MSBuild.exe, как мне изменить его рабочий каталог?

Изменить: Подробнее
Скажем, у меня есть MSBuild script, расположенный на каком-то другом сервере. Я хочу запустить команду:

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

Я запустил эту команду с моей командной строкой в ​​c:\temp. Скажем, у моего TestScript.msbuild есть задача создать файл. У файла нет пути только имени файла. Я ожидаю, что файл будет создан внутри c:\temp. Но он не создается рядом с файлом msbuild, который сидит на сервере. Это поведение, которое я хочу изменить.

Изменить # 2
Вот script, который я использую в своем тесте:

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

Я перехожу в командную оболочку CDing в c:\temp, а затем выполняю script. С или без переключателя /p: OutDir, который упоминает @Nick Nieslanik, файл HelloWorld.txt появляется в папке, где находится файл *.msbuild, а не c:\temp.

Ответ 1

@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

Я столкнулся с этим во время поиска решения моей проблемы. Здесь мое решение (build script):

<?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 build script выполнялся в другом месте, командный файл не смог найти второй командный файл.