mono

2025-12-11 0 641

mono是一个旨在允许开发人员轻松创建跨平台应用程序的软件平台。它是基于C#和通用语言运行时的ECMA标准的Microsoft .NET框架的开源实现。

mono项目是.NET基金会的一部分

重要的

自2001年启动以来, mono Project( mono / mono )(“原始mono ”)一直是.NET生态系统的重要组成部分。微软在2016年收购了Xamarin时成为mono Project的管家。

该mono项目的最后一个主要版本是在2019年7月,从那时起就发布了较小的补丁。最后一个补丁发布是2024年2月。

我们很高兴地宣布,Winehq组织将接任Wine- mono / Mono / mono ·Gitlab(Winehq.org)上游的mono项目的管家。现有的mono / mono和其他存储库中的源代码仍将可用,尽管可以存档存储库。二进制文件将保持长达四年。

Microsoft在Dotnet/运行时仓库中维护了现代的mono运行时叉,并且一直在将工作负载逐步移动到该叉子。这项工作现已完成,我们建议活跃的mono用户和基于mono声道的应用程序框架的维护者迁移到.NET,其中包括该叉子的工作。

我们要认识到, mono项目是Android,iOS,Linux和其他操作系统上的第一个.NET实现。 mono项目是许多操作系统的.NET平台的开拓者。它有助于使跨平台.NET成为现实,并在许多新地方启用了.NET,我们感谢那些在我们面前的人的工作。

感谢所有的mono开发人员!

加入我们在# mono vm频道中的Discord:

内容

  1. 汇编和安装
  2. 使用mono
  3. 目录路线图
  4. 为mono做出了贡献
  5. 报告错误
  6. 配置选项
  7. 使用子模型

建立状态

公共CI:

传统詹金斯CI(不再公开可用):

操作系统 建筑学 地位
Debian 9 AMD64
Debian 9 I386
Debian 9 臂章
Debian 9 Armhf
Debian 9 ARM64
OS X AMD64
OS X I386
视窗 AMD64
视窗 I386
Centos S390X(CS)
Debian 9 PPC64EL(CS)
AIX 6.1 PPC64(CS)
FreeBSD 12 AMD64(CS)

(CS)=社区支持的建筑

汇编和安装

构建软件

请参阅我们在Mac OS X,Linux和Windows上构建mono的指南。

请注意,从GIT构建假设您已经安装了mono ,因此请在尝试从Git构建之前下载并安装最新的mono版本。这是必需的,因为mono构建依赖于工作mono C#编译器(也称为Boottrapping)。

如果您没有工作的mono安装

如果您没有工作的mono安装,则可以尝试采用更风险的方法:获取最新版本的“ mono声道”发行版,其中包含足以运行“ MCS”编译器。您可以这样做:

monolite-latest\”>

 # Run the following line after ./autogen.sh
make get- mono lite-latest

这将适当下载并放置文件,以便您可以运行:

 make

然后,构建将使用make get- mono lite-latest下载的文件。

测试和安装

您可以使用命令运行mono和MCS测试套件: make check

期望找到一些测试套件失败。作为理智检查,您可以将自己的失败与https://jenkins.mo*no-pro*je*ct.com/进行比较。

您现在可以使用以下方式安装mono make install

您可以使用mono -Test -install脚本来验证安装,它可以诊断mono安装的一些常见问题。不遵循这些步骤可能会导致安装损坏。

使用mono

安装软件后,您可以运行一些程序:

  • mono program.exe运行时引擎

  • mcs program.cs C#编译器

  • mono dis program.exe cil拆卸器

有关更多详细信息,请参见mono (1),MCS(1)和mono Dis(1)的人页。

目录路线图

  • acceptance-tests/ – 可选的第三方测试套件,用于验证mono ,以针对更广泛的测试用例进行验证。

  • data/ – 配置文件作为mono运行时的一部分安装。

  • docs/ – 有关mono运行时的技术文档。

  • external/ – 外部库(newtonsoft.json,ikvm等)的外部/ git子模型。

  • ikvm-native/ – IKVM的胶水代码。

  • libgc/ – (已弃用)BOEHM GC实施。

  • llvm/ – 用于集成mono LLVM叉的实用程序files。

  • m4/ – 通用公用事业。

  • man/ – 各种mono命令和程序的手册页。

  • mcs/ – 类库,编译器和工具

    • class/ – 类库(例如System。*,Microsoft.build等)

    • mcs/ – 用C#编写的mono C#编译器

    • tools/ – gacutil,ikdasm,mdoc等工具等。

  • mono / – mono跑时间的核心。

    • arch/ – 建筑特定部分。

    • benchmark/ – 基准集合。

    • btls/ – 为包含Boringssl的BTLS库构建文件。

    • cil/ – 公共中间表示,CIL字节码的XML定义。

    • dis/ – CIL可执行拆卸器。

    • eglib/ – GLIB API的独立实现。

    • metadata/ – 对象系统和元数据读取器。

    • mini/ – 正当编译器。

    • profiler/ – PROFILER实施。

    • sgen/ – SGEN垃圾收集器实施。

    • tests/ – 主要运行时测试。

    • unit-tests/ – 其他运行时单元测试。

    • 运行时代码库中使用的utils/ – 实用程序功能。

  • msvc/ – 基于MSVC / Visual Studio的运行时和BCL构建系统的逻辑。后者目前是实验性的。

  • OS X和Windows mono软件包的packaging/包装逻辑。

  • po/ – 翻译文件。

  • runtime/ – 包含链接mono /和MCS/构建系统的makefile的目录。

  • samples/ – 一些简单的示例程序,用于mono运行时用作嵌入式库。

  • scripts/ – 用于调用mono和相应程序的脚本。

  • support/ – 各种支持库。

  • tools/ – 一系列工具,主要在mono开发过程中使用。

为mono做出了贡献

在提交mono声道更改之前,请查看贡献指南。请特别注意“重要规则”部分。

报告错误

要提交错误报告,请在mono GitHub存储库上打开一个问题。

请使用搜索设施来确保尚未提交相同的错误,并遵循我们有关如何制作好的错误报告的指南。

配置选项

以下是mono可能想使用的配置选项:

  • --with-sgen=yes,no – 世代GC支持:使用SGEN垃圾收集器启用或禁用mono运行时的汇编。

    • 在支持它的平台上,在构建mono之后,您将拥有一个mono -boehm二进制和mono -sgen二元。 mono -boehm使用BOEHM,而mono -sgen使用简单的世代GC。
  • --with-libgc=[included, none] – 选择要使用的默认BOEHM垃圾收集器引擎。

    • 包括:(略微修改的BOEHM GC )这是BOEHM GC的默认值,它是最完整的功能,它将允许mono使用键入分配并支持调试器。

    • :禁用包含Boehm垃圾收集器。

    • 此默认为included

  • --enable-cooperative-suspend

    • 如果传递此标志,则将mono运行时配置为仅使用垃圾收集器的合作模式。如果您不传递此标志,则可以在运行时控制合作GC模式,通过设置mono _ENABLE_COOP_SUSPEND标志。
  • --with-tls=__thread,pthread

    • 控制mono应如何访问线程本地存储,Pthread强迫mono使用pthread API,而__Thread则使用编译器优化的访问权限。

    • 尽管__线程更快,但需要编译器,内核和LIBC的支持。旧的Linux系统不支持__Thread。

    • 该值通常是预先配置的,除非您试图调试问题,否则无需设置它。

  • --with-sigaltstack=yes,no

    • 实验:众所周知,出于您自己的风险,它会引起垃圾收集问题,并且很难再现这些错误。

    • 这控制了mono是否会安装特殊信号处理程序来处理堆栈溢出。如果设置为yes ,则将堆栈溢出变成stackoverflowException。否则,当堆栈溢出发生时,您的程序将收到细分故障。

    • 配置脚本将尝试检测您的操作系统是否支持此。一些较旧的Linux系统不支持此功能,或者您可能需要覆盖自动检测。

  • --with-static_ mono =yes,no

    • 这控制了mono是否应与静态库(lib mono .a)或共享库(lib mono .So)链接。

    • 默认为yes ,并将提高mono程序的性能。

    • 这只会影响“ mono ”二进制,共享库lib mono .So将始终为想要将运行时嵌入其应用程序嵌入的开发人员生产。

  • --with-xen-opt=yes,no – 优化XEN虚拟化的代码。

    • 它使mono生成的代码平均可能会稍慢一些,但是在XEN虚拟化系统下,由此产生的可执行文件将更快地运行。

    • 这默认为yes

  • --with-large-heap=yes,no – 启用大于3GB的GC堆的支持。

    • 这仅适用于BOEHM垃圾收集器,SGEN垃圾收集器不使用此配置选项。

    • 此默认为no

  • --enable-small-config=yes,no – 启用一些调整以减少记忆使用和磁盘占地面积,但以某些功能为代价。

    • 通常,这意味着可以创建的线程数受到限制(256),最大堆大小也减小(256 MB)和其他仍然使mono有用的限制,但更适合嵌入式设备(例如手机)。

    • 此默认为no

  • --with-ikvm-native=yes,no – 控制IKVM JNI接口库是否构建。

    • 如果您打算使用mono使用IKVM Java虚拟机,则使用此方法。

    • 这默认为yes

  • --with-profile4=yes,no – 是否要构建4.x配置文件库和运行时。

    • 这默认为yes
  • --with-libgdiplus=installed,sibling,<path> – 在运行System.Drawing Tests时mono声道在其中搜索libgdiplus。

    • 它默认installed ,这意味着可以通过常规系统设置可以mono库。

    • sibling可以用来指定作为该目录( mono )的兄弟姐妹的libgdiplus。

  • 或者,您可以指定通往libgdiplus的路径。

  • --enable-minimal=LIST

    • 使用此功能来指定您可能不想包括的可选运行时组件。这仅对嵌入需要mono功能子集的mono的开发人员有用。

    • 该列表是应删除的逗号分隔的组件列表,这些列表是:

      • aot :禁用提前汇编的支持。

      • attach :支持mono 。管理组件和VMATTACH API(允许将代码注入目标VM)

      • com :禁用com支持。

      • debug :下降调试支持。

      • decimal :禁用对系统的支持。

      • full_messages :默认情况下, mono带有一个完整的消息,用于错误代码。此功能关闭不常见的错误消息并降低运行时大小。

      • generics :仿制药支持。禁用此功能将不允许mono运行任何包含通用物质的2.0库或代码。

      • jit :从构建中删除JIT引擎,这降低了可执行文件的大小,并要求在执行前用完整的AOT编译虚拟机执行的所有代码。

      • large_code :禁用大型组件的支持。

      • logging :禁用对调试记录的支持。

      • pinvoke :支持平台调用服务,禁用此功能将对使用Dllimport的任何库进行支持。

      • portability :删除对mono _IOMAP的支持,这是用于简化不敏感的移植应用程序的环境变量,并混合了UNIX和Windows路径分离器。

      • profiler :禁用对默认分析器的支持。

      • reflection_emit :Drop System.Reflection.Emit支持

      • reflection_emit_save :在System.Reflection.emit中保存动态创建的汇编(assemblyBuilderAccess.save)的下降支持。

      • shadow_copy :禁用对AppDomain阴影副本的支持(如果您不打算使用AppDomains,则可以禁用此功能)。

      • simd :禁用对mono声道内在库的支持。

      • ssa :禁用SSA优化框架的汇编,以及基于SSA的各种优化。

  • --enable-llvm

    • 这使使用LLVM作为mono的代码生成引擎。将使用LLVM代码生成器和优化器,而不是在时间和提前汇编之前的mono内置代码生成器。

    • 有关此功能的全部详细信息和最新信息,请参见https://www.mono-proj**e*ct.com/docs/advanced/ mono -llvm/。

    • 您将需要建立mono可以链接的LLVM。

  • --enable-big-arrays – 启用具有大于int32.maxvalue的索引的数组。

    • 默认情况下, mono限制与Win32和Win64上的.NET相同,并且限制了数组索引为32位值(甚至在64位系统上)。

    • 在某些需要大阵列的情况下,您可以传递此标志,并将建造mono以支持64位阵列。

    • 这不是默认值,因为它打破了我们通过mono开发周期暴露的c嵌入ABI。

  • --enable-parallel-mark

    • 使用此选项使垃圾收集器能够使用多个CPU来完成其工作。这有助于在多CPU机器上进行性能,因为该工作跨CPU分开。

    • 此选项当前不是OSX上的默认值,因为它遇到了问题。

    • 此选项仅适用于BOEHM GC。

  • --enable-dtrace

    • 在Solaris和MacOS上,X构建了一个mono运行时的版本,该版本包含DTRACE探针,并可以使用DTRACE参与系统分析。
  • --disable-dev-random

    • mono使用 /DEV /随机来获取需要随机数的任何来源的良好随机数据。如果您的系统不支持此,则可能需要将其禁用。

    • 也有许多运行时选项可以控制此功能,请参阅《男人》页面。

  • --with-csc=roslyn,mcs,default

    • 使用此选项配置要使用的C#编译器。默认情况下,配置脚本将选择罗斯林,除非在Roslyn不起作用的平台上(大端系统)选择MC。

      如果您指定“ MCS”,则将使用mono \’S C#编译器。这还允许从源头组成mono的核心编译器和核心库的完整引导程序。

如果指定“罗斯林”,则将使用罗斯林的C#编译器。目前,这使用了罗斯林二进制文件。

  • --enable-nacl

    • 这将配置mono编译器以生成适用于Google本地客户端使用的代码:https://code.google.com/p/nativeclient/

    • 目前,这与mono的AOT引擎一起使用,因为本地客户端尚不支持JIT引擎。

  • --enable-wasm

    • 使用此选项将mono配置为在WebAssembly上运行。它将将主机和目标设置为WebAssembly Triplet。这覆盖了传递给--host--target值,而忽略了config.sub猜测。

      这是一种解决方法,可以使旧的汽车版本使用不认识WASM三重态。

使用子模型

mono引用了几个外部git子模型,例如,已更改以适用于mono运行时使用的Microsoft参考源代码的叉子。

本节介绍了如何使用它。

初始克隆应递归完成,以便所有的子模块也将在单个通过中克隆:

mono \”>

 $ git clone --recursive git@github.com: mono / mono

克隆后,可以更新子模型以减少最新更改。这也可以在最初的非恢复克隆之后完成:

 $ git submodule update --init --recursive

将外部更改提取到子模块中:

 $ cd <submodule>
$ git pull origin <branch>
$ cd <top-level>
$ git add <submodule>
$ git commit

默认情况下,子模型被分离了,因为它们指向特定的提交。在进行更改之前,请使用git checkout移回分支:

 $ cd <submodule>
$ git checkout <branch>
# work as normal; the submodule is a normal repo
$ git commit/push new changes to the repo (submodule)

$ cd <top-level>
$ git add <submodule> # this will record the new commits to the submodule
$ git commit

要切换子模块的存储库(这根本不应该是常见的事情或正常的事情),请首先编辑.gitmodules以指向新位置,然后:

 $ git submodule sync -- <path of the submodule>
$ git submodule update --recursive
$ git checkout <desired new hash or branch>

所需的输出差异是.gitmodules的变化,以反映远程URL的变化,以及您看到COMIL HASH所需更改的 /位置的更改。

执照

有关Microsoft的专利授予的信息,请参阅许可信息的许可证文件和patent.txt文件。

mono商标使用政策

可以在这里找到商标和徽标的mono声道。

下载源码

通过命令行克隆项目:

git clone https://github.com/mono/mono.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 mono https://www.zuozi.net/34291.html

ruby
上一篇: ruby
env
下一篇: env
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务