У вас есть много кода, который не совместим с Mono?В идеале вы хотели бы, чтобы большая часть кода оставалась неизменной, и у вас было бы очень мало случаев, когда вам нужно переключаться между Mono и MS.NET.
Если вам нужен совершенно другой код для Mono против MS.NETВы должны использовать отдельную реализацию общего интерфейса.Например, в нашем приложении мы используем служебную шину, которую можно поменять местами между MSMQ или ActiveMQ.Мы используем ActiveMQ в дистрибутивах Mono и MSMQ в дистрибутивах MS.NET.
Вы сказали, что вам нужно «перенести» ваше приложение на Mono - есть много несовместимого кода.Если вы широко используете P / Invoke или другие функции Windows, это будет немного сложнее.
Мы не поддерживаем версию Mono и версию MS.Net, у нас есть единое дерево кодаэто может быть скомпилировано в любом.Для платформенных программ, которые имеют пользовательский интерфейс, мы используем отдельный проект пользовательского интерфейса для каждой платформы (обычно WPF для Windows и GTK для Linux / Mac - хотя мы начинаем рассматривать MonoMac для Mac).Кроме того, весь наш код является общим.Между платформами нечего обслуживать.