Задачки на подумать
As a general guideline, keep assembly dependencies private, and locate assemblies in the application directory unless sharing an assembly is explicitly required.
Это как раз твой случай: продукт, плагин1 и плагин2 - независимые друг от друга продукты (особенно плагин1 и плагин2).
Не устаю ругаться, на тех кто засовывает свои либы в GAC, постоянно только проблемы при каждом обновлении, которые просто не найти.
Какие проблемы? Каждая библиотека имеет свою версию и подпись.
Установка/Удаление/Проверка, права админа и пр. дополнительная морока.
Ты там велосипед изобретаешь? Установка, удаление, права, а также reference counter - все это умеет делать MSI.
Что будет на компе разработчика в GACе после полугода
Все зависит от того, как ты сделаешь установку. Если сделаешь все правильно, то проблем с ГАКом не будет.
Есть такой волшебный процесс?
Каждый придумывает себе свое :) Но вообще надо исходить из того,
что релизнутое уже не меняется и не имеет багов. (понятно, что баги есть везде, но ты тестируешь свой продукт, а не компоненту более низкого уровня)
А еще отделять разработку "мелких" компонент от более "крупных".
Размер компонент тут не важен. Тут важны уровни. И уровней этих может быть много. Очевидно, что чем больше уровней, тем дольше новшество будет доходить до верхних компонент. Но с другой стороны такой подход повышает надежность.
Как раз то и хочется найти решение для всех случаев.
Золотого грааля не существует ;)
При релизе "думать" низзя. Особенно когда у клиентов непрерывное производство.
Думают об этом либо при релизе, либо в момент, когда нарушают обратную совместимость. При чем тут непрерывное производство у клиентов? За "подгон" системы отвечает инсталлятор.
Потому что плагин должен иметь GUI. А плагины можно пользовать из Winforms или WPF, а при тестах и консолью попользоваться.
Ну во-первых, можно делать GUI тесты. В том числе и автомаризированные.
во-вторых, надо четко понимать, что именно ты хочешь протестировать. я не могу вот так с лету придумать случай, когда для тестирования функционала нужен GUI.