.NET 8迁移:Azure Storage中container.ListBlobs方法异常问题求助
解决.NET 8中Azure Blob Storage ListBlobs方法异常问题
问题根源
- 你安装的
Microsoft.WindowsAzure.Storage是仅适配.NET Framework的旧版SDK,官方已弃用,且与.NET 8存在兼容性冲突,这是ListBlobs方法抛出异常的核心原因。微软目前推荐使用Azure.Storage.Blobs(v12+)SDK,该版本专为.NET Core/.NET 5+优化。
修复步骤
1. 替换NuGet包
卸载旧包,安装新版SDK:
Uninstall-Package Microsoft.WindowsAzure.Storage Install-Package Azure.Storage.Blobs
2. 迁移代码适配新API
旧ListBlobs方法在新SDK中被异步的GetBlobsAsync/GetBlobsByHierarchyAsync替代,以下是代码迁移示例:
原.NET Framework 4.6代码:
using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob; var storageAccount = CloudStorageAccount.Parse("<你的连接字符串>"); var blobClient = storageAccount.CreateCloudBlobClient(); var container = blobClient.GetContainerReference("目标容器名"); var blobs = container.ListBlobs(useFlatBlobListing: true); foreach (var blob in blobs) { if (blob is CloudBlockBlob blockBlob) { Console.WriteLine(blockBlob.Name); // 原Blob处理逻辑 } }
迁移后的.NET 8代码:
using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; var blobServiceClient = new BlobServiceClient("<你的连接字符串>"); var containerClient = blobServiceClient.GetBlobContainerClient("目标容器名"); // 异步遍历Blob列表(新SDK优先异步设计) await foreach (BlobItem blobItem in containerClient.GetBlobsAsync()) { var blobClient = containerClient.GetBlobClient(blobItem.Name); Console.WriteLine(blobItem.Name); // 迁移原Blob处理逻辑至此处 }
3. 关键注意点
- 新SDK全面采用异步优先模式,务必配合
await使用,避免同步阻塞; - 若需分层列出Blob(对应旧版
ListBlobs的分层功能),使用GetBlobsByHierarchyAsync方法; - 连接字符串、容器权限等配置无需修改,可直接复用;
- 旧版的
CloudBlockBlob等类型对应新SDK的BlobClient、BlockBlobClient,按需替换即可。
内容的提问来源于stack exchange,提问作者bob.mazzo
相关产品推荐
相关产品推荐

