title author date CreateTime categories
dotnet core 使用 CoreRT 将程序编译为 Native 程序
lindexi
2019-05-21 11:30:17 +0800
2019-02-01 11:48:26 +0800
C# dotnet dotnetcore

现在微软有一个开源项目 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 构成体系 - 帅虫哥 - 博客园

最新文章

  1. STM32F10xxx 之 System tick Timer(SYSTICK Timer)
  2. Angularjs学习笔记(一)
  3. $.ajax 跨域请求 Web Api
  4. 树状数组--K.Bro Sorting
  5. ThinkPHP 源码分析之常量 IS_AJAX
  6. Centos与win8.1的双系统
  7. jmeter HTTP信息头管理器使用一例
  8. Android studio教程:[1] 创建app项目
  9. QModelIndex有internalPointer()函数,可以存任何数据,另有QAbstractItemModel::createIndex来创造节点
  10. 洛谷-生活大爆炸版石头剪刀布-NOIP2014提高组复赛
  11. css解决IE6,IE7,firefox兼容性问题
  12. Why does eclipse automatically add appcompat v7 library support whenever I create a new project?
  13. 使用location.href跳转页面在火狐浏览器中报错404
  14. #Java学习之路——基础阶段二(第五篇)
  15. 快速排序实现及其pivot的选取
  16. Hive实现交叉二维分析的小语句
  17. HTML标签归纳
  18. ASP.Net MVC OA项目笔记&lt;五&gt;
  19. 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
  20. 网站建设中常用的JS代码段落

热门文章

  1. PHP算法之两数相加
  2. arc098D Xor Sum 2
  3. Python 读取本地*.txt文件 替换 内容 并保存
  4. yum -y install python-devel
  5. 0918CSP-S模拟测试赛后总结
  6. javascript中onclick(this)用法和onclick(this.value)用法介绍
  7. 如何上传文件到git
  8. AtCoder ABC 130E Common Subsequence
  9. 【转】5G标准——独立组网(SA)和非独立组网(NSA)
  10. Mysql优化系列之查询性能优化前篇2