当前位置: 首页 > article >正文

c#aot做跨平台动态库

c#aot技术,很多人都觉得是垃圾,没有用,其实还是很有用的。.net发展这么多年,有很多很好的功能,你可以把这些功能做成动态库供rust调用,供c/c++调用。你还真别看不起这些功能,当你需要,又没有库可以使用的时侯,调用.net aot库,也是一个非常好的办法。那你说我喜欢手搓,那当我没说。

c#aot的功能,其实可以取代一部分以前必须由c++来做的动态库功能,当然性能肯定不如c++,但是这个好用呀。并不是所有业务都在乎那一点点性能的,又不是不能用...

做好c# aot项目后,通过不同的命令可以做跨平台交叉编译,经测试通过:

windows:

dotnet publish -r win-x64 -c Release
dotnet publish -r win-arm64 -c Release

macos:

dotnet publish -r mac-x64 -c Release
dotnet publish -r mac-arm64 -c Release

linux:

dotnet publish -r linux-x64 -c Release
dotnet publish -r linux-arm64 -c Release

我们看一下一个正确的c# aot项目的代码:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
	  <InvariantGlobalization>false</InvariantGlobalization>
	  <PublishAot>true</PublishAot>
	  <SelfContained>true</SelfContained>
	  <StripSymbols>false</StripSymbols>
  <IsAotCompatible>true</IsAotCompatible>
  </PropertyGroup>
</Project>

每一行代码都是有用的,全部加上就行。

我们再看一下,c# aot 函数的示例:

 [UnmanagedCallersOnly(EntryPoint = "setdata_test")]
 public static int Create(IntPtr pconnectionString, IntPtr ssql)
 {
     try
     {
         return Task.Run(async () =>
         {

                    return 1;
                }).GetAwaiter().GetResult();
            }
            catch (Exception ex)
            {

                return -1; 
            }
        }

上面只写了部分代码,关键点在于,你要使用UnmanagedCallersOnly。所有的字符串参数,你得用指针,不能用string。如果你提供给别人调用,指针由调用方销毁,你不能在c#中销毁,否则会造成崩溃。

部分代码摘自hpctb,实测证明方案是可行的。


http://www.kler.cn/a/528715.html

相关文章:

  • 《解锁AI黑科技:数据分类聚类与可视化》
  • 第一个Python程序
  • vue2项目(一)
  • Ubuntu16.04编译安装Cartographer 1.0版本
  • 【13】WLC HA介绍和配置
  • 32. C 语言 安全函数( _s 尾缀)
  • 16.[前端开发]Day16-HTML+CSS阶段练习(网易云音乐五)
  • 【2025年更新】1000个大数据/人工智能毕设选题推荐
  • Android逆向(Apktool)
  • 【机器学习理论】朴素贝叶斯网络
  • C++并发:设计无锁数据结构
  • 1.攻防世界easyphp
  • 【LeetCode 刷题】二叉树-二叉搜索树的修改与构造
  • PostgreSQL 数据查询操作(排序、筛选、连接、分组、子查询)
  • 手写call函数、手写apply函数、手写bind函数
  • matlab快速入门(2)-- 数据处理与可视化
  • 【Redis】Redis修改连接数参数
  • 自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
  • Java小白入门教程:LinkedList
  • 车载以太网---数据链路层
  • Spark SQL读写Hive Table部署
  • SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言
  • 10:预处理
  • C++,vector:动态数组的原理、使用与极致优化
  • 回溯算法理论基础
  • 递归练习七(floodfill 算法)