目录

  • 在Windows上编译Mono
    • 安装环境
    • 下载Mono源码
    • 预配置编译安装说明
    • 详细的编译说明
    • 启用BTLS作为Windows构建的加密后端
    • 为Windows版本启用LLVM
    • 使用monolite代替预装的Mono发行版
    • 使用 Visual Studio 安装 Mono
      • 对于Visual Studio 2015 64位Mono Runtime构建:
      • 对于Visual Studio 2017 64位Mono Runtime构建:
      • Visual Studio MSBuild构建属性
      • 配置make为使用Visual Studio构建Mono运行时
    • 运行测试
    • 安装
    • 参考:

由于.NET平台支持多种语言,而微软为了解决不同语言之间数据类型兼容问题,在CLR中提供了MSIL机制(微软中间语言),不论是哪种语言,它们的数据类型都会被转化为中间语言。
*
其次,程序员们会发现,在.NET应用程序(WinForm,ASP.NET)第一次运行的时候会比较慢,这是因为在CLR中存在一个名为JIT的工具(Just
In Time Compiler,即时编译器),JIT会将中间语言编译为对应平台的本地代码,以提高运行速度。
*
通过上面的分析,我们可以发现,想让.NET能跨平台,取决于JIT是否能够将MSIL解释成对应平台的本地代码,即:不同的平台需要安装不同的CLR。虽然,.NET可以跨平台的概念是由MS提出来的,但是MS只提供了一个Windows的实现,即:CLR,其实平台的CLR产品MS并没有开发。
*
因此,所谓的MONO其实就是第三方开发的,功能等同于CLR的一个.NET RunTime,MONO提供了不同平台的JIT实现。

在Windows上编译Mono


在Windows上编译Mono需要按照Cygwin。您还需要Visual Studio 2015或Visual Studio 2015 Build Tools 来进行命令行生成。当然,Visual Studio 2017也同样支持上述操作。

注意,以下说明适用于Cygwin。如果使用WSL(Windows Subsystem for Linux,适用于Linux的Windows子系统)代替Cygwin,则需要将相应的软件包安装到WSL环境中。

在Cygwin或WSL环境中,无需任何先决条件就可以使用Visual Studio构建Mono运行时和BCL,有关详细信息,请参见在不使用Cygwin或WSL的情况下构建Mono。

注意,要完整构建和执行测试,仍然需要如下所述的Cygwin环境。

安装环境


  • 在Windows 10设置应用中启用开发者模式:搜索检查更新,选项卡【更新和安全】>【开发者模式】

  • 下载按照64位Cygwin

  • 安装Visual Studio 2015或更高版本 ,也可以下载Community Edition。

  • 下载并安装Windows版Mono,也可以按照以下说明使用或monolite进行构建:
    在cmd.exe中运行以下命令以安装Cygwin和依赖包:

setup-x86_64.exe -P autoconf,automake,bison,gcc-core,gcc-g++,mingw64-i686-runtime,mingw64-i686-binutils,mingw64-i686-gcc-core,mingw64-i686-gcc-g++,mingw64-i686-pthreads,mingw64-i686-w32api,mingw64-x86_64-runtime,mingw64-x86_64-binutils,mingw64-x86_64-gcc-core,mingw64-x86_64-gcc-g++,mingw64-x86_64-pthreads,mingw64-x86_64-w32api,libtool,make,python,gettext-devel,gettext,intltool,libiconv,pkg-config,git,curl,wget,libxslt,bc,patch,cmake,perl,yasm,unzip

确保已经配置好GIT,避免行尾出现问题:

git config --global core.autocrlf input

下载Mono源码


第一步是直接从GitHub仓库下载Mono源码,PREFIX您是Mono的安装位置(有关详细信息,请参见下文):

export PREFIX=[mono installation location]
export PATH=$PREFIX/bin:$PATH
git clone https://github.com/mono/mono.git
cd mono

预配置编译安装说明


根据预配置的构建说明,设置默认的Visual Studio Mono runtime,mingw Mono runtime和Mono
BCL,并安装到PREFIX路径中。有关进一步详细的构建配置和说明,请参阅下一节。完成以上部分中的所有步骤后,从Cygwin命令提示符运行以下命令集之一。

64位Mono Runtime:

./autogen.sh --prefix=$PREFIX --host=x86_64-w64-mingw32 --enable-msvc --disable-boehm
make -j4
make install

32位Mono Runtime:

./autogen.sh --prefix=$PREFIX --host=i686-w64-mingw32 --enable-msvc --disable-boehm
make -j4
make install

以上都使用 SGEN GC 和 default BCL profile (net_4_x)。

详细的编译说明


如果上述任意一组预配置的构建说明与需求配置不符,则本节将概述详细的逐步安装说明。
安装时将使用现存的Mono发行版所在的路径(PREFIX),但在编译完后会被替换掉。注意,如果想保持现有的Mono发行版本不变,请把将要安装新版本的路径(PREFIX)另行设置。

可以仅配置路径为指向现有Mono发行版,而无需指定PREFIX,然后make install将内部版本安装到默认位置。

另一种选择是在没有现有预装Mono发行版的情况下进行构建,有关monolite更多详细信息,请参阅参考资料部分,或描述如何在MONO_EXECUTABLE环境变量中使用Visual Studio build Mono运行时作为编译的一部分。

以下配置步骤显示了受支持的不同Mono构建配置。

  • 使用SGEN GC和默认BCL配置文件(net_4_x)编译的64位Mono Runtime(Boehm GC在64位Windows版本上不受支持):
./autogen.sh --prefix=$PREFIX --host=x86_64-w64-mingw32 --disable-boehm
  • 使用SGEN GC和默认BCL配置文件(net_4_x)编译的32位Mono Runtime
./autogen.sh --prefix=$PREFIX --host=i686-w64-mingw32 --disable-boehm
  • 使用Boehm GC和默认BCL配置文件(net_4_x)的32位Mono Runtime
./autogen.sh --prefix=$PREFIX --host=i686-w64-mingw32

注意,32位Mono运行时支持SGEN和Boehm GC。Boehm
GC由于遗留原因仍然可用,但在64位Windows构建中不支持。建议将SGEN GC用于32位和64位Windows版本。

启用BTLS作为Windows构建的加密后端

Windows上的Mono支持BTLS库作为SSL / TLS的备用加密后端。它不是默认的替代方法,必须启用它才能构建并由Mono运行时使用。要启用BTLS,请输入–enable-btls回到autogen.sh上面的步骤。

BTLS编译将为Visual
Studio编译添加一些其他先决条件。获取其他所需软件包的最简单方法是安装并使用Chocolatey软件包管理器。有关如何将Chocolatey软件包管理器安装到构建系统中的说明,请参阅这里。

安装Chocolatey之后,将以下软件包添加到构建系统:

choco install cmake

作为可选选项,为在构建BTLS使用汇编程序优化,需要安装其他软件包。在没有这些软件包的情况下,仍然可以使用Visual Studio作为cmake构建生成器进行构建,但是该配置将无法构建汇编程序优化的加密功能。

choco install activeperl
choco install ninja
choco install yasm

确保它们对于Visual Studio使用的构建环境都是可见的(重新启动构建中使用的任何命令提示符或Visual Studio IDE)。

为Windows版本启用LLVM

Windows上的Mono以几种不同的构建组合支持LLVM。在Windows交叉编译器构建时,host为Win32 但目标平台并非Win32,则可以使用标准LLVM构建指令。(host == Win32 but target != Win32

对于常规Windows构建,主机与目标平台一致时(host == Win32 target = Win32),只有64位 Visual Studio构建支持LLVM。要启用LLVM,请用
--enable-llvm转到autogen.sh上面的步骤。

Windows构建支持除之外的大多数LLVM配置标志–enable-loadedllvm。如果使用进行配置–with-llvm,则Visual Studio构建将使用所指向的预构建LLVM版本,llvm-config.exe而不是将内部LLVM版本构建为Visual Studio构建的一部分。

注意,由于只有64位 Visual Studio版本支持常规Windows版本的LLVM,因此将在autogen.sh输出中生成一条警告,指示mingw版本禁用LLVM。从Visual Studio(使用Win32构建配置)构建不受支持的构建配置时,也会生成类似的警告。

还有两个MSBuild属性可以直接控制Visual Studio版本中LLVM的使用(以防autogen.sh不使用或需要被覆盖)。

MONO_ENABLE_LLVM

设置为true时,启用Visual Studio LLVM构建。可以显式传递给MSBuild或进行设置mono.props以强制LLVM构建。

MONO_EXTERNAL_LLVM_CONFIG

当设置为指向的预构建版本的路径时llvm-config.exe,将使用指定的LLVM构建,而不是作为常规Visual Studio Mono运行时构建的一部分进行本地内部LLVM构建。可以显式传递给MSBuild或进行设置mono.props以强制LLVM构建。

其他先决条件仅在将LLVM作为Visual Studio Mono运行时构建的一部分进行构建时适用。如果使用–with-llvm配置选项或MONO_EXTERNAL_LLVM_CONFIG MSBuild属性,则不需要其他先决条件。

LLVM构建将为Visual Studio构建添加几个其他先决条件。获取其他所需软件包的最简单方法是安装并使用Chocolatey软件包管理器。有关如何将Chocolatey软件包管理器安装到构建系统中的说明,请参阅这里。

安装Chocolatey之后,将以下软件包添加到构建系统:

choco install cmake
choco install python2

可选,默认情况下,LLVM构建会将Visual Studio用作cmake构建生成器。构建也支持忍者作为cmake构建生成器。为了使用忍者,将以下软件包安装到构建系统:

choco install ninja

确保它们对于Visual Studio使用的构建环境都是可见的(重新启动构建中使用的任何命令提示符或Visual Studio IDE)。

使用monolite代替预装的Mono发行版

如果没有Mono发行版,则可以使用进行构建monolite。在运行之前,只需运行以下命令make:

make get-monolite-latest

使用 Visual Studio 安装 Mono

可以使用Visual Studio和msbuild构建本机运行时库。但是,.NET库和测试当前必须使用在Cygwin中构建make。下面的步骤描述了在类库和测试以及在Cygwin中运行测试套件时,如何在Visual Studio中构建运行时库以及如何使用Visual Studio构建的Mono可执行文件。

  • 使用Visual Studio生成64位Mono
    msvc\mono.sln在Visual Studio IDE中打开Mono解决方案。使用Release和x64平台配置重建解决方案。有关命令行构建,请参见下文。

  • 使用Visual Studio构建32位Mono
    msvc\mono.sln在Visual Studio IDE中打开Mono解决方案。使用Release和Win32平台配置重建解决方案。有关命令行构建,请参见下文。

  • 从Visual Studio命令行构建Mono
    可以从命令行msbuild.exe直接运行,而不是从Visual Studio IDE中进行构建。建议从Visual Studio开发人员命令提示符运行构建,以获取正确设置的构建环境。

对于Visual Studio 2015:
"%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"从构建中使用的命令提示符运行,或从开始菜单(如果已安装)使用“ VS2015的开发人员命令提示符”启动新命令提示符。

对于Visual Studio 2017:"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"在生成时使用的命令提示符下运行,或从开始菜单(如果已安装)使用“ Developer Command Prompt for VS2017”启动新命令提示符。

注意,安装的Visual Studio文件的路径可能会有所不同,具体取决于安装位置和Visual Studio版本。

使用SGEN GC的Visual Studio 2015 32位Mono运行时发行版示例:

msbuild.exe /p:PlatformToolset=v140 /p:Platform=Win32 /p:Configuration=Release /p:MONO_TARGET_GC=sgen msvc/mono.sln

使用SGEN GC的Visual Studio 2015 64位Mono运行时发行版本的示例:

msbuild.exe /p:PlatformToolset=v140 /p:Platform=x64 /p:Configuration=Release /p:MONO_TARGET_GC=sgen msvc/mono.sln

使用SGEN GC的Visual Studio 2017 32位Mono运行时发行版示例:

msbuild.exe /p:PlatformToolset=v141 /p:Platform=Win32 /p:Configuration=Release /p:MONO_TARGET_GC=sgen msvc/mono.sln

使用sgen GC的Visual Studio 2017 64位Mono运行时发行版示例:

msbuild.exe /p:PlatformToolset=v141 /p:Platform=x64 /p:Configuration=Release /p:MONO_TARGET_GC=sgen msvc/mono.sln

还有一个可用于msbuild.exe从Visual Studio构建环境运行的构建脚本msvc\run-msbuild.bat。该脚本根据VisualStudioVersion环境变量选择Visual Studio版本工具链。

对于Visual Studio 2015 64位Mono Runtime构建:

set VisualStudioVersion=14.0
msvc\run-msbuild.bat "/p:Configuration=Release /p:Platform:x64 /p:MONO_TARGET_GC=sgen /t:Build"

对于Visual Studio 2017 64位Mono Runtime构建:

set VisualStudioVersion=15.0
msvc\run-msbuild.bat "/p:Configuration=Release /p:Platform=x64 /p:MONO_TARGET_GC=sgen /t:Build"

注意,虽然可以msbuild.exe从Cygwin环境运行,但不建议这样做,因为该构建可能会从Cygwin而非Windows环境中获取构建工具和依赖项。但是msvc/run-msbuild.sh,可以从Cygwin调用一个构建脚本,该脚本将尝试在运行之前设置原始Windows环境msbuild.exe

Visual Studio MSBuild构建属性

与常规autogen.sh配置步骤相比,使用Visual Studio构建Mono运行时提供了许多其他选项。这些属性可以显式传递到MBuild或在mono.props属性文件中设置,由Mono Visual Studio构建读取。
*
也可以通过“属性管理器”,“视图”->“其他Windows”->“属性管理器”在Visual Studio IDE中更改属性值,在Mono项目下打开Mono属性表(任何配置都可以),然后选择“公共属性”->“用户宏”。更改值后,请选择“确定”,所有Visual Studio构建配置应相应更新。如果mono.props在Visual Studio中加载解决方案时直接在中更改了属性值,则在重新加载解决方案之后才会进行更改。如果使用IDE的“属性管理器”对话框更改了属性值,则更改将直接应用于已加载的解决方案。

MONO_BUILD_DIR_PREFIX
建立树的位置。进行更改以启用源树外构建,例如c:\mono-build\。默认值是.\build\指构建将最终以mono-root\msvc\build
MONO_TARGET_GC
GC用于build,sgen或boehm。注意,boehm仅在32位构建配置中受支持。所有构建配置的默认值为sgen。
MONO_USE_STATIC_C_RUNTIME
使用静态c运行时链接Mono二进制文件。如果为false,则所有二进制文件和库都将使用动态c-runtime链接。默认值为false。
MONO_USE_STATIC_LIBMONO
使用静态libmono链接Mono二进制文件。如果为false,Mono二进制文件将使用动态libmono链接。默认值为false。
MONO_ENABLE_LLVM
Mono运行时将链接并包括LLVM。如果未设置MONO_EXTERNAL_LLVM_CONFIG,则这还将构建Mono LLVM存储库,作为常规Mono运行时构建的一部分。设置为false时,Mono运行时将不会链接并包含llvm库。默认值为false。

注意,也可以使用,通过标准配置来设置此选项--enable-llvm
MONO_EXTERNAL_LLVM_CONFIG
使用外部预构建LLVM库而不是内部构建。注意,这需要设置MONO_ENABLE_LLVM否则将无效。默认值为空。

注意,也可以使用,通过标准配置来设置此选项--with-llvm=full-path-to-llvm-config.exe
MONO_ENABLE_BTLS
Mono运行时将链接并包含BTLS。将此值设置为true还将作为常规Mono运行时构建的一部分构建Mono BTLS存储库。设置为false时,Mono运行时将不会链接并包含BTLS。默认值为false。

注意,由于BTLS支持是BCL构建的一部分,因此在进行Mono运行时构建时仅进行设置将不会在BCL构建中包括所需的BTLS支持。建议将其–enable-btls用作配置步骤的一部分,因为这将确保BCL和Mono运行时构建中都包含BTLS支持。

配置make为使用Visual Studio构建Mono运行时

为了使在构建BCL和测试时使用Visual Studio构建Mono运行时,请将MONO_EXECUTABLE环境变量设置为Visual Studio构建Mono运行时。切换到先前使用的Cygwin Shell并运行:

export MONO_EXECUTABLE=/cygdrive/c/mono-source-location/msvc/build/sgen/x64/bin/Release/mono-sgen.exe

注意,以上路径将根据源位置,构建位置,32/64位构建配置和使用的GC而变化。上面的示例为配置为使用SGEN
GC的64位发行版Mono运行时使用默认的构建位置。

构建Mono mingw运行时,BCL和测试
切换到先前使用的Cygwin Shell并运行:

make -j4

注意,即使已经构建和配置了Visual
Studio构建Mono运行时,仍将构建mingw构建Mono运行时。但是,由于MONO_EXECUTABLE已配置,mingw运行时将不会用作BCL或测试版本的一部分。

已知问题:“未能创建符号链接”
如果make V=1成功运行BCL之后运行并看到此消息:

make[8]: Entering directory '/home/user/work/mono/mcs/class/corlib'
CYGWIN=winsymlinks:nativestrict ln -s /home/user/work/mono/mcs/class/lib/build-win32 /home/user/work/mono/mcs/class/lib/build
ln: failed to create symbolic link '/home/user/work/mono/mcs/class/lib/build': Operation not permitted
make[8]: *** [../../build/library.make:336: ../../class/lib/build/.stamp] Error 1

您需要Developer Mode在Windows 10设置应用程序(更新和安全性->对于开发人员选项卡)中启用该功能,该应用程序将允许您的用户创建没有管理员权限的符号链接。

如果您使用Windows的早期版本,则需要以管理员身份运行该版本。

运行测试

确保MONO_EXECUTABLE已设置为使用Visual Studio build Mono运行时,请参见上面的说明。为了运行和通过所有测试,Cygwin外壳将需要提升的权限。如果没有其他权限,将确定一些测试失败。

make check

安装

make install

参考:

compiling-mono/windows

其他笔记 - Mono for Windows 跨平台 Runtime 在Win10上编译和安装相关推荐

  1. RK3399学习笔记 1.0.3---python环境 Firefly Core-3399pro-jd4 Win10上RKNN工具安装

    RK3399学习笔记 1.0.3---python环境 Firefly Core-3399pro-jd4 Win10上RKNN工具安装 读取模型各层 1,最好在Conda下新建一个虚拟环境进行安装. ...

  2. windows上编译和安装hadoop2 (一)

    2019独角兽企业重金招聘Python工程师标准>>> 本文操作来自hadoop2官方wiki 博主进行了稍许整理,另外遇到一些问题,参考搜索引擎 一.编译Hadoop 1.1 部署 ...

  3. 学习笔记(01):大数据视频_Hive视频教程(上)-Hive安装_其他操作命令

    立即学习:https://edu.csdn.net/course/play/20038/255179?utm_source=blogtoedu  

  4. 如何在windows下成功的编译和安装python组件hyperscan

    本文分享自华为云社区<Windows下python组件hyperscan的编译与安装>,作者:安全技术猿. 什么是Hyperscan: hyperscan 是英特尔推出的一款高性能正则表达 ...

  5. Xamarin 学习笔记 - 配置环境(Windows iOS)

    2019独角兽企业重金招聘Python工程师标准>>> 本文翻译自CodeProject文章:https://www.codeproject.com/Articles/1223980 ...

  6. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  7. Redis学习笔记~Redis在windows环境下的安装

    Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...

  8. 【笔记】在 Windows 中制作 Ubuntu 系统的USB启动盘

    [笔记]在 Windows 中制作 Ubuntu 系统的USB启动盘 本文只针对 destop 版本.Ubuntu官网中有详细的教程,本文只是做个笔记,以备以后翻看. 有了 Ubuntu 系统的USB ...

  9. linux运行微软运行库,Windows Desktop Runtime(微软官方运行库) V3.1.6

    Windows Desktop Runtimege对准的是借助于Windows系统进行软件编程开发的从业人员,其本身是相关项目运行支持库的设定,没有的话无法运行一些程序和软件,一般电脑并不会自带,重装 ...

最新文章

  1. mysql8.0日期类型_MySQL8.0中的日期类数据及其函数
  2. vue-cli2.0创建项目步骤
  3. SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪
  4. 硬盘坏道拷贝软件_什么是数据恢复工具,一款一键恢复软件
  5. 中文摘要生成 综述
  6. WebAppBuilder自定义主题
  7. java打开文件对话框
  8. 山西省计算机二级考试试题,2011山西省计算机等级考试试题 二级C试题考资料
  9. 软件工程——数据字典
  10. 【券后价16.80元】【海蓝蓝】夹心海苔脆芝麻海苔即食罐装海苔宝宝辅食儿童零食40克...
  11. VirtualBox:在linux宿主机和windows虚机间设置共享目录
  12. ICASPP2022论文阅读记录2 - Transformer-S2A
  13. linux卸载lightdm,Ubuntu安装LightDM
  14. H5_0021:判断平台和微信
  15. 分享 java 基础 + 进阶精简资料(视频 + 源码 + 就业项目 + 面试报装)
  16. 简单理解与实验生成对抗网络GAN
  17. 【图像去雾】基于matlab颜色衰减先验图像去雾【含Matlab源码 2036期】
  18. 全球仅10%的开发者从不加班;淘宝回应用户账号被禁用 980 年;苹果宣布首次以官方形式参与天猫618折扣活动...
  19. RStudio 清除历史记录,变量,窗口
  20. 水利RTU、水文水资源RTU、水利遥测终端

热门文章

  1. 量子计算机详细讲解,全球最强量子计算机,到底强在哪儿?附参数详解
  2. 南瑞rt21系统服务器,南瑞“一种基于CORBA的综合监控系统数据定义和存取方法”等三项科技成果获专利授权...
  3. 清华大学陈煜波:数字经济与中国市场的数字化转型(附视频amp;PPT)
  4. 使用unix的time命令进行简单的计时
  5. 最新基于互联网的智慧教育解决方案
  6. C语言用栈实现迷宫求解
  7. OpenSSL 编程 二:搭建 CA
  8. 说说static关键字的作用
  9. 数据挖掘实验(SAS)关联规则挖掘
  10. 生成json文件并返回给前端页面