Microsoft.Azure.Storage 和 WindowsAzure.Storage Nuget 包有啥区别?

Posted

技术标签:

【中文标题】Microsoft.Azure.Storage 和 WindowsAzure.Storage Nuget 包有啥区别?【英文标题】:What is the difference between the Microsoft.Azure.Storage and WindowsAzure.Storage Nuget packages?Microsoft.Azure.Storage 和 WindowsAzure.Storage Nuget 包有什么区别? 【发布时间】:2019-04-12 09:17:18 【问题描述】:

我一直觉得这很令人困惑:

有一个由 Microsoft 创作的 WindowsAzure.Storage NuGet 包,可让您使用例如 Blob 存储(创建 Blob 等)。 还有Microsoft.Azure.Storage.* 包可以完成同样的事情,也是由 Microsoft 编写的。

如果您的项目碰巧对两者都有依赖关系,则可能会出现命名冲突,例如(“Microsoft.Azure.Storage.Common, ... 和“Microsoft.WindowsAzure.Storage, ...”中都存在“CloudStorageAccount”类型。

以下是两个备选方案的链接:

https://docs.microsoft.com/en-us/dotnet/api/overview/azure/storage?view=azure-dotnet

https://github.com/Azure/azure-storage-net/blob/master/README.md

有什么区别?我什么时候会被激励使用其中一种?

【问题讨论】:

我想将问题扩展到 Azure.Storage.Blobs 【参考方案1】:

WindowsAzure.Storage(latest is v9.3.2) 是我们一直使用的旧版 Storage SDK,Microsoft.Azure.Storage.*(latest v9.4.0) 是它的新版本,nuget 可用大约一年。

查看 Storage .NET SDK 的changelog。列出这些重要差异/变化的一部分。

    Microsoft.Azure.Storage 将库分为三个部分,Blob、Queue 和 File,这意味着我们可以安装单独的包而不是完整版。

    Microsoft.Azure.Storage不支持Table API,转给Microsoft.Azure.Cosmos.Table。

    Microsoft.Azure.Storage 自 9.4.0-preview 起添加了 NetStandard2.0 目标支持,它支持包装在异步 API 上的同步方法。 NetStandard 上的WindowsAzure.Storage 仅具有异步 API。

    Microsoft.Azure.Storage v9.4 包暂时移回使用 Microsoft.WindowsAzure.Storage 命名空间,以简化现有库的转换。

只需根据我们的要求做出选择。

【讨论】:

从较新的包中删除 Tablestorage 访问(基本上阻止 .NET Core 的 TS 用户)有望得到修复,现在它仍然只是完整的框架 我不理解 Microsoft 选择将旧的 WindowsAzure.Storage 命名空间保留在新的 Microsoft.Azure.Storage 库中。现在我以命名空间冲突告终,因为我还引用了使用旧 WindowsAzure.Storage 的第 3 方库。我正在尝试在我的 .NET Core 项目中设置 extern alias,但它不起作用。什么鬼,这么愚蠢的选择微软 @JérômeMEVEL 微软在 Microsoft.Azure.Storage 的第 9 版中使用了旧的命名空间,在第 10 版(2019 年 4 月 9 日发布:nuget.org/packages/Microsoft.Azure.Storage.Blob/10.0.0)中,命名空间已更改为 Microsoft.Azure.Storage.*)。坚持使用 10+ 版本就可以了。 @Dai 谢谢,将库更新到最新版本可以解决冲突。【参考方案2】:

现在有三个级别:

    WindowsAzure.Storage - 直到 v9.3.3 - 不要再使用它了。 Microsoft.Azure.Storage - v9.4.0 到 v11.1.7 - 旧版 Azure.Storage - v12.x - 使用这个库。

所有 Azure 库都被合并到 Azure 命名空间中,因此较新的库都以 Azure 开头(不是 Microsoft.AzureWindowsAzure),您应该在可用时使用它们。

【讨论】:

似乎只是部分正确:例如,Microsoft.Azure.Storage.DataMovement 是最新的命名空间;没有非Microsoft.-前缀一个 根据我从这里学到的知识,我相信这些被称为轨道 0、1 和 2:github.com/Azure/azure-sdk-for-net/issues/10842 - 但我不是 100% 确定。 Azure.Storage 是否与其弃用的库相同?

以上是关于Microsoft.Azure.Storage 和 WindowsAzure.Storage Nuget 包有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何用 Microsoft.Azure.Storage.Blob 替换 Microsoft.WindowsAzure.Storage

Microsoft Azure Storage Explorer

如何使用 Azure.Storage.Blobs 上传流

必须如何存储 Azure Blob 存储连接数据才能支持所有可用的寻址模式?

Microsoft.Azure.StorageException:指定的资源名称包含无效字符

Azure Blob Storage SDK for .NET BlobClient.UploadAsync 总是抛出异常,但总是上传文件