在带有.NET 6.0的Azure Linux应用程序服务上使用p/Invoke时出错,自定义本机共享库“没有这样的文件或目录”

cbeh67ev  于 2022-10-04  发布在  .NET
关注(0)|答案(1)|浏览(69)

我在ASP.NET Core.NET 6应用程序中使用本机代码DLL。我已经为Windows编译了一个DLL,并为Linux编译了一个.so。我使用DLLImport属性调用它,.NET加载程序通常能够在Windows和Linux上找到该文件。本机代码DLL与编译的.NET代码的其余部分一起复制到应用程序输出目录中。

该应用程序既可以在Windows上运行,也可以在Ubuntu上的VM测试安装上运行。但是,在Azure应用程序服务(Linux)上运行时,我收到错误:
无法加载共享库‘mylib’或其依赖项之一。为了帮助诊断加载问题,请考虑设置LD_DEBUG环境变量:libmylib:无法打开共享对象文件:没有这样的文件或目录

使用以下发布参数通过Azure DevOps管道部署应用程序:

参数:‘--配置$(BuildConfiguration)-r Linux-x64--自包含TRUE--输出$(Build.ArtifactStagingDirectory)’

Azure DevOps管道能够为应用程序运行单元测试,包括那些调用本机库的应用程序。

我使用了SSL和Bash来检查Azure App Service中的文件系统,我可以看到libmylib.so与编译后的.NET代码一起出现在目录中。

我尝试将其复制到/usr/local/lib,但仍然不起作用。

我需要做什么才能在Azure应用服务中成功调用此文件?我会不会因为缺少其他依赖项而收到该错误?

hwamh0ep

hwamh0ep1#

你可以登录Kudu站点,站点URL应该是这样的:

https://your_sitename.scm.azurewebsites.net/newui

然后单击webssh,然后运行命令进行安装。

apt-get install libgomp1

如果不起作用,您可以运行apt-get updateapt-get install g++。有关更多详细信息,请查看我测试的测试步骤。

我还有一个变通办法:

您可以使用docker容器创建WebApp。你只要确保它在你所在的地方运行良好即可。

相关问题