在Linux(WSL2 Ubuntu22.04)运行C#项目缺失依赖求助
解决WSL2 Ubuntu 22.04中dotnet test找不到libdl的问题
问题背景
在WSL2 Ubuntu 22.04环境下,已通过以下步骤编译C#项目:
sudo apt install dotnet-sdk-6.0 cd <包含csproj文件的项目目录> dotnet build
执行dotnet test时抛出异常:
测试方法Foo引发异常:
System.TypeInitializationException:“Bar”的类型初始值设定项引发异常。---> System.DllNotFoundException: 无法加载共享库“dl”或其依赖项。为帮助诊断加载问题,请考虑设置LD_DEBUG环境变量: libdl: 无法打开共享对象文件: 没有那个文件或目录 [...]
用户确认Ubuntu环境正常,libdl.so未损坏。
解决方案
1. 修正DllImport的库名称
C#代码中若使用[DllImport("dl")]调用libdl函数,Linux下实际需指定的库名为libdl,动态链接器会自动补全后缀。修改代码中的导入声明:
[DllImport("libdl", SetLastError = true)] public static extern IntPtr dlopen(string fileName, int flags);
2. 重新安装系统依赖包
libdl属于libc6-dev包的一部分,执行以下命令确保依赖完整:
sudo apt update && sudo apt install --reinstall libc6-dev
3. 配置动态链接库搜索路径
临时添加libdl所在路径到环境变量后再运行测试:
export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH dotnet test
若需永久生效,将上述export命令添加到~/.bashrc或~/.zshrc文件,执行source ~/.bashrc(对应使用的shell)使设置生效。
4. 验证框架与运行时兼容性
执行dotnet --info查看当前运行时信息,确认项目目标框架(如net6.0)与已安装的dotnet-sdk-6.0版本完全匹配。
内容的提问来源于stack exchange,提问作者bearer23
相关产品推荐
相关产品推荐

