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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:31:04