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