如何在其他 .NET 项目中使用在 C# 中生成并使用本机 AOT 编译的 dll?

问题描述 投票:0回答:1

自从我第一次听说 .NET 7 中引入了 Native AOT 功能并且它可以在控制台可执行文件和类库上使用以来,我想尝试一下我已经拥有的一些库项目。然后,出现了一个问题,无论进行多少研究,我似乎都无法解决。事实上,在成功编译为本机 dll 后,我不知道如何在其他 .Net 项目中使用它,因为它不再被识别为要添加为参考的 .Net 库类型。

如果有人能够启发我如何从 .Net 中的任何其他项目访问该本机 dll 中编译的方法,这对我来说真的意义重大。

我尝试在原始库代码中的公共方法上使用导出属性,以使它们对外部调用可见。然后在调用者项目上使用 import 属性,但似乎没有任何作用,我看不到生成的 dll 中的任何公共方法。

c# .net-core dll native native-aot
1个回答
4
投票

和控制台的发布一样,添加一个类库项目,然后定义方法,但是需要添加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

© www.soinside.com 2019 - 2024. All rights reserved.