Изменить рабочий каталог msbuild.exe - PullRequest
11 голосов
/ 04 октября 2011

Я выполняю 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>

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

Ответы [ 2 ]

21 голосов
/ 19 декабря 2012

Я столкнулся с этим в поисках решения моей проблемы. Вот мое решение (сценарий сборки):

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

3 голосов
/ 04 октября 2011

@ 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>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...