Picton 9.2.0
dotnet add package Picton --version 9.2.0
NuGet\Install-Package Picton -Version 9.2.0
<PackageReference Include="Picton" Version="9.2.0" />
paket add Picton --version 9.2.0
#r "nuget: Picton, 9.2.0"
// Install Picton as a Cake Addin #addin nuget:?package=Picton&version=9.2.0 // Install Picton as a Cake Tool #tool nuget:?package=Picton&version=9.2.0
Picton
关于
Picton是一个库,旨在使处理Azure存储变得更简单。
该库中的主要功能包括:
1) 扩展方法
扩展方法允许在保持一个锁(也称为“租约”)的情况下对Blob进行操作。
- 锁定Blob一段时间,并在已经被其他进程锁定的情况下进行重试。
- 扩展现有的租约。
- 释放现有的租约。
- 使用给定的字符串覆盖Blob的内容(也有类似的方法用于上传字节数组或流)。
- 将给定的字符串追加到Blob中(也有类似的方法用于追加字节数组或流)。
- 更新与blob关联的元数据
- 将blob的内容下载到
string
中(还有一个将内容下载到byte[]
的类似方法) - 复制一个blob
- 获取一个URI,用于在一定时间内访问blob
2) 抽象层
早期版本的Picton库包含几个接口,用于克服Azure Storage库中大多数类都已经是密封的,或者他们的方法没有被标记为虚拟的方法,因此不可“模拟”的问题。在Azure Storage库的7.0版本中,微软解开了大多数类的密封,并将大多数方法标记为虚拟,这是一个相当重大的改进,因为它允许在对这些类进行注射时对这些类进行模拟。在8.0版本中,Azure Storage库得到了进一步改进,通过将“虚拟”修饰符添加到Get*Reference
方法来更新这些方法。在9.0版本中,Azure Storage库再次得到改进,解开了StorageAccount
类。这是阻止在单元测试中“模拟”Azure存储库的最后一个障碍。这意味着Picton库中所有的接口和包装类都已经变得过时,并且从3.0版本中删除。
3) 管理器
Blob和Queue管理器是帮助工具,它们简化了常见的blob和queue相关任务。例如,当消息大小超过Azure队列允许的最大大小时,QueueManager会自动将消息序列化和存储到临时位置。另一个例子:Blob队列在尝试修改blob内容之前会自动请求一个锁(又称租约),并在操作完成后自动释放该锁。
4) 其他
- AzureEmulatorManager允许启动Azure存储仿真器,您可能需要在执行集成测试之前使用它。
Nuget
Picton可以作为Nuget包使用。
安装
将Picton包含到C#项目中最简单的方法是获取nuget包。
PM> Install-Package Picton
在您的项目中正确引用Picton库后,添加以下命名空间:
using Picton; // This is always required
using Picton.Managers; // This is only required if you want to use BlobManager or QueueManager
用法
1) Blob扩展方法
首先,以下是下面代码示例所需的某些示例代码
var cancellationToken = CancellationToken.None;
var connectionString = "UseDevelopmentStorage=true";
var container = new BlobContainerClient(connectionString, "mycontainer");
await container.CreateIfNotExistsAsync(PublicAccessType.None, cancellationToken).ConfigureAwait(false);
var blob = container.GetBlockBlobClient("MyBlob.txt");
以下是使用扩展方法的几个示例
var leaseId = await blob.TryAcquireLeaseAsync(TimeSpan.FromSeconds(15), 5, cancellationToken).ConfigureAwait(false);
await blob.UploadTextAsync("Hello World", leaseId, cancellationToken).ConfigureAwait(false);
await blob.AppendTextAsync("More content", leaseId, cancellationToken).ConfigureAwait(false);
await blob.AppendTextAsync("Even more content", leaseId, cancellationToken).ConfigureAwait(false);
await blob.TryRenewLeaseAsync(leaseId, cancellationToken).ConfigureAwait(false);
await blob.AppendTextAsync("More more more", leaseId, cancellationToken).ConfigureAwait(false);
await blob.ReleaseLeaseAsync(leaseId, cancellationToken).ConfigureAwait(false);
var content = await blob.DownloadTextAsync(cancellationToken).ConfigureAwait(false);
await blob.CopyAsync("MyCopy.txt", cancellationToken).ConfigureAwait(false);
var permission = SharedAccessBlobPermissions.Read;
var duration = TimeSpan.FromMinutes(30);
var accessUri = await blob.GetSharedAccessSignatureUri(permission, duration).ConfigureAwait(false);
2) 管理器
var connectionString = "UseDevelopmentStorage=true";
var blobManager = new BlobManager(connectionString, "mycontainer");
await blobManager.CopyBlobAsync("test.txt", "test - Copy of.txt", cancellationToken).ConfigureAwait(false);
await blobManager.UploadTextAsync("test2.txt", "Hello World", cancellationToken: cancellationToken).ConfigureAwait(false);
await blobManager.AppendTextAsync("test2.txt", "qwerty", cancellationToken: cancellationToken).ConfigureAwait(false);
foreach (var blob in blobManager.ListBlobs("test", false, false))
{
Console.WriteLine(blob.Uri.AbsoluteUri);
}
await blobManager.DeleteBlobAsync("test - Copy of.txt", cancellationToken).ConfigureAwait(false);
await blobManager.DeleteBlobsWithPrefixAsync("test", cancellationToken).ConfigureAwait(false);
3) 其他
class Program
{
static void Main()
{
AzureEmulatorManager.EnsureStorageEmulatorIsStarted();
var cancellationToken = CancellationToken.None;
var connectionString = "UseDevelopmentStorage=true";
var container = new BlobContainerClient(connectionString, "mycontainer");
await container.CreateIfNotExistsAsync(PublicAccessType.None, cancellationToken).ConfigureAwait(false);
}
}
许可证
产品 | 版本 兼容和增加的计算目标框架版本。 |
---|---|
.NET | 计算了net5.0。 计算了net5.0-windows。 计算了net6.0。 计算了net6.0-android。 计算了net6.0-ios。 计算了net6.0-maccatalyst。 计算了net6.0-macos。 计算了net6.0-tvos。 计算了net6.0-windows。 兼容net7.0。 计算了net7.0-android。 计算了net7.0-ios。 计算了net7.0-maccatalyst。 计算了net7.0-macos。 计算了net7.0-tvos。 计算了net7.0-windows。 计算了net8.0。 计算了net8.0-android。 计算了net8.0-browser。 计算了net8.0-ios。 计算了net8.0-maccatalyst。 计算了net8.0-macos。 计算了net8.0-tvos。 计算了net8.0-windows。 |
.NET Core | 计算了netcoreapp3.0。 计算了netcoreapp3.1。 |
.NET Standard | 兼容netstandard2.1。 |
.NET Framework | 兼容net48。 计算了net481。 |
MonoAndroid | 计算了monoandroid。 |
MonoMac | 计算了monomac。 |
MonoTouch | 计算了monotouch。 |
Tizen | 计算了tizen60。 |
Xamarin.iOS | 计算了xamarinios。 |
Xamarin.Mac | 计算了xamarinmac。 |
Xamarin.TVOS | xamarintvos已计算。 |
Xamarin.WatchOS | xamarinwatchos已计算。 |
-
.NETFramework 4.8
- Azure.Storage.Blobs (≥ 12.19.1)
- Azure.Storage.Queues (≥ 12.17.1)
- MessagePack (≥ 2.5.140)
- MimeTypesMap (≥ 1.0.8)
-
.NETStandard 2.1
- Azure.Storage.Blobs (≥ 12.19.1)
- Azure.Storage.Queues (≥ 12.17.1)
- MessagePack (≥ 2.5.140)
- Microsoft.CSharp (≥ 4.7.0)
- MimeTypesMap (≥ 1.0.8)
-
net7.0
- Azure.Storage.Blobs (≥ 12.19.1)
- Azure.Storage.Queues (≥ 12.17.1)
- MessagePack (≥ 2.5.140)
- MimeTypesMap (≥ 1.0.8)
NuGet包 (1)
显示依赖Picton的顶级1个NuGet包
包 | 下载 |
---|---|
Picton.Messaging
高性能消息处理器(也称为消息“泵”),旨在以尽可能高效的方式处理从Azure存储队列中的消息 |
GitHub代码库
此包未被任何流行的GitHub代码库使用。
版本 | 下载 | 最后更新 |
---|---|---|
9.2.0 | 202 | 1/29/2024 |
9.1.0 | 187 | 12/30/2023 |
9.0.0 | 304 | 2/23/2023 |
8.0.0 | 548 | 4/8/2022 |
7.1.0 | 867 | 3/16/2020 |
7.0.0 | 602 | 3/13/2020 |
6.0.0 | 922 | 5/19/2019 |
5.0.0 | 934 | 1/29/2019 |
4.1.0 | 774 | 1/15/2019 |
4.0.0 | 1,301 | 5/31/2018 |
3.1.0 | 1,006 | 5/24/2018 |
3.0.0 | 1,775 | 2/13/2018 |
2.3.1 | 965 | 2/13/2018 |
2.3.0 | 974 | 2/11/2018 |
2.2.1 | 1,379 | 12/27/2017 |
2.2.0 | 1,116 | 12/26/2017 |
2.1.0 | 2,034 | 7/14/2017 |
2.0.0 | 1,064 | 7/4/2017 |
1.4.1 | 1,043 | 10/7/2016 |
1.4.0 | 996 | 10/7/2016 |
1.3.0 | 1,003 | 10/3/2016 |
1.2.0 | 1,057 | 9/12/2016 |
1.1.0 | 987 | 9/6/2016 |