Проблема с рабочим каталогом при импорте файла msbuild в другой файл msbuild

Я пытаюсь указать некоторые дополнительные цели / задачи для файла msbuild, расширяя существующий файл msbuild (файл .csproj веб-приложения). Идея состоит в том, чтобы поместить конкретные задачи конфигурации в этот «расширенный файл сборки ms» и использовать этот файл на нашем сервере сборки (TeamCity). Сначала я попытался решить эту проблему, добавив в свой веб-проект папку «msbuildscripts» и поместив туда расширенный файл сборки ms:

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  <Import Project="../My.Web.csproj" />
  ...more stuff...
</Project>

а затем создайте этот файл, используя что-то вроде:

c:\myweb\msbuild.exe msbuildscripts/extended.msbuild.file.xml

Теперь это не сработает, потому что при импорте исходного файла сборки ms этот файл csproj будет «выполнен» в «неправильной» папке (msbuildscripts), а файл csproj-build не найдет ни одной из своих папок / элементов, на которые есть ссылки.

Есть ли способ указать msbuild.exe использовать конкретный рабочий каталог? Я знаю, что эту проблему можно решить с помощью задачи выполнения, но это не кажется хорошим решением.


person Emil G    schedule 28.09.2011    source источник


Ответы (1)


Используйте задачу MSBuild следующим образом:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="MyBuild">

<ItemGroup>
 <ProjectToBuild Include="../My.Web.csproj" />
</ItemGroup>

<Target Name="MyBuild">
 <MSBuild Targets="Build" Projects="@(ProjectToBuild)"></MSBuild>
</Target>
</Project>
person George Polevoy    schedule 28.09.2011
comment
Работает нормально, однако я использовал ProjectReference вместо ProjectToBuild, потому что этот элемент находится в схеме, хотя оба варианта работают. - person Emil G; 28.09.2011
comment
Любой идентификатор, который подходит для тега xml, здесь вполне допустим, не имеет значения, если он не в схеме. Это в схеме только для проприетарных файлов csproj. msdn.microsoft.com/en-us/library/646dk05y.aspx, я бы не рекомендовал повторно использовать это только потому, что это в схеме для интеллекта. - person George Polevoy; 28.09.2011