如何在其他 .NET 项目中使用用 C# 生成并使用 Native 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++ 中使用,如 在 C++ 中使用 .NET 7 Native AOT 调用 .NET 功能

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