Mono framework что это
Mono - платформа разработки с открытыми исходными кодами, основанная на Microsoft . NET Framework. Mono позволяет разработчикам, имеющим дело с платформами UNIX , Linux, FreeBSD, Mac OS X, Solaris и Windows , создавать и развертывать кроссплатформенные приложения стандарта . NET Проект Mono спонсируется компанией Novell. Mono включает в себя как средства разработки , так и инфраструктуру, необходимую для исполнения клиентских и серверных . NET -приложений. Mono позиционируется как "средство будущего для разработки Linux-приложений".
Компоненты Mono
Mono состоит из трех групп компонент: 1) компоненты ядра; 2) стек разработки для Mono/Linux/GNOME; и 3) стек компонент Microsoft.
Архитектура среды Mono
Библиотека классов
Сборки и пространства имен
Общеязыковая среда и общеязыковая спецификация
Общеязыковая спецификация (The Common Language Specification - CLS) определена в главе 6 стандарта ECMA-335 и описывает интерфейсы CLI. Компилятор Mono генерирует образ, соответствующий CLS. Образ содержит код на промежуточном языке (the Common Intermediate Language). Исполняющая среда Mono исполняет этот образ.
Just-in-time компиляция
Just-in-time compilation (JIT) - компиляция по требованию. Такой вариант компиляции позволяет компилировать методы и другие элементы программы именно в тот момент, когда они вызываются приложением. Исполняющая среда Mono содержит just-in-time компилятор для следующих архитектур: x86, SPARC, PowerPC, ARM, S390 (32-битная и 64-битная версии), x86-64, IA64 и SPARC-64. Среда выполняет just-in-time компиляцию в машинный код и кэширует этот код на время исполнения приложения. Также можно выполнить предварительную компиляцию и кэширование части кода до исполнения.
Управляемый и неуправляемый коды
Интегрированная среда разработки Mono (IDE)
MonoDoc представляет собой браузер, позволяющий просматривать документацию по API и различные примеры кода (samples). Браузер использует wiki-образный стиль управления документацией, так что разработчики могут дополнять и корректировать статьи.
Проекты, основанные на Mono
Вопросы лицензирования
Rotor
Версия общеязыковой среды Rotor (Shared Source Common Language Infrastructure - SSCLI) позволяет разработчикам изучать детали реализации различных библиотек . NET , реализовывать свои собственные версии общеязыковой среды.
Общеязыковая среда предоставляется предварительно сконфигурированной для работы на платформах Windows , FreeBSD (версия 4.7 и новее) и Mac OS X 10.2. Единственное, что может понадобиться настроить, - это PAL ( Platform Abstraction Layer ).
Текущая версия общеязыковой среды - это SSCLI 2.0. Она содержит большинство классов . NET Framework 2.0.
Итоги
Если удается сделать приложение кросс-платформенным, это всегда приветствуется. Те, кто предпочитают по тем или иным причинам разрабатывать приложения для многих платформ и при этом знают о достоинствах Microsoft . NET , могут использовать Rotor и Mono для более быстрого написания и развертывания безопасных приложений для Linux, UNIX или Mac OS X.
Платформа Mono состоит из нескольких компонентов:
Mono Runtime - среда выполнения ECMA Common Language Infrastructure (CLI). Среда исполнения предоставляет компилятор Just-in-Time (JIT), компилятор Ahead-of-Time (AOT), загрузчик библиотек, сборщик мусора и др.
Mono Class Library – было создано множество классов с дополнительной функциональностью специально для Mono, которые выходят за рамки библиотеки базового класса, предоставляемой Microsoft.
Несмотря на предвзятое отношение разработчиков к платформе Mono, многие известные компании используют его. Например:
- Novell использует Mono для клиентских и серверных приложений;
- Unity Technologies использует Mono в инструменте моделирования компьютерных игр Unity 3D. Это дает возможность создавать кросс-платформенные видеоигры;
- Artisteer использует Mono для переноса своего веб дизайнера на другую платформу. Начиная с версии 2.2, можно запустить свое программное обеспечение с помощью Mono.
Что же предлагает FastReport.Mono?
Давайте рассмотрим детальнее. Итак, с FastReport.Mono можно работать в разных операционных системах. Ну конечно же, Mono кросс-платформенный фреймворк. Поэтому нам доступны системы: Windows, MacOs, семейство Linux.
Для работы с Mono, а соответственно и с FastReport.Mono подходят следующие среды разработки:
Microsoft Visual Studio (под Windows), MonoDevelop (Windows, MacOs, Linux) и Embarcadero Delphi Prism (Windows, MacOs, Linux).
Источники данных, доступные по умолчанию: XML, CSV. А для подключения к базам данных нужно использовать источник данных пользовательского приложения, или внешние коннекторы, устанавливаемые в систему.
Интересные особенности генератора отчетов:
- диалоговые формы – перед отображением отчета можно вывести форму с элементами управления. Таким образом пользователь отчета может задать параметры отображения отчета. Например, отфильтровать нужные значения;
- наследование отчетов – возможность использовать отчет как базовый шаблон для других. Это удобно, когда вы делаете много подобных отчетов. Кроме того, изменения в базовом отчете отобразятся во всех наследованных отчетах. Это тоже можно отнести к плюсам. Ведь не нужно изменять большое количество отчетов, если требуются правки базового шаблона;
- Компонент предварительного просмотра отчета – позволяет просматривать отчет и делать его экспорт, отправлять email, а также управлять просмотром отображая план отчета, переходить между страницами;
- Дизайнер отчета может быть вызван отдельно как самостоятельная программа, может быть вызван во время разработки пользовательского приложения, а также во время выполнения пользовательского приложения. Последний вариант очень интересен. По сути вы встраиваете дизайнер в свою программу и даете пользователю возможность редактировать отчеты самостоятельно.
- Продвинутый режим печати – еще один продуманный инструмент. Настройки печати очень богатые.
Список возможных экспортов отчета достаточно большой:
- Acrobat PDF;
- Images Jpeg/PNG/BMP/GIF/TIFF;
- RichText;
- Word OOXML (docx);
- PowerPoint OOXML (pptx);
- HTML;
- MHT (web archive);
- Microsoft XPS;
- Excel OLE;
- Excel XML;
- Excel binary (xls);
- Excel OOXML (xlsx);
- Comma separated values (CSV);
- DBF (table);
- Open Document Speadsheet (OpenOffice);
- Open Document Text (OpenOffice);
- Email;
- PostScript;
- Json;
- LaTex;
- FTP;
- Text File / Matrix Printer;
- Clouds (DropBox);
- Clouds (Box);
- Clouds (FastReport Cloud);
- Clouds (GoogleDrive);
- Clouds (OneDrive).
Обратите внимание, последние элементы списка – Clouds – это по сути сохранение отчета в облачные сервисы.
Основной разработчик проекта Mono — корпорация Xamarin, ранее Novell. Проект возглавляет Мигель де Икаса, известный разработчик, основатель проекта GNOME. Реализации Mono существуют для следующих операционных систем: Windows, Linux, BSD (FreeBSD, OpenBSD, NetBSD), Solaris, Mac OS X, Apple iOS, Wii. Поддерживаются платформы: s390, SPARC, PowerPC, x86/x86-64, IA-64, ARM, Alpha, MIPS, HP PA. [Источник 2]
Содержание
История
После трех лет работы, 30 июня 2004 года был выпущен Mono 1.0. Моно развился из платформы для настольных приложений Linux в приложение, способное осуществлять поддержку широкого спектра архитектур и операционных систем, включая встроенные системы.
Novell приобрела Ximian в 2003 году. После того, как Novell была приобретена Attachmate в апреле 2011 года, Attachmate объявила о сотнях увольнений работников Novell, ставя под сомнение будущее Mono.
Текущее состояние и функциональность
Moonlight
Внедрение Microsoft Silverlight с открытым исходным кодом, называемое Moonlight, было включено после Mono 1.9. Moonlight 1.0, поддерживающий API Silverlight 1.0, был выпущен 20 января 2009 года. Moonlight 2.0 поддерживает Silverlight 2.0 и некоторые особенности Silverlight 3.0. Предварительный выпуск Moonlight 3.0 был анонсирован в феврале 2010 года и содержит обновления для поддержки Silverlight 3.
Проект Moonlight был оставлен 29 мая 2012 года. По словам Мигеля, два фактора предрешили судьбу проекта: Microsoft добавила «искусственные ограничения», которые «. сделали бесполезным для программирования на рабочем столе . », и технология не получила достаточного сцепления с Интернетом.
Компоненты Mono
Моно состоит из трех групп компонентов:
- Основные компоненты
- Моно / Linux / GNOME стек разработки
- Стек совместимости с Microsoft
Архитектура Framework
Основные компоненты Mono включают:
Механизм выполнения кода
Время выполнения содержит механизм выполнения кода, который преобразует коды байтов ECMA CIL в собственный код и поддерживает несколько процессоров: ARM, MIPS (только в 32-разрядном режиме), SPARC, PowerPC, S390 (в режиме 64 бит), x86 , x86-64 и IA-64 для 64-битных режимов.
Генератор кода отображается в трех режимах:
- Компиляция «точно в срок» (JIT): время выполнения превратит байты ECMA CIL в собственный код при запуске кода.
- Компиляция Ahead (Ahead): этот код включает коды байтов ECMA CIL (обычно они находятся в файле .exe или .dll) и генерирует собственный код, хранящийся в операционной системе, архитектуре и конкретном файле CPU (для foo. exe, он будет производить foo.exe.so в Linux). Этот режим работы компилирует большую часть кода, который обычно выполняется во время выполнения. Существуют некоторые исключения, такие как батуты и другой административный код, которые все еще требуют, чтобы JIT функционировал, поэтому изображения AOT не полностью автономны.
- Полная статическая компиляция: этот режим поддерживается только на нескольких платформах и выполняет процесс компиляции Ahead-of-Time на один шаг дальше и генерирует все батуты, функции обертки и прокси, которые требуются для статического файла, который может быть статически связан и полностью исключает необходимость использования JIT во время выполнения. Это используется на iOS от Apple, в PlayStation 3 от Sony и операционных системах Microsoft Xbox 360.
Начиная с Mono 2.6, стало возможным настроить Mono на использование LLVM в качестве механизма генерации кода вместо собственного механизма генерации кода Mono. Это полезно для высокопроизводительных вычислительных нагрузок и других ситуаций, когда производительность исполнения важнее производительности запуска.
Начиная с предварительного просмотра Mono 2.7, больше нет необходимости выбирать один двигатель над другим во время настройки. Механизм генерации кода может быть выбрана при запуске с использованием аргументов командной строки --llvm или --nollvm , и по умолчанию используется быстрый механизм генерации кода Mono.
Сборщик мусора
Начиная с Mono 2.8, Mono время выполнения осуществляется двумя сборщиками мусора: generational collector (коллектором поколений) и Boehm conservative collector (консервативным коллектором Бемом).
По состоянию на октябрь 2010 года новый коллектор поколений, называемый Simple Generational GC (SGen-GC), стал доступен как часть Mono. Начиная с Mono 3.1.1 это значение по умолчанию. Для версий Mono от 2.8 до 3.1.0 пользователи могут выбрать использование сборщика мусора SGen, передав при запуске ключ -gc = sgen во время выполнения Mono. Этот новый сборщик мусора имеет много преимуществ перед традиционным консервативным сканером. Он использует коллекцию мусора для генерации, в которой новые объекты выделяются из детской, во время цикла сбора мусора все оставшиеся объекты переносятся в пул памяти старшего поколения. Идея состоит в том, что многие объекты являются временными и могут быть быстро собраны, и только несколько объектов - долгосрочные объекты, которые живут на протяжении всей жизни приложения. Чтобы повысить производительность, этот коллекционер назначает пулы памяти для каждого потока, чтобы потоки выделяли новые блоки памяти без необходимости координировать их с другими потоками. Миграция объектов из детского сада в старое поколение осуществляется путем копирования данных из детской в пул старого поколения и обновления любых указателей в реальном времени, указывающих на данные, характеризующие новое местоположение. Это может быть дорогостоящим для больших объектов, поэтому SGen Mono использует отдельный пул памяти для больших объектов (Large Object Section) и использует алгоритм mark-and-sweep для этих объектов.
В настоящее время SGen рассматривает стек и регистрирует консервативным способом и связывает любые объекты, на которые может ссылаться любой из этих корней. Будущая версия Mono точно проверяет управляемый стек, уменьшая количество закрепленных объектов.
Библиотека классов
Пространства имен и сборки
Сборка - физическая упаковка библиотек классов. Это DLL-файлы, как (но не путать с) разделяемые библиотеки Win32. Примерами узлов являются mscorlib.dll, System.dll, System.Data.dll и Accessibility.dll. Пространства имен часто распределяются между несколькими сборками, и одна сборка может состоять из нескольких файлов.
Общая языковая инфраструктура и общая языковая спецификация
Спецификация общего языка (CLS) описана в главе 6 ECMA-335 и определяет интерфейс для CLI, например соглашения, подобные базовым типам для Enum. Компилятор Mono генерирует изображение, соответствующее CLS. Это общий промежуточный язык. Время выполнения Mono берет это изображение и запускает его. Стандарт ECMA формально определяет библиотеку, которая соответствует CLS в качестве основы.
Управляемый и неуправляемый код
Кроме того, Mono доступен в различных операционных системах и архитектурах.
Системные требования
Связанные проекты
Несколько проектов расширяют Mono и позволяют разработчикам использовать его в своей среде разработки. Эти проекты включают:
-
- обертки вокруг встроенного инструментария macOS (Cocoa) (устарело). - набор привязок для программирования macOS. - новые привязки для программирования macOS, основанные на дизайне API MonoTouch.
-
. Моно для операционной системы Android. С привязками для API Android.
- MonoTouch. Моно для iPhone, iPad и iPod Touches. С привязками к API iOS.
-
для Visual Studio. Плагин Visual Studio, который позволяет разработчикам Windows ориентироваться на Linux и macOS прямо из Visual Studio и интегрируется с SUSE Studio.
Другие реализации
MonoDevelop
Браузер MonoDoc обеспечивает доступ к документации API и образцам кода. В браузере документации используется управление контентом в стиле wiki, что позволяет разработчикам редактировать и улучшать документацию.
Xamarin.iOS and Xamarin.Android
Xamarin.iOS и Xamarin.Android, разработанные Xamarin, являются реализациями Mono для iPhone и смартфонов на базе Android. Ранее доступный только для коммерческого лицензирования, после приобретения Microsoft Xamarin в 2016 году, сама среда исполнения Mono была переведена в соответствии с лицензией MIT, и Xamarin.iOS и Xamarin.Android стали бесплатными и открытыми.
Xamarin.iOS
Стек Xamarin.iOS состоит из:
- Разработка SDK: - используется для связывания кода, используемого в окончательном приложении; - собственный компилятор и инструмент, используемый для развертывания на целевом устройстве;
- Инструменты интеграции интерфейса Builder;
- Библиотеки, которые связывают родные API CocoaTouch;
- Xamarin Studio IDE.
Xamarin Studio используется в качестве основной IDE, однако были добавлены дополнительные ссылки на Xcode и iOS-симулятор.
С апреля по начало сентября 2010 года будущее MonoTouch было поставлено под сомнение, поскольку Apple представила новые условия для разработчиков iPhone, которые, по-видимому, запрещают им развиваться на языках, отличных от C, C ++ и Objective-C, и использование среднего уровня между iOS и приложениями для iPhone. Из-за этого будущее MonoTouch и других технологий, таких как Unity, было неопределенным. Затем, в сентябре 2010 года, Apple отменила это ограничение, заявив, что они ослабляют языковые ограничения, которые они установили в начале этого года.
Xamarin.Android
Xamarin.Android (ранее известный как Mono для Android), первоначально разработанный Novell и продолжаемый Xamarin, является частной версией Mono для смартфонов на базе Android. Он был впервые выпущен 6 апреля 2011 года. Mono для Android был разработан, чтобы позволить разработчикам легко писать кросс-платформенные приложения, которые будут работать на всех мобильных платформах. В интервью H-Online Мигель де Иказа заявил: «Наше видение заключается в том, чтобы позволить разработчикам повторно использовать свой код движка и бизнес-логики на всех мобильных платформах и заменять код пользовательского интерфейса для API-интерфейса, специфичного для платформы».
Стек Xamarin.Android состоит из следующих компонентов:
Лицензии
Патенты Mono и Microsoft
Выполнение Mono компонентов, не представленных в ECMA для стандартизации, стало источником проблем, связанных с нарушением патентных прав на протяжении большей части существования проекта. В частности, состоялось обсуждение вопроса о том, может ли Microsoft уничтожить проект Mono с помощью патентных заявок. Это обсуждение стало спорным после того, как Microsoft приобрела Xamarin - основных разработчиков Mono. В июне 2009 года Техническая комиссия Ubuntu заявила, что не видит причин исключать Mono или приложения на основе него из архива или из установочного набора по умолчанию.
Если патентные вопросы когда-либо возникнут, стратегия проекта Mono для решения этих проблем выглядит следующим образом:
- Работайте над патентом, используя другую технику реализации, которая сохраняет API, но меняет механизм;
- Удалите фрагменты кода, которые были охвачены этими патентами;
- Найдите известный уровень техники, который сделает патент бесполезным.
Кроме того, Mono также входит в список программного обеспечения, которое Open Invention Network обязуется защищать.
Руководитель проекта Fedora Пол Фриелдс заявил: «У нас есть серьезные опасения по поводу Mono, и мы продолжим рассматривать его с нашим юрисконсультом, чтобы узнать, нужны ли с нашей стороны какие-либо шаги», но «Мы не пришли к юридическому заключению, которое достаточно для того, чтобы мы решили принять Mono».
В ноябре 2011 года на саммите разработчиков Ubuntu разработчики проголосовали за удаление медиа-проигрывателя Banshee на основе Mono из установки по умолчанию Ubuntu, начиная с Ubuntu 12.04; хотя сообщаемые рассуждения включали проблемы производительности в архитектуре ARM, блокирующие проблемы в ее версии GTK + 3, и, по их мнению, «не поддерживаемая». На решение также повлияло желание удалить Mono из базы распределение, так как остальные программы, зависящие от Mono, gbrainy и Tomboy, также должны были быть удалены. Mono-разработчик Джозеф Майкл Шилдс защищал работу Banshee на ARM, а также утверждения о том, что Banshee не поддерживался в качестве «целенаправленное личное оскорбление» одному из его основных участников.
Программное обеспечение, разработанное с помощью Mono
Ряд видеоигр, таких как The Sims 3 и Second Life для своих языков сценариев, сервер виртуального мира OpenSimulator или игры, созданные с помощью движков Unity или MonoGame, также используют Mono.
Работаем с Mono. Часть 1: Основные принципы Mono, инструменты, создание простейшего приложения
В базовом варианте Mono состоит из нескольких компонентов:
Описание основных компонентов и возможностей Mono
Начиная с версии Mono 2.2 реализована поддержка классов компилятора Mono.CSharp.Evaluator (сборка Mono.Sharp.dll) для создания собственных сервисов компиляции.
Среда исполнения Mono поддерживает инфраструктуру промежуточного языка CLI (Common Language Infrastructure), соответствующую стандарту ECMA-335. Виртуальная машина среды исполнения допускает возможность запуска приложений и сборок, скомпилированных в других системах (например, возможно запускать в Linux без перекомпиляции приложения, созданные при помощи Microsoft Visual Studio для исполнения в Microsoft Windows).
Также, вместо использования виртуальной машины, среда исполнения может быть интегрирована в приложение с целью создания встраиваемой системы, не требующей установки Mono для запуска и обладающей высоким быстродействием. При этом, в приложение включаются только необходимые компоненты среды исполнения.
В качестве сборщика мусора в данный момент используется Boehm's GC, однако в текущей разрабатываемой ветке SVN присутствует совершенно новый сборщик мусора, разработанный специально для Mono.
Установка Mono
Mono входит в репозитории огромного количества дистрибутивов, поэтому проблем с установкой из репозитория возникнуть не должно. Другой вопрос, какие версии располагаются в репозиториях. На данный момент на сайте проекта Mono предлагается скачать бинарные файлы версии 2.4.x. Эти же версии лежат в репозиториях современных дистрибутивов. Последней стабильной версией Mono считается 2.6.3, которая имеется только в виде исходных текстов.
Если есть желание установить Mono 2.6.3, то придется заняться самостоятельной сборкой версии из исходных текстов.
В качестве подопытной системы выберем недавно вышедшую Ubuntu 10.04. Тем не менее пользователям других версий и дистрибутивов это не должно особенно огорчать, потому что разница будет только в менеджерах пакетов и именах пакетов.
Для чистоты эксперимента, чтобы определить все пакеты, которые нужны, возьмем систему Ubuntu 10.04 установленную с нуля и обновленную (при помощи Synaptic или aptitude) до текущего состояния.
Первым делом создадим каталог для исходных текстов и сборки проектов:
Для работы с пространством имен System.Windows.Forms (на классах которого построен графический интерфейс операционных систем семейства Microsoft Windows) необходимо установить библиотеку libgdiplus, которая реализует функции Microsoft GDI+ для Mono. Взять исходные тексты этой библиотеки можно с сайта проекта Mono:
Распакуем исходные тексты и перейдем в каталог проекта:
При базовой установке Ubuntu устанавливается минимальный набор инструментов для разработчика, поэтому необходимо проследить, чтобы нужные инструменты присутствовали в системе. Для установки и работы потребуются компилятор g++, парсер Bison, интерпретатор макроязыка M4, библиотека Glib 2.0, GetText для поддержки интернационализации. Для работы с Mono требуется также Pkg-config. При отсутствии в системе эти пакеты (и их зависимости) нужно будет установить. Для Ubuntu это делается командой:
Для работы библиотеки libgdiplus нужна библиотека libcairo2 версии не ниже 1.6.4. Эта библиотека входит в состав исходных текстов libgdiplus и может быть скомпилирована совместно с ней, однако при наличии более свежей версии рекомендуется пользоваться именно ей. В репозиториях Ubuntu 10.04 лежит libcairo2 версии 1.8.10. Установим ее из репозитория:
Остается только сконфигурировать и собрать libgdiplus. По умолчанию установка производится в каталог /usr/local/bin для библиотеки и /usr/local/include для заголовочных файлов, что не всегда удобно, так как в будущем понадобится настройка переменных окружения LD_LIBRARY_PATH и LD_RUN_PATH. Удобнее, если библиотеки и заголовочные файлы будут расположены в /usr/bin и /usr/include соответственно.
Скачиваем mono runtime:
Рассмотрим наиболее интересные параметры конфигурации исходных текстов:
Этот параметр установлен в yes по умолчанию. При этом mono оптимизмруется для работы под средствами виртуализации Xen. В реальной среде производительность несколько ниже. Мы в нашем случае будем использовать no.
Возможность выделения приложением больших объемов памяти (свыше 3 Гб). По умолчанию no.
Включение поддержки Moonlight — свободного аналога Microsoft Silverlight.
Местоположение библиотеки libgdiplus для поддержки классов System.Windows.Forms. Значение installed означает, что библиотека установлена в системе (как в нашем случае), sibling — исходные тексты библиотеки лежат в каталоге с текстами mono, <path> — библиотека установлена по указанному пути (используется, если библиотека установлена в нестандартный каталог или установлено несколько разных версий в разных каталогах).
Включение поддержки больших массивов, у которых индекс выходит за пределы Int32.MaxValue. По умолчанию такие массивы не поддерживаются даже в 64-битных системах (в том числе и в Microsoft Windows для архитектуры x64).
Включение многопоточного сборщика мусора при наличии нескольких процессоров. По умолчанию сборщик мусора однопоточный. Следует заметить, что разработчики Mono предупреждают, что возможность является экспериментальной и не протестирована тщательно.
Конфигурируем и устанавливаем Mono:
В моем случае изначально сборка закончилась неудачно в связи с тем, что make почему-то не хватило прав, хотя собиралось все в домашнем каталоге пользователя. Если вдруг такое произошло, помогает sudo make вместо make.
Mono Runtime готов к работе.
Создание первого приложения
С целью протестировать работоспособность Mono создадим традиционное приложение Hello World с выводом в терминал и вариант с созданием окна.
Для вывода в терминал воспользуемся методом WriteLine класса Console.
Компиляция должна пройти без ошибок и запуск:
Не забываем указать ключ -pkg:dotnet, подключающий библиотеки, содержащие пространство имен System.Windows.Forms.
на экране появится пустое окно с заголовком “Hello World! This is our first Mono program” и кнопками сворачивания, разворачивания и закрытия.
MoMA — анализатор “чужих” сборок
В этом поможет инструмент Mono Migration Analyzer (MoMA), который можно скачать с сайта проекта Mono.
Для запуска MoMA его нужно распаковать в отдельный каталог и запустить сборку MoMA.exe:
Тестирование сборок на совместимость состоит из пяти шагов и интуитивно понятно, более того реальный шаг всего один — выбор сборок для тестирования, остальные шаги содержат справочную информацию, итоги тестирования и форму для сбора информации о том, как улучшить данный инструмент.
Следует отметить, что MoMA — инструмен достаточно простой, поэтому возможны варианты, что какие-то проблемы в коде найдены не будут, а также возможно нахождение проблемы, которая, тем не менее, не помешает исполнению кода.
Все проблемы, которые находит MoMA можно свести к четырем видам.
- Missing Methods — отсутствующие методы.В сборке присутствует вызов методов, которые не имеют никакой реализации (в том числе даже заглушки) в Mono. Если такое приложение попытаться скомпилировать в Mono, это приведет к ошибке вида: Если же данный код скомпилировать, например, в Visual Studio, а затем запустить в среде Mono, это приведет к исключению System.MissingMethodException при вызове отсутствующего метода.
Бороться с этой проблемой можно двумя способами. Первый состоит в том, чтобы заменить отсутствующий метод другими методами, реализующими ту же задачу. Второй состоит в том, чтобы реализовать отсутствующий метод и, по возможности, предложить его для включения в новую версию Mono.
Если же вызов происходит из COM-объектов, написанных самостоятельно, то должна быть обеспечена их кроссплатформенность, тогда ошибок при исполнении кода не будет. В противном случае лучше изменить реализацию так, чтобы вызовы из COM-объектов не использовались.
Работа с MoMA из командной строки
В случае, если использование графического интерфейса не нужно или невозможно, можно использовать MoMA из командной строки.
При этом указывается параметр --nogui, может быть указан параметр --out с указанием месторасположения отчета об анализе, а затем указывается одна или несколько анализируемых сборок. Например:
Заключение
Читайте также: