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.Azure
或 WindowsAzure
),您应该在可用时使用它们。
【讨论】:
似乎只是部分正确:例如,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 Blob 存储连接数据才能支持所有可用的寻址模式?
Microsoft.Azure.StorageException:指定的资源名称包含无效字符
Azure Blob Storage SDK for .NET BlobClient.UploadAsync 总是抛出异常,但总是上传文件