MSBuild скопировать вывод из другого проекта в вывод текущего проекта - PullRequest
5 голосов
/ 06 ноября 2008

У меня есть ситуация, когда я хочу скопировать выходную сборку из одного проекта в выходной каталог моего целевого приложения, используя MSBuild, без жестких путей в моей задаче MSBuild Copy. Вот сценарий:

  • Проект A - Проект веб-приложения
  • Проект B - Проект интерфейса Dal
  • Проект C - Проект внедрения Dal

Существует также бизнес-уровень, но он не имеет отношения к проблеме MSBuild, которую я хочу решить.

У моего бизнес-уровня есть ссылка на мой проект Dal.Interface. В моем веб-проекте есть ссылка на бизнес-уровень, и в процессе сборки сборка приведет к выводу бизнес-уровня и Dal.Interface. Все идет нормально. Теперь для запуска веб-приложения необходима реализация Dal. Я не хочу, чтобы на реализацию ссылались где-либо, поскольку я хочу навязать кодирование интерфейсу, а отсутствие ссылки означает, что оно не будет отображаться в intellisense и т. Д.

Итак, я решил, что смогу справиться с этим посредством операции копирования MSBuild в качестве задачи AfterBuild (у меня есть настройка реализации Dal, которая создается при сборке веб-проекта, но на которую нет ссылок). Я не хочу жестко кодировать пути или что-либо еще в параметрах MSBuild, поэтому я пытаюсь выяснить, как ссылаться на выходные данные проекта Dal из файла MSBuild проекта веб-приложения.

Итак, исходя из упомянутых выше проектов, я хочу, чтобы это произошло:

  1. Начинается сборка веб-приложения
  2. Сборка всех необходимых проектов (уже настроена, так что это сделано)
  3. Запускается задача MSBuild «AfterBuild», и выходные данные из проекта C (реализация Dal) копируются в каталог Bin проекта A (веб-приложение)

Часть 3, где я застрял.

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

Ответы [ 2 ]

8 голосов
/ 06 ноября 2008

Я выполнил эту работу, хотя мне бы хотелось найти более чистое решение, которое использует преимущества встроенных параметров в MSBuild (например, $ (TargetDir) и т. Д.), Но, чтобы указать на проект, который я хочу получить для вывода ). Во всяком случае, вот что я сделал:

<Target Name="AfterBuild">
<Copy SourceFiles="$(SolutionDir)MyProject.Dal.Linq\bin\$(Configuration)\MyProject.Dal.Linq.dll" DestinationFolder="$(TargetDir)"/>
</Target>

Я бы хотел увидеть более чистое решение, но сейчас это должно подойти.

0 голосов
/ 27 января 2014

Итак, вы хотите иметь ссылку, но не иметь ее видимой в VS. Таким образом, вы хотите, чтобы он был собран, если необходимо, и скопирован для вывода, как любой другой файл Content. Вот как вы это сделаете:

<Target Name="IncludeDALImplementation" BeforeTargets="AfterBuild">
  <MSBuild Projects="..\DalImplementation\DAL.csproj" BuildInParallel="$(BuildInParallel)" Targets="Build">
    <Output TaskParameter="TargetOutputs" ItemName="DalImplementationOutput" />
  </MSBuild>

  <ItemGroup>
    <Content Include="@(DalImplementationOutput)" />
  </ItemGroup>
</Target>
...