Mono пытался быть двоичным и API-совместимым с реализацией MS. Это означает, что за исключением нескольких внутренних методов и классов поддержки, все API, предоставляемые Mono, должны соответствовать 101 с MS .Net. Это сделано для того, чтобы избежать сложностей, подобных тем, что люди предполагают, что метод существует, потому что он компилируется в Mono, а затем он не работает в MS.Net.
Когда новые участники и разработчики внедряют новый код и функции, он обычно включается в отдельную сборку и проект. Mono.Data, как следует из названия, является таким «расширением», поэтому имеет смысл включить все зависимые сборки, чтобы иметь возможность его построить. Если Mono.Data.dll и его приложения будут работать в MS.Net или нет, это вопрос или проверка документов и их тестирование.
Что касается вашего второго вопроса, я не могу рассказать вам о специфике, но если код не имеет особых инструкций для запуска в Windows, он, скорее всего, потребует много работы для переноса. Как и в случае любого API, большая часть кода не предоставляется общедоступным интерфейсам, и при переносе кода необходимо обойти внутренние функции реализации. Я бы посоветовал вам некоторое время проанализировать, как работает код, а затем попытаться заставить его работать в MS.Net, удалив столько ошибок в коде Mono, сколько это имеет смысл. В конце концов, если код достаточно совместим, вам следует рассмотреть возможность исправления исходного кода Mono с помощью инструкций компиляции и прагм #if! MONO, чтобы избежать проблем для будущих пользователей.