自从我第一次听说 .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++ 中使用,如 在 C++ 中使用 .NET 7 Native AOT 调用 .NET 功能。