Как избежать копирования ссылочных сборок и уметь запускать юнит-тесты - PullRequest
0 голосов
/ 30 октября 2011

Я использую TeamCity для создания продукта .NET.

Я бы хотел взять все результаты решений и собрать их в одну папку.

Длядля этого я хотел бы установить для CopyLocal значение false для всех проектов, чтобы при копировании * / .dll он не копировал избыточные файлы.

У нас большой файл.Файл sln с проектами, большинство из них ссылаются на нашу сборку API, а некоторые ссылаются на другие проекты из решения.

Хотя это нормально для отладки, я хотел бы иметь возможность забирать ТОЛЬКО каждыйвывод проекта и его копирование в какую-либо папку после успешного завершения сборки, без копирования файлов, на которые есть ссылки, в эту папку.

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

Мне кажется, что я не могу решить, как решить эту проблему, возможно, не выполняя сборку дважды (один для запуска тестаs, другой - для получения «чистого» набора папок для копирования).

Есть предложения по управлению такой сборкой?

1 Ответ

1 голос
/ 31 октября 2011

Я не уверен, что вы на самом деле используете для запуска ваших сборок.Вы используете сценарий сборки, такой как msbuild или nant?или используя встроенные шаги сборки TeamCity?

Если вы используете MsBuild, то вы можете получить путь ко всем скомпилированным сборкам, используя следующее:

<MSBuild Projects="@(Solutions)" Targets="Rebuild">
  <Output ItemName="Outputs" TaskParameter="TargetOutputs"/>
</MSBuild>    

Выходы теперь будут содержать полный путь к каждой сборке.Это означает, что теперь вы можете добавить дополнительный шаг, чтобы скопировать эти файлы в другое место для хранения, или вы можете удалить все другие нежелательные файлы (например, чистые) после того, как вы запустили свои модульные тесты, например

<CreateItem Include="$(BuildOutputDir)\**\*.*" Exclude="@(Outputs)">
  <Output TaskParameter="Include" ItemName="FilesToClean"/>
</CreateItem>

<Delete Files="@(FilesToClean)" />

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

...