Папка .mono появилась на диске — что это? (mono.msi)
Данная статья расскажет о предназначении папки .mono, которую вы можете заметить у себя на локальном диске.
Папка .mono — что это такое?
Папка компонента, связанного с .NET Framework, который необходим для работы некоторых приложений, игр. Папка может появиться например после установки игры Robocraft.
Стандартное расположение папки:
Директория может быть скрытой.
На самом деле Mono — некий проект, который занимается системой, основанной на .NET Framework. Простыми словами это компонент, который используется при создании некоторых программ, игр. Само по себе ПО .NET Framework от Microsoft — платформа, которая необходима для работы многих программ, включая игры.
Каталог .mono, расположенный в директории игры Hearthstone:
Также может быть в директории ProgramData:
Папка .mono — можно ли удалить?
Если папка весит немного — не стоит удалять, лучше оставить, она может понадобиться для работы некоторого ПО. Когда директория имеет большой размер — лучше сперва создать точку восстановления, а потом уже удалять.
Точку восстановления создавать очень желательно (в случае проблем сэкономит время и сохранит нервы):
Install Mono on Windows
Mono runs on Windows, this page describes the various features available for users who want to use Mono on Windows as well as using Mono-based technologies on Windows without Mono (like Gtk#).
- Download the latest Windows installer from the download page.
Run the installer and accept the terms of the license. Mono is now installing:
The installer creates a “Open Mono Command Prompt” shortcut under the Mono program group in the start menu. This shortcut starts a command shell with Mono-relevant path information already configured, which means all the Mono tools “just work”.
At this point, it’s a good idea to run through the basic hello world examples on this page to verify Mono is working correctly.
Gtk# is included as part of the Mono installation, this will allow you to create Gtk# applications on Windows with the Mono runtime which you can later deploy into Linux. See the Gtk# page for more details about the toolkit, or go directly to the Gtk# beginner’s guide.
Alternatively, if you only want to use Gtk# on Windows, without Mono, you can use the Gtk# installer for the .NET Framework.
Mono in the Windows 10 Bash
Windows 10 Anniversary Update and greater come with an experimental, optional Linux subsystem that exposes bash as an alternative shell. This can be used to install the Debian/Ubuntu version of Mono alongside or instead of the Windows version. Note that this feature is in beta and you need to manually enable it. For more information about how to install Mono inside Windows Bash and known problems, refer to this issue.
Mono и ОС МСВС
Импортозамещение! Это очень популярное нынче слово затмило даже нанотехнологии! Оно несет как большие перспективы так и множество проблем. Не так давно это коснулось и меня. Мне была поставлена задача запустить наше программное обеспечение на операционной системе ОС МСВС. Очень интересное дело, учитывая, что Линукс я видел последний раз лет 8 назад, а наше ПО написано под .Net.
Знакомство с ОС МСВС
Итак, википедия говорит, что ОС МСВС — это Мобильная Система Вооруженных Сил. А именно, защищенная операционная система общего назначения. Разработала ее организация ВНИИНС. Система создана на базе Linux в соответствии с требованиями Министерства Обороны РФ.
- МСВС 3.0 — 32х разрядная версия с ядром 2.4;
- МСВС 5.0 — 64-х разрядная версия с ядром 2.6.
- ОС МСВС 3.0 ФЛИР.80001-12 изм. №6;
- ОС МСВС 5.0 ЦАВМ.11004-01 изм. №7.
В постановке задачи не была указана конкретная версия системы, поэтому, посоветовавшись с техподдержкой ВНИИНС, была выбрана наиболее актуальная на сегодняшний день ОС МСВС 5.0 ЦАВМ.11004-01 изм. №7.
Примерно месяц ушел на покупку официальной версии и еще несколько дней на подбор “железа” и установку системы. Однозначно можно сказать что ОС МСВС 5.0 не ставится на процессоры х86 и ноутбуки с 2-мя видеокартами.
Так выглядит графическая оболочка МС ОСВС:
- Дата сборки по команде «uname -a»: 01 февраля 2013;
- Ядро: 2.6.32;
- QT: 3.3.8b, 4.8.5;
- gcc: 4.1.2, 4.4.7;
- glibc: 2.5;
- KDE: 3.5.
- ОС МСВС 5.0 создана на основе Red Hat Enterprice Linux или его производных;
- Судя по версии ядра и дате сборки это RHEL 6.3;
- Библиотеки glibc очень старые: от сентября 2006 года;
- Для разработки рекомендуется использовать QT тоже не самой первой свежести.
Можно предположить, что такое состояние дел вызвано трудностями с сертификацией составных частей системы.
- переписывать все под QT либо под glibc;
- попробовать запустить то, что есть, с помощью Mono.
Установка Mono
Идем на сайт проекта и видим там, что для установки нужно выполнить всего лишь 3 команды:
- rpm —import «http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF»
- yum-config-manager —add-repo download.mono-project.com/repo/centos
- yum install mono-complete
Первая команда добавляет ключ подписи для доступа в репозиторий, вторая настраивает репозиторй, третья инсталлирует Mono.
Программное обеспечение устанавливается в ОС МСВС (как в наследнике RHEL) в виде RPM пакетов. Для удобства этого процесса часто используется менеджер пакетов YUM. В состав ОС МСВС входит графическая оболочка менеджера пакетов, но я пользовался консольной версией. Пакеты находятся в репозиториях, которые могут находиться как на локальной машине, так и где-то в сети. Добавив ссылки на репозитории в менеджер пакетов YUM, можно довольно удобно обновлять систему. Как правило, в RHEL и его наследниках репозитории уже добавлены и настроены, однако в ОС МСВС имеется только один репозиторий, расположенный на установочном компакт-диске.
Проблемы начались уже на второй команде. Оказалось, что yum-config-manager отсутствует в системе:
Значит, репозиторий нужно добавить вручную. Они находятся в каталоге /etc/yum.repos.d . Там нужно создать файл <reponame>.repo . Например, mono.repo . В этот файл нужно добавить следующее:
[mono_repository]
name=mono repository
baseurl=http://download.mono-project.com/repo/centos/
enabled=1
gpgcheck=0
После сохранения файла проверяю, что репозиторий добавлен, выполнив команду yum repolist . При этом диск с дистрибутивом должен быть вставлен и смонтирован. Либо должен быть отключен репозиторий на диске: enabled = 0 в файле server.repo .
Однако и теперь ничего не получилось:
Ошибка [Errno -3] Error performing checksum говорит о том, что YUM не может посчитать контрольную сумму. Как выяснилось, репозиторий использует хэш-функцию sha256 , которую и не может посчитать YUM. Опытные люди пишут, что в данном случае нужно поставить библиотеку python-hashlib . Так как репозитории не настроены, я вручную установил вот эту версию.
После этого репозитории заработали, как нужно:
Но выполнить инсталляцию Mono все равно не получается.:
При установке проверяются зависимости пакетов. Оказалось, что инсталляция Mono из данного репозитория требует, чтобы в системе были версии библиотек не ниже:
- GLIBC_2.16
- PNG15_0
- LIBTIFF_4.0
- LIBJPEG_6.2
Можно было бы попробовать обновить все эти библиотеки, однако это может привести к проблемам в работе другого ПО, использующего их.
StackOverFlow подсказал мне другое решение: нужно попробовать поставить более раннюю версию Mono. Оказывается, существует архив версий. Опытным путем удалось определить, что самой свежей версией Mono, которая нормально ставится на ОС МСВС 5.0 ЦАВМ.11004-01 изм. №7 является версия 2.10.2. Репозиторий находится тут.
В итоге, чтобы все установить, нужно сделать следующее:
1. Создать (или поправить) файл <reponame>.repo репозитория в /etc/yum.repos.d Например mono.repo .
Этот файл должен содержать следующее:
[Mono]
name=Mono Stack (RHEL_5)
type=rpm-md
baseurl=http://origin-download.mono-project.com/archive/2.10.2/download/RHEL_5/
gpgcheck=1
gpgkey=http://origin-download.mono-project.com/archive/2.10.2/download/RHEL_5/repodata/repomd.xml.key
enabled=1
2. Выполнить команду yum install monotools-addon-server для установки основных библиотек.
3. Выполнить команду yum install mono-addon-winforms-2.10.2-5.1.x86_64 для установки библиотек winforms.
4. Выполнить команду yum install mono-addon-libgdiplus0.x86_64 0:2.10-6.2 для установки реализации GDI+.
Можно установить и другие библиотеки. Описание состава дистрибутива можно посмотреть тут. Mono устанавливается в /opt/novell/mono . Версия Mono 2.10.2 содержит следующие версии .Net: 2.0, 3.5 и 4.0.
- настроить окружение командой source /opt/novell/mono/bin/mono-addon-environment.sh
- узнать версию командой mono —version
В результате должно получиться так:
Кроме того, можно проверить работоспособность, запустив пару программ.
Проблемы портирования
Чтобы работать в привычной среде, я установил ту же версию Mono для Windows.
Для отладки удобно пользоваться выводом в консоль. Чтобы он отображался, нужно запускать приложение с параметром —debug . Например, mono —debug helloworld.exe .
Чтобы изолировать код, предназначенный только для Mono, я создал в VisualStudio две новые конфигурации MonoRelease и MonoDebug .
В каждой из них я добавил опцию компилятора /define MONO
Теперь можно использовать такую вот конструкцию:
С первого раза, конечно же, ничего не заработало. В первую очередь — получение имени процессов:
Этот код возвращает количество таких же запущенных в системе процессов. Проблема решилась, путем игнорирования исключений от не нужных нам процессов.
При этом код продолжил выполнять свою функцию.
Затем на форме “уехали” кнопки. Должно быть так:
А получилось так:
Это решилось небольшим изменением расположения элементов на форме:
Также были проблемы с путями. В Linux используется символ ‘/’ для разделения директорий, а в Windows ‘\’ . Проблема решается использованием System.IO.Path.DirectorySeparatorChar . Это статическое поле всегда имеет правильное значение на любой операционной системе.
Но самой главной проблемой стал маршалинг. В нашем ПО Marshal.StructureToPtr и Marshal.PtrToStructure используются для сериализации специально размеченных классов в байтовый массив и обратно для передачи по сети. Причем классы имеют сложную иерархию и вложенность. Microfoft .NET с этой задачей справляется “на ура”, а Mono не смог. Я думаю, что это следствие различий в работе с памятью.
В итоге пришлось переписывать весьма внушительную часть кода, заменяя автоматическую сериалиацию на “ручную” сборку класса из массива.
Результат
В результате задача была решена. Непосредственно на портирование ушло около 2-х недель. Еще где-то неделю заняли исследования процесса установки Mono. И месяц заняла покупка операционной системы.
Что дальше?
А дальше нужно формировать собственный репозиторий, который автоматически будет устанавливать Mono и само ПО. После этого должна быть сертификация…
Но, как обычно, все поменялось на самом интересном месте. В самом разгаре работы оказалось, что ОС МСВС уже не актуальна. Нужно все делать на AstraLinux… А это уже немного другая история.
В чем смысл Mono в Windows
Это может быть глупый вопрос. но я просто смотрел в проект Mono, и у них есть раздел об установке Mono на Windows. Но, поскольку Windows, очевидно, уже имеет .NET runtime, может ли кто-нибудь сказать мне, в чем именно смысл иметь Mono для Windows? Это помогает в кросс-платформенной разработке или что-то в этом роде?
12 ответов
поскольку Mono не реализует .Net 100% так же, как MS .Net Framework, хорошо, что вы можете протестировать Mono без необходимости запуска в Linux. Также Mono имеет привязки для создания форм с GTK, которые MS не поддерживает.
есть несколько функций Mono, которые .NET не имеет.
Mono высоки модульно. Вы можете разбить его на мелкие кусочки и только развернуть ровно те части, которые вам нужны. Не нужна система.В XML? Ладно, все кончено.
Mono встраивается. Вы можете разместить его внутри приложения C/C++, чтобы позволить пользователям создавать сценарии из безопасной управляемой изолированной среды. Самый известный пример этого-mod_mono, который размещает Mono внутри Apache веб-сервер, и как ASP.NET реализуется в Mono, например. Эта функция отлично сочетается с упомянутой выше модульностью.
Это уже упоминалось: статическая связь. и идет вместе с modularization.
компилятор как Служба-это еще один. Андерс Хейльсберг уже давно говорит об этом!—3—>долго времени, и может быть, просто, возможно, он будет готов к C# 5.0. Ну, Mono уже есть он и на самом деле имел это в течение многих лет.
Мигель де Икаса, ведущий разработчик Mono также имеет инициативу, которую он называет «объятия и Extend.NET», который расширяет CLI способами, которые (в настоящее время) невозможны с другими реализациями CLI (включая .NET). До сих пор, объятия и Extend.NET имеет три особенности.
Mono.Simd, который дает безопасный и контролируемый доступ к инструкциям SIMD базового процессора (например, SSE на Intel или AltiVec на PowerPC). Использованный для игр и Графика.
64-битные индексы массива, которые разрешены спецификацией ECMA, но Mono-единственная виртуальная машина, которая фактически предоставляет их. Используется в суперкомпьютерах.
и совсем недавно, продолжения. На самом деле это первый раз, когда Mono выходит за рамки спецификации: индексы длинного массива совершенно действительны в соответствии со спецификацией и Mono.Simd также работает на каждой CLI-совместимой реализации (хотя очень S-L-O-W), но моно.Tasklet должен специальная поддержка от виртуальной машины, которая не является частью CLI или .Сеть. Это используется для игровой логики и, например, во второй жизни.
Mono does some things the .Net doesn’t. например, mono поддерживает статическую компоновку, чтобы вы могли создавать, компилировать и распространять приложение, не требуя отдельного установщика времени выполнения. Если вы создали приложение, чтобы полагаться на mono, чтобы быть кросс-платформенным, есть несколько различий, и поэтому использование mono в Windows является большей гарантией совместимости.
.Net does some things that mono doesn’t. в BCL есть несколько мест, которые еще не портированы для mono. Если вы хотите приложение, которое будет работать на mac / linux вы, вероятно, хотите сначала разработать для mono, даже если вы делаете работу в windows.
Если вы хотите разработать кросс-платформенное приложение на C#, то использование реализации Microsoft не самая умная вещь, так как нет полностью совместимой Альтернативы для других платформ.
таким образом, использование Mono в Windows для разработки приложений гарантирует, что у вас будет мало проблем с переносом его на другую ОС (при условии, что вы избегаете других ям, таких как P/Invoke).
почему поддержка Windows, когда вы можете запустить реальную вещь?
существуют различные причины:
поддержка Windows помогает нам идентифицировать портативные части Mono из непереносимых версий, помогая Mono стать более портативным в будущее.
Это помогает нам, так как мы можем изолировать проблемы в моногородах по разбиение проблемы (это проблема времени выполнения или проблема ОС?).
около половины участников Mono являются разработчиками Windows. У них есть много различных причин для внося вклад в усилия, и мы очень важно, чтобы эти разработчики запускают среду выполнения в Windows не заставляя их использовать новый операционная система.
Mono не сильно изменяет реестр windows, обновляет системные библиотеки DLL, установка DLL в Windows / System32 путь.
Это помогает Разработчики на базе Windows, чтобы проверить свой код под Mono перед развертыванием в Linux.
Mono и применения которые врезают Mono можно раскрыть без установщик (вы можете «xcopy» развернуть применение и необходимое Mono файлы без установки .NET время выполнения.)
некоторые люди использовали его, потому что им не разрешено устанавливать .Net framework на своих ПК с Windows из-за количества реестра и системных файлов, которые он делает. (В плотно контролируемых средах.)
Mono, с другой стороны, автономно содержится в программных файлах и записывает только раздел реестра с его путем (который не требуется запускать).
Я думаю, что это глупо, но это то, что нам сказали несколько пользователей.
Это в основном там, как помощь в разработке моно приложений для моно конкретных библиотек. Также за помощь в продвижении дела, чтобы разработчики могли работать в своей естественной среде при разработке для Mono.
хотя это не представляет широкого интереса, есть несколько случаев, когда mono имеет улучшения по сравнению со стандартной средой выполнения Microsoft. Мигель выступил с докладом о некоторых из них в PDC в этом году:
см. эти сообщения:
также, Даже если у вас есть программа, динамически связанная с Mono, вы можете скомпилировать ее .exe и Mono runtime на pendrive и goto другой компьютер без .NET / Mono установлен, и запустите эту программу на новом ПК без установки во время выполнения. ie, это приводит к портативным приложениям (особенно полезно в качестве портативных приложений USB pen drive) Это невозможно .Сеть. У вас должна быть установлена среда выполнения .NET определенным способом установки, т. е. среда выполнения, содержащая папку copy и paste not вероятный.
Я думаю, главная причина они сделали это, чтобы они могли работать .Net приложений на Mono и .Чистый бок о бок, чтобы сравнить их. Кроме того, есть несколько приложений, которые зависят от библиотеки Mono.
чтобы добавить к многочисленным причинам, упомянутым в других ответах, Mono для Windows может потребоваться установить на Wine, чтобы позволить запускать приложения .Net внутри Wine.