Как объединить результаты из динамически сгенерированного набора проектов в одну папку - PullRequest
0 голосов
/ 21 июля 2010

Мне нужно собрать в одну папку все тестовые сборки, их зависимости и файлы конфигурации.Процесс должен сохранять структуру каталогов из результатов каждого тестового проекта.У нас есть решение, которое требует ручного подключения тестовых проектов к основному проекту, но в нашем решении слишком много проектов, чтобы его можно было обслуживать.Они должны быть расположены автоматически в соответствии с соглашением об именах (x.UnitTest.csproj, y.IntegrationTest.csproj).

Для фона мы работаем с системой сборки, которая передает артефакты (двоичные файлы и т. Д.) Между агентами.Мы компилируем на одном агенте и тестируем на других агентах.Массовое дублирование сборок между тестовыми проектами замедляет процесс сборки.

Что я сделал: 1) У меня есть csproj, который ссылается на большинство тестовых проектов.Это получает двоичные файлы и зависимости в одну папку.2) Я могу идентифицировать все файлы для копирования с помощью этого

<CreateItem
  Include="%(ProjectReference.RootDir)%(ProjectReference.Directory)$(OutDir)*.config">
<Output TaskParameter="Include" ItemName="TestConfigurationFiles"/>
</CreateItem>

<Copy
        SourceFiles="@(TestConfigurationFiles)"
        DestinationFolder="$(OutDir)">
</Copy>

Я пытался сделать самые очевидные вещи, такие как

  • MsBuild task: атрибут RebaseOutputs,переопределяя свойство OutDir.Я могу предоставить задаче msbuild динамически сгенерированный набор выходных данных, но могу построить их только в их папке по умолчанию.

  • Подключение к TargetOutputs задачи msbuild дает только первичную выходную сборку (без зависимостей).

  • Я экспериментировал с «Копировать всегда» для файлов конфигурации.Это помещает их в выходной каталог зависимого проекта как «app.config», а не «dllname.config» и не в окончательный проект.

Решения, которые могут сделать это лучше, могутinclude

  • Предоставьте пример динамического добавления в массив элементов проекта перед компиляцией.

  • Используйте msbuild TargetOutputs для создания списка всех файловв папке (а не только основной выход) и скопируйте в папку назначения.

Сегодня я использую msbuild 3.5.В идеале решение будет работать с msbuild 3.5.Мы скоро переходим на .NET 4 / MsBuild 4, поэтому, если это необходимо сделать в .Net 4, это нормально.

1 Ответ

0 голосов
/ 27 июля 2010

Рассматривали ли вы выравнивание структуры папок при экспорте артефактов?

Что-то вроде:

src/*.UnitTest*/bin/**/*.* -> /testlibs
src/*.IntegrationTest*/bin/**/*.* -> /testlibs
...