CPF 使用C#的Native AOT 发布程序的详细过程

微软已经将AOT的包移到Nuget了,之前是在实验测试服务器上的。并且由之前的alpha版本改成了preview版本。

C#的开发效率,接近C++的运行效率,而且可以防止反编译,可以支持大部分反射功能。还有几个小问题,暂时不能支持x86,win7上运行aot的程序可能需要打补丁!

CPF里使用AOT需要将项目改成net5以上版本,因为net5之后才有COM的包装器,如果你只是给自己的控制台程序AOT的话,可以用低版本的netcore

使用方式很简单,编辑csproj,加入下面一段代码,另外CPF的包版本需要换成最新的

<PropertyGroup>
    <IlcOptimizationPreference>Size</IlcOptimizationPreference>
    <IlcGenerateStackTraceData>false</IlcGenerateStackTraceData>
  </PropertyGroup>
  <ItemGroup>
    <RdXmlFile Include="rd.xml" />
    <PackageReference Include="Microsoft.DotNet.ILCompiler" Version="7.0.0-preview.2.22152.2" />
  </ItemGroup>

一般建议根据发布平台的注释掉其他平台的适配器,以及删除其他平台的引用,用来减少发布的程序大小。比如如果发布Windows上的,可以把Mac和Linux的注释掉。

另外需要注意的是使用AOT方式发布的话,需要到对应系统上发布,比如发布Linux的程序,就需要到Linux上发布。不支持跨操作系统编译。

项目里增加个rd.xml文件,你可以根据需要添加一些反射的元数据描述

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <Assembly Name="CPF" Dynamic="Required All" >
      <Type Name="CPF.Animation.KeyFrame`1[[CPF.Drawing.Color,CPF]]" Dynamic="Required All" />
    </Assembly>
    <Assembly Name="CPF.Windows" Dynamic="Required All">
      <Type Name="CPF.Windows.OpenGL.WglCreateContextAttribsARBDelegate" MarshalDelegate="Required All" />
    </Assembly>
  </Application>
</Directives>

一般的,项目右键,选择发布。 如果你喜欢用命令行也是可以的。

选择文件夹

设置好发布路径,完成。

需要注意的是Windows端暂时只能用x64的,x86的好像还不行。需要用Release方式,Debug模式效果不好。设置好了之后,直接点发布。

之后一般等待一两分钟就行,你可以看到输出那边的相关信息

发布成功之后的程序,双击启动秒开,比非AOT发布的启动速度快多了。主程序小于30M,另外依赖一个7M的skia的dll

AOT后的程序也是可以调试的,带上对应的pdb文件,然后采用附加进程的方式附加刚才启动的程序,然后就可以进入断点了

如果出现无法启动程序的情况,你可以先把项目输出类型改成控制台再AOT之后运行,这样就可以看到相关异常信息。比如反射类型缺失什么的,你可以编辑rd.xml文档

更加详细说明可以看看微软的文档 https://github.com/dotnet/runtimelab/tree/feature/NativeAOT/docs/using-nativeaot

到此这篇关于CPF 使用C#的Native AOT 发布程序的文章就介绍到这了,更多相关Native AOT 发布程序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • CPF 使用C#的Native AOT 发布程序的详细过程

    微软已经将AOT的包移到Nuget了,之前是在实验测试服务器上的.并且由之前的alpha版本改成了preview版本. C#的开发效率,接近C++的运行效率,而且可以防止反编译,可以支持大部分反射功能.还有几个小问题,暂时不能支持x86,win7上运行aot的程序可能需要打补丁! CPF里使用AOT需要将项目改成net5以上版本,因为net5之后才有COM的包装器,如果你只是给自己的控制台程序AOT的话,可以用低版本的netcore 使用方式很简单,编辑csproj,加入下面一段代码,另外CPF

  • Docker安装、创建镜像、加载并运行NodeJS程序的详细过程

    系统环境:win7 一.安装docker 从Docker官网下载并安装docker-ToolBox,并安装 安装完毕,出现三个图标: 二.创建docker镜像 Docker可以通过Dockerfile文件内容来动构建镜像. Dockerfile是一个包含创建镜像所有命令的文本文件,使用docker build命令可以根据其内容构建镜像. 示例,创建一个NodeJS程序的Docker镜像: 1.新建目录并在cmd中npm init进行初始化. 2.创建一个demo程序,内容如下: 注意:如果是正式

  • Python如何发布程序的详细教程

    如何发布一个Python程序: 1.安装一个pyInstaller 在pycharm里点 file -–>setting-–>Project workspace-->Interpreter-->点pip右边的+号,进入下面这个界面: 搜索pyInstaller, 点击左下方Iinstall package安装(出现错误了可以多安装几次) (或者在命令提示符界面 用 pip install pyinstaller命令安装) 2.将.py文件打包成.exe文件 在完成第一步的安装后,就

  • 搭建React Native热更新平台的详细过程

    目录 一,什么是热更新 二,热更新方案 三,热更新原理 四,CDN 热更新方案 五,纯 CDN 方案的弊端 六,线上方案 七.整体方案梳理 八,总结 一,什么是热更新 所谓热更新,也叫做动态更新,一种类似 Web 的更新方式.相对于 App 的发版更新而言,热更新能及时的修复线上存在的问题,大幅的提升业务迭代效率.我们都知道,互联网业务讲究兵贵神速,如果业务能够通过热更新来快速发版和迭代,这就相当于在产品和用户之间搭建了一座能够随时通行的桥梁,代替了原来好几周才能有一次迭代的问题. 那么,热更新

  • 在Colaboratory上运行Go程序的详细过程

    前言 有一次,在逛 youtube 时,看到有个播主直接在文档上运行代码片段. 这把我一下子整蒙了,这是什么神操作? 一番搜索之后,知道了这是 Google 的一个服务 Colaboratory. Colaboratory 先附上地址:传送门. 主要用于机器学习方面,可以直接运行 Python 代码. 当然,我们也可以用于编写教程.想想,边分享,边执行代码是多么爽(装逼)的事情. 运行Go程序 言归正传,并不是所有人都会或都需要写 Python,那我们可以安装自己需要的语言,当然,写法上还是有一

  • uniapp打包成微信小程序的详细过程

    目录 一.HbuilderX打包 二.发行 三.打开小程序体验 注意 总结 一.HbuilderX打包 选中项目-点击发行(U)- 小程序-(微信仅适用于uniapp)(W) 二.发行 填写微信小程序Appid 点击发行,项目会进行编译,等待编译完成,会提示前往小程序上传 前往小程序开发工具打开这个小程序 然后提示上传成功 三.打开小程序体验 这是你的第一个版本,点击蓝色的体验,会有一个二维码,用自己的账号体验,让别人体验的话,要先把对方加入到开发者中. 接下来就是根据提示,填写信息,然后等待审

  • 用Spring Native将SpringBoot程序转换为GraalVM

    Spring发布了一个新工具Spring Native Beta,用于将现有的Spring Boot应用程序(用Java或Kotlin编写)转换为GraalVM本机映像.目标是在springnative上支持Spring Boot应用程序.GraalVM本机映像很小,经过优化,启动速度很快.然而,与JVM相比,折衷的办法是构建时间更长,运行时优化更少. Spring Native与GraalVM团队合作,充当桥梁,确保GraalVM理解传统的SpringBoot代码.Oracle实验室的高级研究

  • ASP.NET程序发布详细过程

    前言 ASP.NET网站的发布,无论是初学者还是高手,在程序的发布过程中或多或少会存在一些问题,譬如VS发布ASP.NET程序失败.IIS安装失败.IIS发布失败.局域网内不能访. 配置文件错误.权限不足等一系列问题,结合我带领的500多人的技术团队反应的各种问题,我今天花点时间总结一下,方便大家,共同学习,共同进步. 为了后文的深入详细分析,我写了一个小Demo,代码附上.本次基于VS2013,OS为WIN10,IIS7等环境讲解.(其他操作系统如WIN7原理也类似,但有细微差别) 1.解决方

  • Tomcat 发布程序使用cmd查看端口占用、相应进程、杀死进程等的命令

    如何查看程序占用的端口 一. 查看所有进程占用的端口 在开始-运行-cmd,输入:netstat –ano可以查看所有进程 二.查看占用指定端口的程序 当你在用tomcat发布程序时,经常会遇到端口被占用的情况,我们想知道是哪个程序或进程占用了端口,可以用该命令 netstat –ano|findstr "指定端口号" 二.查看占用指定端口的程序 当你在用tomcat发布程序时,经常会遇到端口被占用的情况,我们想知道是哪个程序或进程占用了端口,可以用该命令 netstat –ano|f

  • 适用于React Native 旋转木马应用程序介绍

    目录 正文 如何使用它 1.安装并导入 react-native-intro-carousel 2.示例应用程序 预览 正文 一个带有分页功能的介绍页面旋转木马(onboarding)动画. 如何使用它 1.安装并导入 react-native-intro-carousel # Yarn $ yarn add react-native-intro-carousel # NPM $ npm i react-native-intro-carousel import * as React from '

随机推荐