Linux 本机库解析不再使用
从 .NET 8 开始,Linux 应用程序不再搜索 netcoredeps
本机库的子目录。
已引入的版本
.NET 8
以前的行为
在早期版本的 .NET 中,Linux 应用程序在位于应用程序可执行文件旁边的子目录中搜索本机库 netcoredeps
。 此行为应用于所有本机库加载,包括用户定义的平台调用 (p/invokes)。
新行为
在 .NET 8 及更高版本中,Linux 应用程序不再搜索 netcoredeps
本机库的子目录。 原生库解析现在遵循标准机制,而无需依赖此子目录。
破坏性变更的类型
这是行为 变化。
更改原因
最初引入了此 netcoredeps
行为来处理早期 .NET 版本中第三方库的复杂依赖项。 由于依赖项处理改进,.NET 8+ 不再需要此行为。 此外,该机制与 ELF 平台的建议做法不一致。
有关详细信息,请参阅 GitHub 问题 #114393。
建议的措施
如果应用程序依赖于 netcoredeps
子目录来执行 p/invoke 操作或解析自定义本机库,请使用以下替代方案:
- 使用以下方法之一实现自定义解析机制:
- 如果部署中需要一个
RPATH
,请使用patchelf
工具来明确修改 ELF 文件。