В portage главный способ описания зависимостей - это переменная DEPENDS (и RDEPENDS) в файлах .ebuild
В то же время в mono зависимости прописываются внутри сборок (в манифесте).
В процессе компиляции зависимости из исходных текстов должны попадать в скомпилированный код (но на текущий момент не попадают)
Для того, чтобы зависимости из .ebuild-файлов начали попадать в .dll-файлы нужно уметь выполнять следующие операции:
1) глядя на переменные DEPEND и USE вычислить, какие слоты и версии каких пакетов потребуются
2) глядя на категорию, название и слот пакета определить, какую версию .dll он установил
(для этого приёдется слазить в /var/lib/db, найти там где лежит .pc-файл, в нём найти где лежит .dll и из неё считать версию)
(как альтернатива - можно проделать аналогичное по исходным текстам, но это вероятно сложнее)
3) определив, какие версии .dll нужны в качестве зависимостей, нужно вписать их в .csproj-файл, чтобы эти версии попали в assembly (.dll или .exe)
(это самое простое, если бы библиотеки для работы с Xml были реализованы в mono нормально, а не так как они реализованы сейчас благодаря Microsoft)
(так что возможно работу с XML и XPath нужно переписать, потом, когда нибудь, если захочется...)
Конечно, поиск по имени в GAC выглядит проще (всего-то нужно посмотреть код утилиты gacutil)
но такое решение не будет учитывать слоты portage