Я думаю, вам нужно реорганизовать обязанности. Каждый компонент должен нести ответственность за себя и, следовательно, копировать свою сгенерированную доброту туда, куда ему нужно идти. Таким образом, не имеет значения, если / кто / что / когда / где был построен. Все, что будет обновлено, приведет себя в нужное место.
IMO, другие предложения - нет, так как они обойдут умение компилятора знать, когда перестройка необходима для основного проекта. И, следовательно, убивает любую компиляцию, экономя время. Если ваши проекты «плагинов» являются сборками (а не просто ссылками на проекты из основного проекта), вам не нужно перестраивать основной проект каждый раз, когда плагин перестраивается. Новая сборка будет выбрана в процесс / отладчик без основного проекта, нуждающегося в перестройке.