从S3存储桶下载文件时遇AWSSDK.S3.CodeAnalysis.dll缺失错误求助
编译错误:无法找到AWSSDK.S3.CodeAnalysis.dll元数据文件的解决方法
环境说明
- Visual Studio 2019(版本16.11.5)
- .NET Framework 4.8.04084
- 已安装AWSSDK.S3(版本3.7.101.1)和AWSSDK.Core(版本3.7.101.1)NuGet包
错误详情
Severity Code Description Project File Line Suppression State Error Metadata file '..\packages\AWSSDK.S3.3.7.101.1\analyzers\dotnet\cs\AWSSDK.S3.CodeAnalysis.dll' could not be found ST_35de80d034b24af7b858c7e96ac14399 C:\Windows\TEMP\Vsta\SSIS_ST130\Vsta3XuAb1HyMUSPUWmD_oVLkA\VstaCvKhS58I30S1_G1CbhqG2Q\CSC 0
NuGet包属性
- AWSSDK.S3:版本3.7.101.1,目标框架为.NET Framework 4.8,状态为已安装
- AWSSDK.Core:版本3.7.101.1,目标框架为.NET Framework 4.8,状态为已安装
原使用代码
// 以下代码使用AWS凭据从S3存储桶下载文件,已提供存储桶名称、密钥和访问密钥(示例为占位符) public void Main() { // 添加从S3存储桶下载文件的代码 var AwsImportFilePathParcel = "https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name?region=us-east-2&tab=objects"; var credentials = new BasicAWSCredentials("myaccesskey", "mysecretkey"); // 设置存储桶区域 IAmazonS3 client = new AmazonS3Client(credentials, RegionEndpoint.USEast1); // 获取S3中的文件 S3DirectoryInfo info = new S3DirectoryInfo(client, "my-bucket-name", AwsImportFilePathParcel); S3FileInfo[] s3Files = info.GetFiles(AwsImportFilePathParcel); // 从S3存储桶下载文件 foreach (var fileInfo in s3Files) { // 将S3存储桶中的文件下载到本地目录 var localPath = Path.Combine("C://Users//Desktop/", fileInfo.Name); // 将文件复制到本地目录 fileInfo.CopyToLocal(localPath); } Dts.TaskResult = (int)ScriptResults.Success; }
解决方法
一、修复NuGet包相关问题
- 清理NuGet缓存并重新安装包
- 打开Visual Studio,依次点击「工具」->「选项」->「NuGet包管理器」->「常规」,点击「清空所有NuGet缓存」
- 右键项目选择「管理NuGet包」,卸载AWSSDK.S3和AWSSDK.Core,重新安装对应版本(或尝试安装与.NET Framework 4.8兼容的最新版本)
- 检查项目文件引用
- 右键项目选择「编辑.csproj」,查找是否存在指向
AWSSDK.S3.CodeAnalysis.dll的无效引用节点,若存在则删除 - 确认所有NuGet包的
<HintPath>路径与本地packages目录中的实际文件位置一致
- 右键项目选择「编辑.csproj」,查找是否存在指向
二、修复Visual Studio环境
打开Visual Studio安装程序,选择「修改」,确保「.NET Framework 4.8开发工具」和「NuGet包管理器」组件已正确安装,必要时点击「修复」
三、修正代码逻辑错误(避免后续运行问题)
原代码存在多处逻辑错误,会导致运行异常,修正后示例如下:
// 从AWS S3存储桶下载文件 public void Main() { // 存储桶名称(替换为实际名称) string bucketName = "my-bucket-name"; // S3存储桶内的前缀路径(空字符串表示根目录,若要指定文件夹则填写如"folder/subfolder/") string s3Prefix = ""; // 本地下载目录(替换为实际路径) string localDownloadPath = @"C:\Users\Desktop"; // AWS凭据(替换为实际凭据) var credentials = new BasicAWSCredentials("myaccesskey", "mysecretkey"); // 存储桶所在区域(与实际区域一致,此处为us-east-2) IAmazonS3 client = new AmazonS3Client(credentials, RegionEndpoint.USEast2); // 初始化S3目录信息 S3DirectoryInfo s3DirInfo = new S3DirectoryInfo(client, bucketName, s3Prefix); // 获取目录下所有文件(*表示匹配所有文件) S3FileInfo[] s3Files = s3DirInfo.GetFiles("*"); foreach (var fileInfo in s3Files) { string localFilePath = Path.Combine(localDownloadPath, fileInfo.Name); // 下载文件到本地 fileInfo.CopyToLocal(localFilePath); } Dts.TaskResult = (int)ScriptResults.Success; }
内容的提问来源于stack exchange,提问作者MRBasun
相关产品推荐
相关产品推荐

