You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux容器Docker中.NET Core 2.0带凭证访问网络路径报错求助

解决.NET Core 2.0跨Linux Docker访问网络路径的DllNotFoundException问题

嘿,这个问题我太熟了!你碰到的System.DllNotFoundException本质原因很简单:你参考的方案依赖了Windows专属的mpr.dll系统库——这个库是Windows用来管理网络资源的核心组件,但Linux系统(包括你用的Docker容器)根本没有这个文件,所以部署到Linux环境必然报错。

下面给你几个跨平台可行的解决方案,按需选择:

方案一:使用跨平台SMB客户端库替换Windows专属实现

放弃依赖Windows系统API,改用.NET生态里的跨平台SMB客户端库来访问网络共享。比如SmbLibrary(轻量的跨平台SMB实现),步骤如下:

  1. 安装对应的NuGet包:
dotnet add package SmbLibrary
  1. 替换原有依赖mpr.dll的代码,用跨平台的SMB客户端实现:
using SmbLibrary.Client;
using System;

public class NetworkShareAccess
{
    public void AccessSmbShare(string shareUrl, string username, string password)
    {
        // 解析SMB共享路径,比如 "//192.168.1.100/shared-folder"
        var shareUri = new Uri(shareUrl);
        string serverAddress = shareUri.Host;
        string shareName = shareUri.LocalPath.TrimStart('/');

        // 初始化SMB客户端并完成认证
        using var smbClient = new SmbClient();
        var auth = new NtlmAuthentication(username, password);
        smbClient.Connect(serverAddress, auth);

        // 连接到目标共享目录
        using var share = smbClient.TreeConnect(shareName, out _);
        
        // 示例:列出共享目录下的文件/文件夹
        var fileEntries = share.ListFiles("*");
        foreach (var entry in fileEntries)
        {
            Console.WriteLine($"文件/目录:{entry.FileName}");
        }

        // 这里可以添加你的文件读写、复制等业务逻辑
    }
}

这个方案完全跨平台,不管是Windows本地还是Linux Docker容器都能正常运行。

方案二:直接在Docker容器中挂载网络共享

如果你的网络共享是SMB或NFS类型,也可以通过Docker的挂载功能,提前把共享目录挂载到容器内部,代码里直接访问本地路径即可,不需要在代码里处理凭证:

挂载SMB共享到容器

运行容器时添加挂载参数,直接指定共享地址和凭证:

docker run -d \
  --name my-dotnet-app \
  -v "//your-server-ip/your-share:/app/shared-folder" \
  --mount type=bind,source=/etc/smbcredentials,target=/etc/smbcredentials,readonly \
  your-dotnet-app-image

(注:/etc/smbcredentials是主机上存储SMB凭证的文件,内容格式为username=xxx\npassword=xxx)

挂载NFS共享到容器

如果是NFS共享,挂载更简单:

docker run -d \
  --name my-dotnet-app \
  -v "your-server-ip:/nfs-share:/app/shared-folder" \
  your-dotnet-app-image

代码里直接访问/app/shared-folder路径就行,和操作本地目录完全一样。

额外提醒:升级.NET Core版本

.NET Core 2.0已经是超期服役的版本了,官方早在2018年就停止了所有支持,不仅存在安全隐患,跨平台兼容性也很差。建议尽快升级到.NET 6或更高的LTS版本,跨平台的API支持会完善很多,遇到的坑也会少很多。

内容的提问来源于stack exchange,提问作者Renjith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:18:48