В дотнете внешние и межпроектные зависимости (PackageReference, ProjectReference) прописываются и ставятся для каждого проекта отдельно. Более того, по умолчанию каждый library-проект также становится самостоятельным NuGet-пакетом, если в настройках включить сборку последнего.
Солюшен - это лишь примочка для объединения нескольких проектов во что-то, что можно собрать одной командой в IDE или в консоли. Ну и открывать сразу всё в IDE тоже удобно.
Лично я рекомендую в большинстве случаев пользоваться подходом "один Git-репозиторий - один солюшен - много проектов". Репозиторий - единица версионирования (т.е. ВСЕ проекты в репе всегда имеют одинаковую версию), проект/пакет - единица управления зависимостями.
Итого имеем следующие выводы:
- вы собираетесь притащить к себе довольно толстые библиотеки, "подружить" которые в рамках одного исполняемого бинарника будет непросто. Т.к. для шарповых MSBuild-проектов каждый проект (csproj) собирается в отдельную сборку (assembly), то логично иметь WPF и WinForms варианты в виде отдельных проектов (и в виде двух разных бинарей на выходе)
- если вы планируете общий релиз для обоих приложений - т.е. когда не бывает так, что допустим WPF-приложение релизится, а WinForms - нет - тогда делайте один репозиторий и один солюшен с несколькими проектами;
- если вы планируете независимый релиз для каждого приложения - тогда другая история, но надеюсь вам это не нужно