Я использую Visual Studio 2010 для разработки и построения .NET Framework 4.0. Я также использую Managed Extensibility Framework для базовой системы плагинов.Скопируйте DLL-файлы при создании многорежимного приложения MEF
У меня есть 2 решения:
Основное решение с 6 проектов, один исполняемый другой 5 являются библиотеки классов. Они ссылаются друг на друга, и они встроены в папку bin уровня решения (папка bin находится рядом с папками проекта). Таким образом, все встроенные файлы bin находятся в одной папке, а MEF может собирать все DLL-файлы в простой каталог каталогов.
Это прекрасно работает (за исключением 1 вещи, что запуск приложения не перестраивает все остальные проекты, так как они не являются зависимостями, но это не тот вопрос, о котором идет речь).
Другое (расширение) решение имеет 2 проекта, они являются библиотеками классов и должны быть каким-то образом добавлены в каталог, который MEF использует для создания своего каталога.
Существует несколько способов сделать это, я просто не могу найти самый чистый.
Так вопросы решить, являются:
проектов эталонных проектов удлиняющего решения, от первого решения, поэтому я перемещаться бен папкой основного решения на надстройки эталонного экрана и добавлена все необходимые ссылки. Будут ли ссылки обновляться при построении основного решения, или мне нужно будет как-то скопировать DLL-файлы вручную?
- Intellisense должен признать изменение, поэтому после изменения и построения основное решение должно быть распознано, а intellisense должен обновляться при редактировании решения расширения.
- Главное решение построено на собственном уровне и ничего не знает о расширении. Давайте так и будем. Я бы не писал задачу сборки для основного решения, которое копирует dll в папку другого решения.
- Решения размещены на сервере SVN. Было бы большим плюсом, если бы получить решения с ankhsvn на новом компьютере и построить оба решения не потребует дальнейшей настройки.
При создании проектов решения расширения DLL-файлы должны быть скопированы в каталог, который MEF использует для своего каталога (каталог bin основного решения). Было бы хорошо, если бы он также работал над тем, чтобы получить свежую информацию из svn. Это можно сделать с помощью задачи сборки, но что является лучшим способом ссылки на папку другого решения?
- Я думаю, что это не будет большой компромисс, если решения каталоги должны быть рядом друг с другом (и имеют имя по умолчанию), чтобы работать (таким образом я мог бы просто использовать другой уровень ../ ссылаться на нее). Это достойное решение? Есть ли недостатки, о которых я не знаю?
Не можете ли вы добавить все проекты из расширения в основной? –
Нет, основное решение должно быть чистым от всего, что указывает на то, что решение расширения даже существует. – SoonDead
Существует еще один подход к решению проблемы 1. Добавьте «папку решений» в Extension.sln и добавьте зависимые проекты из Main.sln. Затем добавьте ссылки на проекты, а не на выходные DLL. Это решит все пули проблемы 1, но вам нужно быть осторожным, потому что из Extension.sln вы можете изменять зависимые проекты. Вы также сможете отлаживать свой код в более сложном режиме, который будет работать на новой машине разработки без какой-либо дополнительной работы. Тем не менее, я бы пошел на одно решение со всеми 8 проектами, которые прямолинейны. –