Picton 9.2.0

dotnet add package Picton --version 9.2.0                
NuGet\Install-Package Picton -Version 9.2.0                
此命令旨在在Visual Studio的包管理器控制台中使用,因为它使用NuGet模块的Install-Package版本。
<PackageReference Include="Picton" Version="9.2.0" />                
对于支持PackageReference的项目,将此XML节点复制到项目文件中以引用该包。
paket add Picton --version 9.2.0                
#r "nuget: Picton, 9.2.0"                
#r指令可以在F# Interactive和Polyglot Notebooks中使用。将其复制到交互式工具或脚本的源代码中,以引用此包。
// 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

License Build status Coverage Status CodeFactor FOSSA Status

关于

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包使用。

NuGet Version

安装

将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);
    }
}

许可证

FOSSA Status

产品 兼容和增加的计算目标框架版本。
.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已计算。
兼容的目标框架
包中包含的目标框架
详细了解目标框架.NET Standard

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