2012-05-30 2 views
1

Я строю расширения для стороннего приложения. У нас нет доступа к исходному коду. Visual Studio имеет команду post build для копирования файлов в каталог сборки программы.Как развернуть сборки условно

copy $(TargetDir)$(TargetName).pdb "$(ProgramDropDir)" 
copy $(TargetDir)$(TargetName).dll "$(ProgramDropDir)" 

Когда программа запускает загружает сборки (на самом деле они были загружены, когда это требуется, я думаю, что это из-за JIT компиляции). Наше приложение состоит из 49 сборок. Развертывание их происходит довольно медленно. Я могу обойти медленную сборку, построив ее на уровне проекта. Это строит только ссылочные сборки. Это все еще проблематично 95% времени. Обычно только 1 сборка фактически изменилась ... но все они скопированы.

Как можно улучшить этот процесс? Идеально ...

A. Развертывание сборок только при их изменении.
B. Строить только при изменении файла проекта.
C. копировать только тогда, когда я планирую запустить основное приложение. НАПРИМЕР. Не копируйте при выполнении модульного теста.
D. Сбой сборки при запуске стороннего приложения. Мне нужно закрыть приложение. Это означает, что мне нужно повторно войти в приложение и дождаться его загрузки (его медленный загрузочный зверь).

У меня есть TFS2010. Если это абсолютно необходимо, я открыт для новых инструментов.

+0

будет что-то вроде NuGet [http://nuget.org/] работать? IE: обновлять сборки только версии NuGet при обновлении и просто вытаскивать последний пакет NuGet, когда требуется обновление. –

ответ

0

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

Вы также можете использовать задачу RoboCopy в MSBuild Extension Pack, если хотите сделать это с помощью MSBuild.

B. Если вы используете CI-сервер, вы можете использовать механизм опроса SCM, который запускает сборку всякий раз, когда происходит изменение в SCM.

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

+0

Post build обрабатывает операцию копирования. Я не хочу, чтобы копия возникала вообще, когда я запускал модульный тест. Но из-за того, что он работает в пост-построении, он работает на каждой сборке. Копия предназначена только для стороннего приложения. Поэтому, только когда я планирую протестировать внутри стороннего приложения, я хочу, чтобы произошла копия (действие postbuild). –

+0

@ P.Brian.Mackey Как вы проводите модульные тесты? Они должны использовать уже скомпилированные сборки и не требуют никакой сборки. Может быть, я что-то упустил. –

+0

Я знаю, что NUnit ссылается на сборки таким образом. Я использую MSTest. Проект модуля тестирования ссылается на сборки, которые необходимо протестировать, как и любой другой проект визуальной студии. Когда тесты начинаются, ссылки создаются. Даже если я использовал NUnit, мне все равно нужно собрать сборку, прежде чем я смогу ее протестировать, а это значит, что операция Post-build все еще срабатывает. –

Смежные вопросы