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

.NET 6 AWS Lambda访问网络驱动器遇DllNotFoundException问题求助

解决方案:AWS Lambda .NET6 访问网络驱动器的问题

问题根源

AWS Lambda默认的.NET运行环境基于Linux,而mpr.dll是Windows系统独有的网络资源管理库,Linux环境完全无法识别和加载它——哪怕你把dll放进项目目录也没用,底层系统不支持Windows动态链接库。


可行解决方案

1. 替换为跨平台的网络共享访问方式(推荐)

放弃依赖Windows挂载网络驱动器的逻辑,改用跨平台的SMB协议客户端库直接访问共享文件,比如SMBLibrary(可通过NuGet安装)。这种方式无需挂载驱动器,直接通过协议读写文件,完全兼容Linux环境。

示例代码片段:

using SMBLibrary;
using SMBLibrary.Client;

// 连接SMB共享
using var client = new SMB2Client();
client.Connect("smb-server-ip", SMBTransportType.DirectTCPTransport);
client.Login("domain\\username", "password");

// 获取共享目录
var share = client.TreeConnect("\\\\smb-server-ip\\share-name", out _);
if (share is FileShare fileShare)
{
    // 下载文件到Lambda临时目录
    using var fileStream = fileShare.OpenFile("target-file-path", FileAccess.Read, FileShare.Read);
    using var localStream = File.Create("/tmp/downloaded-file.txt");
    fileStream.CopyTo(localStream);
}

如果是云厂商的文件共享(如Azure Files),直接用官方SDK(比如Azure.Storage.Files.Shares)更稳定,还能集成云服务的权限管理。

2. 用Windows容器部署Lambda

如果必须保留原有的mpr.dll依赖逻辑,可以把Lambda打包成Windows容器镜像部署:

  • 基于AWS提供的Windows Lambda基础镜像(如public.ecr.aws/lambda/dotnet:6-windowsservercore-ltsc2022)构建你的镜像
  • 将代码和依赖(包括mpr.dll)打包进镜像
  • 上传镜像到AWS ECR
  • 创建Lambda函数时选择「容器镜像」类型,指定Windows运行时

⚠️ 注意:Windows容器的Lambda冷启动时间远长于Linux,成本也更高,仅适合低频率调用的场景。

3. VPC内代理中转(针对企业内部SMB共享)

如果要访问的是企业内网的SMB共享,Lambda无法直接打通内网的话,可以在VPC里部署一台Windows EC2实例作为代理:

  • EC2实例挂载目标网络驱动器
  • Lambda通过VPC连接到EC2,调用EC2上的API或脚本获取文件
  • 这种方式适合必须保留原有挂载逻辑的场景,但需要额外维护EC2实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:52:42