外观
c#开发的dll如何AOT编译成独立的dll
新建dll项目
新建一个名为AotMathDll的c#的.net版本的dll项目,然后选择支持AOT编译的.net版本,.net8.0及以上版本。
替换默认的 Class1.cs 代码为以下内容(包含跨平台调用的特性标记):
using System;
using System.Runtime.InteropServices;
// 命名空间可自定义
namespace AotMathDll
{
// 标记为公共类,供外部调用
public class MathHelper
{
// 标记为静态方法,简化调用;添加UnmanagedCallersOnly特性,让AOT编译后可被原生代码调用
[UnmanagedCallersOnly(EntryPoint = "AddTwoInt")]
public static int AddTwoInt(int a, int b)
{
try
{
return a + b;
}
catch (Exception ex)
{
// 简单异常处理,返回-1标识错误
Console.WriteLine($"计算错误:{ex.Message}");
return -1;
}
}
}
}以上例子只有一个方法,那就是求两个整数的和。
修改项目文件
在解决方案资源管理器中,右键点击项目 AotMathDll → 选择「编辑项目文件」。
替换默认内容为以下配置(核心是启用 AOT、自包含、指定运行时):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- 启用AOT编译 -->
<PublishAot>true</PublishAot>
<!-- 自包含(不依赖系统.NET运行时) -->
<SelfContained>true</SelfContained>
<!-- 指定目标运行时(根据你的系统选择,例如win-x64/win-x86/linux-x64) -->
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<!-- 生成原生DLL(而非托管DLL) -->
<OutputType>Library</OutputType>
<!-- 禁用调试符号(发布时可选) -->
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
</Project>发布(AOT编译)项目
AOT 编译仅在「发布」阶段生效,普通的「生成」不会触发 AOT:
右键点击项目
AotMathDll→ 选择「发布」。在发布配置界面:
- 目标:选择「文件夹」→ 「下一步」。
- 位置:默认路径(或自定义)→ 「完成」。
点击「显示所有设置」,确认配置:
配置:Release
目标框架:net8.0
运行时:与项目文件中
RuntimeIdentifier一致(如 win-x64)部署模式:独立
点击「发布」,等待编译完成(AOT 编译耗时比普通编译长)。
编译后的dll默认在:项目所在文件夹\bin\release\net8.0\win-x64\publish\win-x64
