适合工具类型的项目使用,优点禁止反编 ,第一次启动快,业务型项目或者反射多的项目不适合用AOT
1 2 3 4 5 6 | //ORM 启用AOT,扔在程序启动执行一次就好了 StaticConfig.EnableAot = true ; //ORM需要配置rd.xml //详细教程:标题五 |
ReadyToRun 则结合了这两种编译方式的优点,是介于AOT和JIT之间的折中方案
优点1:减少启动时间、提高性能、减少资源消耗和优化云应用性能
优点2:兼容性好,基本所有第三方框架都支持 不需要任何改动
缺点:发布慢 ,文件体积比AOT大
教程:发布勾一下ReadyToRun就好了,会发布就学完了 ,和正常JIT一样用就行了,没什么改动和配置。
高性能启动快,功能成熟完全可以投入生产
SqlServer | 支持 (项目文件 InvariantGlobalization要改为false) |
MySql | 支持 |
Sqlite | 支持 |
PostgresSQL | 支持 (NUGET安装最新的Npgsql) |
Oracle | 不支持 (官方驱动不支持) |
其他 | 未测试 |
解压后直接布就可以发布成AOT文件了
newaot.rar (下载后更新一下SqlSugar)
使用AOT需要简单配置一下如下:
1 2 3 4 5 | //通用版本 SqlSugarCore //迷你版本 (只支持mysql pgsql sqlerver sqlite) SqlSugarCoreNoDrive.Aot |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //启用AOT 程序启动执行一次就好了 StaticConfig.EnableAot = true ; //用SqlSugarClient每次都new,不要用单例模式 var db = new SqlSugarClient( new ConnectionConfig() { IsAutoCloseConnection = true , DbType = DbType.Sqlite, ConnectionString = "datasource=demo.db" }, it => { // Logging SQL statements and parameters before execution // 在执行前记录 SQL 语句和参数 it.Aop.OnLogExecuting = (sql, para) => { Console.WriteLine(UtilMethods.GetNativeSql(sql, para)); }; }); return db; |
创建一个带AOT的类项目
新建一个rd.xml
1 2 3 4 5 6 7 8 | <Directives> <Application> <Assembly Name= "SqlSugar" Dynamic= "Required All" > </Assembly> <Assembly Name= "启动项目名" Dynamic= "Required All" > </Assembly> </Application> </Directives> |
改项目文件
1 2 3 4 5 6 7 8 9 10 11 12 13 | <Project Sdk= "Microsoft.NET.Sdk.Web" > <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <InvariantGlobalization> true </InvariantGlobalization> <PublishAot> true </PublishAot> <Platforms>AnyCPU;x64</Platforms> </PropertyGroup> <ItemGroup> <RdXmlFile Include= "rd.xml" /> </ItemGroup> |
RdXmlFile这个重点引用我们新建的rd.xml (这个xml要能发布出去)
SqlServer如果报下面配置相关的错要改成false
1 | <InvariantGlobalization> false </InvariantGlobalization> |
Sqlserver在web下的Demo AotTestServerWeb.zip
5.1.4.117 +支持AOT
5.1.4.123 +支持CodeFirst和异步方法
5.1.4.129-preview12+ 修复 db.Unionall bug
5.1.4.129-preview17+ 修复 db.Union bug
5.1.4.135-preview05+ 修复 查单列数据 出错
5.1.4.140 修复 db.Storageable(data).WhereColumns(string [])重载引起的问题(导航更新也使用该方法)
5.1.4.141导航查询一对一查出来空
5.1.4.148 优化发布时的警告数据
5.1.4.155-preview17 修复SqlServer创建数据库报错
5.1.4.173-preview10 Sqlite 查询回Count报错或者分页ref Count
https://www.donet5.com/ask/9/23451
1 | //用到dynamic参数的方法 |
AOT还有很多功能有限制,我个人认为用来开发小工具还可以,大点的项目暂时不要用,在反射上面有很多限制
.net API只支持了最基本的功能很多功能没有
.net MVC不支持
2016 © donet5.comApache Licence 2.0