2010-09-11 6 views
0

У меня есть решение, которое создает много исполняемых файлов и сборок, которые должны быть в определенной иерархии папок для работы. В основном все файлы .exe и их сопровождающие DLL-файлы должны быть в одной папке, потому что основной exe будет порождать (через process.start) другие exe-файлы, и они будут динамически загружать сборки.Организация вывода сборки (по центру)?

TS перенаправляет все выходные данные в общую папку, которая отлично работает. В процессе установки все выходные для основного приложения также попадают в один каталог.

Есть ли центральный способ сделать это в решении (без нашего интерфейса)? Моя альтернатива до сих пор заключалась в том, чтобы изменить это в каждом проекте, который кажется - много работы и нестабильности (у меня сейчас около 30 проектов).

ответ

0

От TS вы имеете в виду TFS и MS Build? Почему вы не можете просто настроить, где вывод сборки идет в файлах проекта?

+0

TS = TFS. Я МОГУ сделать это для каждого проекта, но это связано с ошибками (забыв проект) и очень ручным. Я бы предпочел решение с широким выбором центрального решения;) – TomTom

+1

Не думайте, что на этом есть «под ключ», однако файлы проекта и решения - это просто XML, поэтому было бы довольно легко написать простую программу для этого. –

+0

@TomTom, как сказал Фред, намного проще и проще написать собственную служебную программу, чтобы выполнить это. Сэкономит много времени. –

1

В проектах, у вас есть эти основные параметры:

  1. Настройка пути вывода проекта, так что встроенный узел записывается в вашей общей структуре файла.
  2. Добавьте сценарий пост-сборки, который построил сборки xcopy для вашей общей файловой структуры.
  3. Также возможно (как TFS Build) переопределить выходную папку для всей сборки, но AFAIK это можно сделать только в одной папке (как это делает TFSBuild), поэтому вы не можете создать иерархию файлов.

Недостаток 1,2 заключается в том, что для этого необходимо настроить каждый отдельный проект.

Я обычно использую (2), подход «пост-сборки». Причины этого:

  • Ядро сборки остается неизменным. На настольных сборках сборка записывается локально, а на сервере (TFS) ее строит (досадно) перенаправляет все в общую папку. xcopy целевого файла работает независимо от того, как TFS Build мешает выходу.

  • С помощью xcopy вы можете полностью управлять выходом (строить гериархию, а не компилировать все в одну папку) и копировать только те элементы, которые вам нужны. Я предпочитаю собирать только файлы Iwant для моей окончательной установки, чем полагаться на автоматизированный процесс, который будет паковать множество ненужных нежелательных файлов (xml doc и pdb)

  • С VS2010 опция «копировать локальную», кажется, полностью испортить ссылки на файлы. Мы используем наши библиотеки, ссылаясь на предварительно построенные DLL из общей папки, но после копирования локальный VS часто меняет ссылку на «скопированную локальную» DLL в папке отладки вместо папки общих библиотек. Это означает, что любые последующие изменения в библиотеке никогда не подхватываются сборкой! Argh! Единственное решение, которое я нашел, - отключить «копировать локальную» для каждой ссылки.

+0

Любой способ сделать свой выбор (3)?Я был бы в порядке, централизованно перенаправляя все выходные данные в одну папку. Моя проблема с (2) заключается в том, что копии сложны ... и эти события должны ссылаться на другие папки вывода проектов, которые различаются в TFS, поэтому это сложно. Как я буду перенаправлять весь вывод VS в одну папку? Изменение файла решения? – TomTom

+0

(3) Вам просто нужно отредактировать файл .csproj (который является просто скриптом msbuild). См. Принятый ответ на: http://stackoverflow.com/questions/587672/nant-msbuild-custom-output-directory –

+0

Обратите внимание, что для (2) ваши проекты должны xcopy для окончательной иерархии папок. Ссылки на межпроектные выходные данные должны быть настроены так, чтобы указывать на конечную папку hierachy, а не на «промежуточную» папку вывода msbuild, - тогда вы полностью контролируете ссылки на файлы. –

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