现在微软有一个开源项目 CoreRT 能通过将托管的 .NET Core 编译为单个无依赖的 Native 程序

这个项目现在还没发布,但是能尝试使用,可以带来很多的性能提升

使用 CoreRT 发布的优点:

  1. 只有一个 exe 文件,是绿色没有依赖

  2. 发布的文件的大小很小,对比 dotnet core 的独立发布 50M 的大小会小很多

  3. 能在大多数的系统运行

  4. 提高很多启动性能

不足是软件不是非常稳定,同时只能支持x64的程序

使用这个项目是比较难的,本文下面提供的包的版本,请大家按照我的安装的版本使用,因为新的版本可能有一些修改,同时没有更新文档,如果是第一次使用,可能会遇到很多坑。

首先打开 VisualStudio 2017 安装 C++ 依赖,虽然现在已经有了 VisualStudio 2019 了,但是 C++ 的依赖是需要和 VS 的版本关系,所以这里暂时不能使用 VisualStudio 2019 安装

点击 Nuget 源设置,在 VisualStudio 的工具->选项->nuget包管理器->nuget包源里面添加 myget 的使用,这个网站是微软的 CI 输出的,里面大量的库都是没有发布的,所以微软也无法保证这些库稳定

添加一个新的源,路径是 https://dotnet.myget.org/F/dotnet-core/api/v3/index.json 可以通过 dotnet new nuget 创建配置文件,在配置文件添加下面代码,这样就可以不在全局添加这个链接

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
</packageSources>
</configuration>

这个黑科技请看 VisualStudio 给项目添加特殊的 Nuget 的链接

通过 VisualStudio 2017 创建一个新的控制台项目,或者通过命令行使用 dotnet 命令行创建一个新的控制台项目

然后在项目里面添加 Microsoft.DotNet.ILCompiler 的引用,这里添加的版本是 1.0.0-alpha-* 版本

    <ItemGroup>
<PackageReference Include="Microsoft.DotNet.ILCompiler" Version="1.0.0-alpha-*" />
</ItemGroup>

也就是在 1.0.0 的任意版本都会被添加,我实际使用的是 1.0.0-alpha-27401-01 版本

现在尝试写一个 Hellow 程序,使用命令行发布,注意创建的项目的 dotnet core sdk 版本暂时需要是 2.0 的版本

dotnet publish -r win-x64 -c release

注意暂时只能发布 x64 的程序,对 x86 暂时没有支持

现在可以发现发布的文件夹里面有 native 文件夹,里面就只包含一个 exe 程序,同时这个文件也非常小

代码请看 https://github.com/dotnet/corert/tree/master/samples/HelloWorld

更详细的博客请看 使用CoreRT将.NET Core发布为Native应用程序 - KAnts - 博客园

简析 .NET Core 构成体系 - 帅虫哥 - 博客园

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

有小伙伴说 NuGet 无法下载,我将下载的资源放在CSDN欢迎小伙伴点击 microsoft.dotnet.ilcompiler.1.0.0-alpha-27527-02.nupkg-CSDN下载 下载


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

dotnet core 使用 CoreRT 将程序编译为 Native 程序的更多相关文章

  1. dotnet core 2.1 使用阶梯编译

    在 dotnet core 2.1 可以使用阶梯编译的方法,从 dotnet framework 开始,在代码的所有方法在第一次进入的时候就需要使用 JIT 进行编译为本机的代码.可以看到代码是在第一 ...

  2. windows系统中Dotnet core runtime 安装后,无法启动次程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll的解决方法

    因为dotnet core runtime依赖vc++2015,如果系统未安装vc++2015则会报上面的错误 解决方案:先下载安装vc++2015再安装dotnet core runtime, vc ...

  3. 2019-11-29-dotnet-core-使用-CoreRT-将程序编译为-Native-程序

    title author date CreateTime categories dotnet core 使用 CoreRT 将程序编译为 Native 程序 lindexi 2019-11-29 08 ...

  4. 2019-5-21-dotnet-core-使用-CoreRT-将程序编译为-Native-程序

    title author date CreateTime categories dotnet core 使用 CoreRT 将程序编译为 Native 程序 lindexi 2019-05-21 11 ...

  5. dotnet core 添加 SublimeText 编译插件

    因为 SublimeText 有很多插件都是使用 Py 写的,而我想使用 dotnet core 给 SublimeText 写一个编译插件,也就是在我使用 Markdown 的时候可以点击编译,将 ...

  6. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (二) 部署运行控制台项目

    背景 在上一篇文章安装dotnet core,已经安装好dotnet core了.之前只是安装成功了dotnet, 输入dotnet --info,可以确认安装成功了,但是在运行代码时,还是报错了,本 ...

  7. .NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT,将.NET Core应用打包成一个可执行文件并包含运行时. 支持Windows, MacOS and Linux x64 w/ RyuJIT ...

  8. [转帖].NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT https://www.cnblogs.com/linezero/p/CoreRT.htm .NET Core单文件发布静态编译AOT Cor ...

  9. 手把手教你用Jenkins自动发布dotnet core程序

    Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安装教程略.... 嗯?不是说好手把手么 ...

随机推荐

  1. Mathematica 和 MATLAB、Maple 并称为三大数学软件

    Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一 ...

  2. oracle 共享服务器监控

    1.   观察sga的使用情况 select * from v$sgastat where pool=’large pool’; 2.   观察调度程序是否充足: 首先看每个调度程序的忙闲: sele ...

  3. win2003开启telnet

    1.在服务器上,cmd中输入命令services.msc打开服务窗口,找到telnet服务,先开启它的依赖服务Remote Procedure Call,在开启telnet服务. 2.本地电脑中cmd ...

  4. linux包之包管理rpm-yum

    背景 YUM(Yellow dog Updater, Modified)为多个Linux发行版的前端软件包管理器,例如 Redhat RHEL, CentOS & Fedora. YUM通过调 ...

  5. 正则表达式问题:如何理解/href\s*=\s*(?:"(?<1>[^"]*)"|(?<1>\S+))/(转载)

    ms-help://MS.VSCC/MS.MSDNVS.2052/jscript7/html/jsjsgrpregexpsyntax.htm 该文虽有解释, 但没有样例,对我这样的初学者来说很难理解 ...

  6. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛: B. Coin 【概率题】【数论】

    Bob has a not even coin(就是一个不均匀的硬币,朝上的概率不一定是1/2), every time he tosses the coin, the probability tha ...

  7. init()方法必须使用super.init(config)的原因--Servlet

    原 因: 一个servlet在它的init()方法中传递它的ServletConfig实例,在其他的方法中却不可以.当一个servlet在 init()方法外需要调用config对象时就会产生问题.使 ...

  8. oracle函数 chartorowid(c1)

    [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SELECT chartorowid('AA ...

  9. HUD-1708_FatMouse and Cheese

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  10. 《C语言深度解剖》学习笔记之关键字

    第一章 关键字 C语言共有32个关键字. 关键字   auto 声明自动变量 int 声明整型变量 long 声明长整型变量 char 声明字符型变量 float 声明浮点型变量 short 声明短整 ...