Я знаю обратное неверно, но если мои работы приложения, использующие Моно, это, как гарантируют, будет работать, если я переключусь на реальное соглашение? В противном случае, где я могу найти список протестов?
И Mono, и .NET являются надмножествами семейства спецификаций ECMA / ISO CLI. Однако ни .NET, ни Mono не являются подмножествами друг друга. И Mono, и .NET добавляют функции поверх ECMA / ISO CLI, но хотя Mono реализует многие дополнения .NET, .NET не реализует никаких дополнений Mono.
Вот несколько примеров:
Обратите внимание, однако, что (за исключением массивов) все они четко различимы по их пространствам имен, поскольку ни один из них не находится в пространствах имен System
или Microsoft
.
РЕДАКТИРОВАТЬ: На самом деле, большинство вышеупомянутых расширений явно предназначены для работы и в .NET. Например, Mono.Simd
также работает на .NET, но без поддержки времени выполнения, которую имеет виртуальная машина Mono, он работает необычно медленно. (По сути, все операции SIMD реализованы в C #, но компилятор Mono обнаруживает эти вызовы и заменяет их соответствующими инструкциями сборки. Таким образом, они работают в .NET, но без специальной обработки они значительно медленнее.) , C # REPL в настоящее время повторно реализуется поверх Reflection.Emit
(на данный момент он вызывает компилятор Mono напрямую), так что в будущем он будет работать на .NET. Gtk # отлично работает в Windows и .NET.
Только библиотека Mono.Tasklet
не может быть реализована в .NET, поскольку для продолжения требуется поддержка на уровне виртуальной машины.
Mono не расширяет API BCL , по крайней мере, не в пространстве имен System
.Следовательно, вы можете быть совершенно уверены, что приложение, использующее только типы из пространства имен System
, будет переносимым без перекомпиляции из Mono в .NET. Конечно, вы не найдете ничего в пространстве имен Mono
, когда окажетесь в мире .NET.
Из Mono FAQ :
Планируете ли вы внедрить и расширить .NET?
Использование хорошей технологии - это хорошо. Расширение технологий в несовместимых способы вредны для пользователей, поэтому мы делаем не планируйте делать несовместимое изменения в технологиях.
Если у вас есть новаторские идеи и вы хотите для создания новых классов мы рекомендуем вы, чтобы эти классы работали правильно и в Mono, и в .NET. Сегодня Mono поставляется с рядом дополнительные библиотеки, которые были разработаны либо членами Mono сообщество или другие группы. В некоторых случаях мы нашли биты из Microsoft будет неполной, но мы избегайте взлома API, вместо этого мы выявить недостающую функциональность в новые сборки (см. Mono.Security)
Нет. Mono включает несколько альтернативных фреймворков пользовательского интерфейса (Gtk #, wxWindows для .NET и т. Д.).
Если вы используете только классы, определенные Microsoft, все будет в порядке.
Mono - это реализация стандарта CLI , как и CLR .
Он включает в себя многие библиотеки, которые вы найдете в .NET BCL, но не те, которые относятся к Windows (WMI - это целый домен, который приходит на ум).
Пока вы придерживаетесь функций, не относящихся к Windows, все будет в порядке.
Команда разработчиков mono создала инструмент, чтобы проверить, должен ли ваш код работать в моно - MoMA , Mono Migration Analyzer.
Что касается использования монокода с компиляторами Microsoft, пока вы включаете библиотеки, которые используете, и не выполняете никаких pInvokes в Linux, все будет в порядке.