Microsoft.Extensions.Compliance.Abstractions
9.4.0
Prefix Reserved
dotnet add package Microsoft.Extensions.Compliance.Abstractions --version 9.4.0
NuGet\Install-Package Microsoft.Extensions.Compliance.Abstractions -Version 9.4.0
<PackageReference Include="Microsoft.Extensions.Compliance.Abstractions" Version="9.4.0" />
<PackageVersion Include="Microsoft.Extensions.Compliance.Abstractions" Version="9.4.0" />
<PackageReference Include="Microsoft.Extensions.Compliance.Abstractions" />
paket add Microsoft.Extensions.Compliance.Abstractions --version 9.4.0
#r "nuget: Microsoft.Extensions.Compliance.Abstractions, 9.4.0"
#addin nuget:?package=Microsoft.Extensions.Compliance.Abstractions&version=9.4.0
#tool nuget:?package=Microsoft.Extensions.Compliance.Abstractions&version=9.4.0
Microsoft.Extensions.Compliance.Abstractions
This package introduces data classification and data redaction features.
Install the package
From the command-line:
dotnet add package Microsoft.Extensions.Compliance.Abstractions
Or directly in the C# project file:
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Compliance.Abstractions" Version="[CURRENTVERSION]" />
</ItemGroup>
Usage Example
Data Classification
The DataClassification
structure encapsulates a classification label within a specific taxonomy for your data. It allows you to mark sensitive information and enforce policies based on classifications.
- Taxonomy Name: Identifies the classification system.
- Value: Represents the specific label within the taxonomy.
Creating Custom Classifications
You can define custom classifications by creating static members that represent different types of sensitive data. This provides a consistent way to label and handle data across your application.
Example:
using Microsoft.Extensions.Compliance.Classification;
public static class MyTaxonomyClassifications
{
public static string Name => "MyTaxonomy";
public static DataClassification PrivateInformation => new DataClassification(Name, nameof(PrivateInformation));
public static DataClassification CreditCardNumber => new DataClassification(Name, nameof(CreditCardNumber));
public static DataClassification SocialSecurityNumber => new DataClassification(Name, nameof(SocialSecurityNumber));
}
Binding Data Classification Settings
You can bind data classification settings directly from your configuration using the options pattern. For example:
appsettings.json
{
"Key": {
"PhoneNumber": "MyTaxonomy:PrivateInformation",
"ExampleDictionary": {
"CreditCard": "MyTaxonomy:CreditCardNumber",
"SSN": "MyTaxonomy:SocialSecurityNumber",
}
}
}
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
public class TestOptions
{
public DataClassification? PhoneNumber { get; set; }
public IDictionary<string, DataClassification> ExampleDictionary { get; set; } = new Dictionary<string, DataClassification>();
}
class Program
{
static void Main(string[] args)
{
// Build configuration from an external json file.
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
// Setup DI container and bind the configuration section "Key" to TestOptions.
IServiceCollection services = new ServiceCollection();
services.Configure<TestOptions>(configuration.GetSection("Key"));
// Build the service provider.
IServiceProvider serviceProvider = services.BuildServiceProvider();
// Get the bound options.
TestOptions options = serviceProvider.GetRequiredService<IOptions<TestOptions>>().Value;
// Simple output demonstrating binding results.
Console.WriteLine("Configuration bound to TestOptions:");
Console.WriteLine($"PhoneNumber: {options.PhoneNumber}");
foreach (var item in options.ExampleDictionary)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
}
}
Implementing Redactors
Redactors can be implemented by inheriting from Microsoft.Extensions.Compliance.Redaction.Redactor
. For example:
using Microsoft.Extensions.Compliance.Redaction;
public class StarRedactor : Redactor
{
private const string Stars = "****";
public override int GetRedactedLength(ReadOnlySpan<char> input) => Stars.Length;
public override int Redact(ReadOnlySpan<char> source, Span<char> destination)
{
Stars.CopyTo(destination);
return Stars.Length;
}
}
Implementing Redactor Providers
Redactor Providers implement Microsoft.Extensions.Compliance.Redaction.IRedactorProvider
.
For example:
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;
public sealed class StarRedactorProvider : IRedactorProvider
{
private static readonly StarRedactor _starRedactor = new();
public static StarRedactorProvider Instance { get; } = new();
public Redactor GetRedactor(DataClassificationSet classifications) => _starRedactor;
}
Feedback & Contributing
We welcome feedback and contributions in our GitHub repo.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Bcl.HashCode (>= 1.1.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.ObjectPool (>= 8.0.15)
- System.Memory (>= 4.5.5)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.ObjectPool (>= 8.0.15)
-
net9.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.4)
- Microsoft.Extensions.ObjectPool (>= 9.0.4)
NuGet packages (7)
Showing the top 5 NuGet packages that depend on Microsoft.Extensions.Compliance.Abstractions:
Package | Downloads |
---|---|
Microsoft.Extensions.Telemetry.Abstractions
Common abstractions for high-level telemetry primitives. |
|
Microsoft.Extensions.Compliance.Redaction
Redaction engine and canonical redactors. |
|
Microsoft.AspNetCore.Diagnostics.Middleware
ASP.NET Core middleware for collecting high-quality telemetry. |
|
Serilog.Redaction
Serilog Redaction library for Microsoft.Extensions.Compliance.Redaction |
|
Microsoft.Extensions.Compliance.Testing
Implementation of data classification and redaction designed for testing. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
9.4.0 | 9,969 | 4/8/2025 | |
9.3.0 | 583,674 | 3/11/2025 | |
9.2.0 | 1,069,724 | 2/11/2025 | |
9.1.0 | 862,276 | 1/14/2025 | |
9.0.0 | 2,221,439 | 11/12/2024 | |
9.0.0-preview.9.24507.7 | 102,591 | 10/8/2024 | |
9.0.0-preview.8.24460.1 | 40,794 | 9/10/2024 | |
9.0.0-preview.7.24412.10 | 10,562 | 8/14/2024 | |
9.0.0-preview.6.24353.1 | 11,490 | 7/10/2024 | |
9.0.0-preview.5.24311.7 | 8,871 | 6/11/2024 | |
9.0.0-preview.4.24271.2 | 13,238 | 5/21/2024 | |
9.0.0-preview.3.24209.3 | 24,149 | 4/11/2024 | |
9.0.0-preview.2.24157.4 | 4,609 | 3/12/2024 | |
9.0.0-preview.1.24108.1 | 4,224 | 2/13/2024 | |
8.10.0 | 3,937,093 | 10/8/2024 | |
8.9.1 | 1,579,818 | 9/6/2024 | |
8.9.0 | 81,893 | 9/5/2024 | |
8.8.0 | 1,080,579 | 8/13/2024 | |
8.7.0 | 1,698,180 | 7/10/2024 | |
8.6.0 | 1,161,899 | 6/11/2024 | |
8.5.0 | 1,563,039 | 5/14/2024 | |
8.4.0 | 2,140,532 | 4/9/2024 | |
8.3.0 | 825,805 | 3/12/2024 | |
8.2.0 | 1,304,927 | 2/13/2024 | |
8.1.0 | 644,867 | 1/9/2024 | |
8.0.0 | 1,529,140 | 11/14/2023 | |
8.0.0-rc.2.23510.2 | 45,935 | 10/10/2023 | |
8.0.0-rc.1.23453.1 | 2,567 | 9/12/2023 | |
8.0.0-preview.7.23407.5 | 1,547 | 8/8/2023 | |
8.0.0-preview.6.23360.2 | 802 | 7/12/2023 | |
8.0.0-preview.5.23308.3 | 3,157 | 6/14/2023 | |
8.0.0-preview.4.23273.7 | 3,252 | 5/23/2023 |