自从我第一次听说 .NET 7 中引入了 Native AOT 功能并且它可以在控制台可执行文件和类库上使用以来,我想尝试一下我已经拥有的一些库项目。然后,出现了一个问题,无论进行多少研究,我似乎都无法解决。事实上,在成功编译为本机 dll 后,我不知道如何在其他 .Net 项目中使用它,因为它不再被识别为要添加为参考的 .Net 库类型。
如果有人能够启发我如何从 .Net 中的任何其他项目访问该本机 dll 中编译的方法,这对我来说真的意义重大。
我尝试在原始库代码中的公共方法上使用导出属性,以使它们对外部调用可见。然后在调用者项目上使用 import 属性,但似乎没有任何作用,我看不到生成的 dll 中的任何公共方法。
和控制台的发布一样,添加一个类库项目,然后定义方法,但是需要添加UnmanagementCallersOnly功能,并指定EntryPoint:
[UnmanagedCallersOnly(EntryPoint = "OutPut")]
public static int OutPut()
{
return 1;
}
并打开AOT编译选项:
<PublishAot>true</PublishAot>
然后使用命令行发布
dotnet publish -r win-x64
最后在你的项目中调用该函数
[DllImport("AOTDLL.dll")]
public static extern int OutPut();
当然这个dll也可以在C++中使用,像这样https://joeysenna.com/posts/nativeaot-in-c-plus-plus