Я бы придерживался обычного подхода "каталог для решения, каждый проект в подкаталоге" - использование смеси C # и C ++ не должно изменить это.
Мне нравится создавать подкаталог "lib" (вне каталога решения) и помещать туда внешние зависимости, а затем ссылаться на это местоположение из каждого из проектов. Это помогает синхронизировать все версии.
Разветвите все, так что вы всегда можете проверить всю ветку и собрать ее в согласованную версию.
Как правило, я не переопределяю значения по умолчанию для того, куда собираются файлы - это много хлопот, но у меня есть скрипт NAnt (или любой другой), который выполняет сборку, а затем собирает соответствующие двоичные файлы для распространения.