Artesian.SDK 7.5.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Artesian.SDK --version 7.5.0
                    
NuGet\Install-Package Artesian.SDK -Version 7.5.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Artesian.SDK" Version="7.5.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Artesian.SDK" Version="7.5.0" />
                    
Directory.Packages.props
<PackageReference Include="Artesian.SDK" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Artesian.SDK --version 7.5.0
                    
#r "nuget: Artesian.SDK, 7.5.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Artesian.SDK@7.5.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Artesian.SDK&version=7.5.0
                    
Install as a Cake Addin
#tool nuget:?package=Artesian.SDK&version=7.5.0
                    
Install as a Cake Tool

image

Artesian.SDK

This Library provides read access to the Artesian API

Getting Started

Installation

This library is provided in NuGet.

Support for .NET Standard 2.0 and NET 8.

In the Package Manager Console -

Install-Package Artesian.SDK

or download directly from NuGet.

How to use

The Artesian.SDK instance can be configured using either Client credentials or API-Key authentication

//API-Key
ArtesianServiceConfig cfg = new ArtesianServiceConfig(
   new Uri("https://fake-artesian-env/"),
   "5418B0DB-7AB9-4875-81BA-6EE609E073B6"
   );

//Client credentials
ArtesianServiceConfig cfg = new ArtesianServiceConfig(
		new Uri("https://fake-artesian-env/"),
		"audience",
		"domain",
		"client_id",
		"client_secret"
		);

BREAKING CHANGES: Upgrade v4->v5

The following breaking changes has been introduced in v5 respect to v4.

Update of GME PublicOffer to V2.0

With the introduction of the MI-XBID market on the GME Public Offers data has been increased the api version With a version before v5 of the SDK it will be not possible to download the MI-XBID data

The new market in the class GME_Enums --> Market is MIXBID

Changes on fields

The following fields are now nullable. It will be always valorized for Makret except MIXBID

        //Can be NULL for XBID, never NULL otherwise
        public string Unit { get; set; }
		
        //Can be NULL for XBID, never NULL otherwise
        public decimal? MeritOrder { get; set; }

        //Can be NULL for XBID, never NULL otherwise
        public bool? PartialQuantityAccepted { get; set; }

        //Can be NULL for XBID, never NULL otherwise
        public decimal? ADJQuantity { get; set; }

        //Can be NULL for XBID, never NULL otherwise
        public decimal? ADJEnergyPrice { get; set; }

        //Can be NULL for XBID, never NULL otherwise
        public int? Quarter { get; set; }

        //Can be NULL for XBID, never NULL otherwise
        public decimal? AwardedPrice { get; set; }

The following fields are new.

        //Added for XBID, NULL otherwise
        public LocalDateTime? Timestamp { get; set; }

        //Added for XBID, NULL otherwise
        public decimal? PrezzoUnitario { get; set; }

QueryService

Using the ArtesianServiceConfig we create an instance of the QueryService which is used to create Actual, Versioned and Market Assessment time series queries

Policy configuration

Optionally a custom policy can be introduced to configure policy constraints within the QueryService otherwise default policy is implemented

ArtesianPolicyConfig policy = new ArtesianPolicyConfig();
	policy
	    .RetryPolicyConfig(retryCount: 3, retryWaitTime: 200)
	    .CircuitBreakerPolicyConfig(maxExceptions: 2, durationOfBreak: 3)
	    .BulkheadPolicyConfig(maxParallelism: 10, maxQueuingActions: 15);

var qs = new QueryService(cfg, policy);

<table> <tr><th>Policies</th><th>Description</th></tr> <tr><td>Wait & Retry Policy</td><td>Retry, waiting a specified duration between each retry</td></tr> <tr><td>Circuit Breaker Policy</td><td>The CircuitBreakerPolicy instance maintains internal state across calls to track failures</td></tr> <tr><td>Bulkhead Policy</td><td>The bulkhead isolation policy assigns operations to constrained resource pools, such that one faulting channel of actions cannot swamp all resource</td></tr> </table>

Partition Strategy

Requests are partitioned by an IPartitionStrategy, optionally an IPartitionStrategy can be passed to use a certain partition
strategy. A partition strategy by ID is implemented by default

PartitionByIDStrategy idStrategy = new PartitionByIDStrategy();
var act = qs.CreateActual(idStrategy)
       .ForMarketData(new int[] { 100000001 })
       .InGranularity(Granularity.Day)
       .InRelativeInterval(RelativeInterval.RollingMonth)
       .ExecuteAsync().Result;

<table> <tr><th>Partition Strategies</th><th>Description</th></tr> <tr><td>Partition by ID</td><td>Requests are partitioned into groups of ID's by a defined partition size </td></tr> </table>

Actual Time Series

var actualTimeSeries = await qs.CreateActual()
                .ForMarketData(new int[] { 100000001, 100000002, 100000003 })
                .InGranularity(Granularity.Day)
                .InAbsoluteDateRange(new LocalDate(2018,08,01),new LocalDate(2018,08,10))
                .ExecuteAsync();

To construct an Actual Time Series the following must be provided.

<table> <tr><th>Actual Query</th><th>Description</th></tr> <tr><td>Market Data ID</td><td>Provide a market data id or set of market data id's to query</td></tr> <tr><td>Time Granularity</td><td>Specify the granularity type</td></tr> <tr><td>Time Extraction Window</td><td>An extraction time window for data to be queried</td></tr> </table>

Go to Time Extraction window section

Market Assessment Time Series

var marketAssesmentSeries = await qs.CreateMarketAssessment()
                       .ForMarketData(new int[] { 100000001 })
                       .ForProducts(new string[] { "M+1", "GY+1" })
                       .InRelativeInterval(RelativeInterval.RollingMonth)
                       .ExecuteAsync();

To construct a Market Assessment Time Series the following must be provided.

<table> <tr><th>Market Assessment Query</th><th>Description</th></tr> <tr><td>Market Data ID</td><td>Provide a market data id or set of market data id's to query</td></tr> <tr><td>Product</td><td>Provide a product or set of products</td></tr> <tr><td>Time Extraction Window</td><td>An extraction time window for data to be queried </td></tr> </table>

Go to Time Extraction window section

Auction Time Series

var marketAssesmentSeries = await qs.CreateAuction()
                       .ForMarketData(new int[] { 100000001 })
                       .InAbsoluteDateRange(new LocalDate(2018,08,01),new LocalDate(2018,08,10))
                       .ExecuteAsync();

To construct an Auction Time Series the following must be provided.

Auction Query Description
Market Data ID Provide a market data id or set of market data id's to query
Time Extraction Window An extraction time window for data to be queried

Go to Time Extraction window section

Versioned Time Series

 var versionedSeries = await qs.CreateVersioned()
		.ForMarketData(new int[] { 100000001 })
		.InGranularity(Granularity.Day)
		.ForLastOfMonths(Period.FromMonths(-4))
		.InRelativeInterval(RelativeInterval.RollingMonth)
		.ExecuteAsync();

To construct a Versioned Time Series the following must be provided.

<table> <tr><th>Versioned Query</th><th>Description</th></tr> <tr><td>Market Data ID</td><td>Provide a market data id or set of market data id's to query</td></tr> <tr><td>Time Granularity</td><td>Specify the granularity type</td></tr> <tr><td>Versioned Time Extraction Window</td><td>Versioned extraction time window</td></tr> <tr><td>Time Extraction Window</td><td>An extraction time window for data to be queried</td></tr> </table>

Go to Versioned Time Extraction window section
Go to Time Extraction window section

Versioned Time Extraction Windows

<table> <tr><th>Versioned Time Extraction Windows</th><th>Description</th></tr> <tr><td>Version</td><td>Gets the specified version of a versioned timeseries</td></tr> <tr><td>Last Days</td><td>Gets the latest version of a versioned timeseries of each day in a time window</td></tr> <tr><td>Last N</td><td>Gets the latest N timeseries versions that have at least a not-null value</td></tr> <tr><td>Most Recent</td><td>Gets the most recent version of a versioned timeseries in a time window</td></tr> <tr><td>Most Updated Version</td><td>Gets the timeseries of the most updated version of each timepoint of a versioned timeseries</td></tr> </table>

Versioned Time Extraction window types for queries.

Version

 .ForVersion(new LocalDateTime(2018, 07, 19, 12, 0, 0, 123))

Last Days

 .ForLastOfDays(new LocalDate(2018, 6, 22), new LocalDate(2018, 7, 23))

Last N

 .ForLastNVersions(3)

Most Recent

 .ForMostRecent(Period.FromMonths(-1), Period.FromDays(20))

Most Updated Version

 .ForMUV()
 /// optional paramater to limit version
 .ForMUV(new LocalDateTime(2019, 05, 01, 2, 0, 0))

Bid Ask Time Series

var bidAskSeries = await qs.CreateBidAsk()
                       .ForMarketData(new int[] { 100000001 })
                       .ForProducts(new string[] { "M+1", "GY+1" })
                       .InRelativeInterval(RelativeInterval.RollingMonth)
                       .ExecuteAsync();

To construct a Bid Ask Time Series the following must be provided.

<table> <tr><th>Bid Ask Query</th><th>Description</th></tr> <tr><td>Market Data ID</td><td>Provide a market data id or set of market data id's to query</td></tr> <tr><td>Product</td><td>Provide a product or set of products</td></tr> <tr><td>Time Extraction Window</td><td>An extraction time window for data to be queried </td></tr> </table>

Go to Time Extraction window section

Artesian SDK Extraction Windows

Extraction window types for queries.

Date Range

 .InAbsoluteDateRange(new LocalDate(2018,08,01),new LocalDate(2018,08,10)

Relative Interval

 .InRelativeInterval(RelativeInterval.RollingMonth)

Period

 .InRelativePeriod(Period.FromDays(5))

Period Range

 .InRelativePeriodRange(Period.FromWeeks(2), Period.FromDays(20))

Unit of Measure Conversion Functionality

Overview

The unit of measure conversion functionality allows users to request a conversion of units for Market Data that was registered using a different unit. This feature is supported only for Actual and Versioned Time Series. Supported units are defined in the CommonUnitOfMeasure object and conform to ISO/IEC 80000 (i.e., kW, MW, kWh, MWh, m, km, day, min, h, s, mo, yr).

Note: Duration-based units are interpreted with the following fixed assumptions: 1 day = 24 hours 1 mo = 30 days 1 yr = 365 days

Additional supported units include currency codes in 3-letter format as per ISO 4217:2015 (e.g., EUR, USD, JPY). These are not part of CommonUnitOfMeasure and must be specified as regular strings. Units of measure can also be composite, using the {a}/{b} syntax, where both {a} and {b} are either units from CommonUnitOfMeasure or ISO 4217 currency codes.

Conversion Logic

Unit conversion is based on the assumption that each unit of measure can be decomposed into a "BaseDimension", which represents a polynomial of base SI units (m, s, kg, etc.) and currencies (EUR, USD, etc.). A unit of measure is represented as a value in BaseDimension UnitOdMeasure. Example: 10 Wh = 10 kg·m²·s⁻³ Conversion is allowed when the BaseDimensions match exactly, i.e., the same set of base units raised to the same exponents. In Artesian, units that differ only in the time dimension are also potentially convertible, as the time dimension can be inferred from the data’s time interval.

Example: Power to Energy Conversion

Converting W to Wh: • W → BaseDimension: k·m²·s⁻³Wh → BaseDimension: kg·m²·s⁻²1 h = 3600 s Conversion Steps: 10 W = 10 kg·m²/s³ 1 h = 3600 s 10 kg·m²/s³ × 3600 s = 36000 kg·m²/s² = 10 Wh

MarketData Registration with UnitOfMeasure

The UnitOfMeasure is defined during registration:

var marketDataEntity = new MarketDataEntity.Input {
    ProviderName = "TestProviderName",
    MarketDataName = "TestMarketDataName",
    OriginalGranularity = Granularity.Day,
    OriginalTimezone = "CET",
    AggregationRule = AggregationRule.SumAndDivide,
    Type = MarketDataType.ActualTimeSerie,
    MarketDataId = 1,
    UnitOfMeasure = CommonUnitOfMeasure.kW
};

await marketData.Register(marketDataEntity);

UnitOfMeasure Conversion and Aggregation Rule Override

In the QueryService, there are two supported methods related to unit of measure handling during extraction:

  1. UnitOfMeasure Conversion
  2. Aggregation Rule Override

UnitOfMeasure Conversion

To convert a UnitOfMeasure during data extraction, use the .InUnitOfMeasure() method. This function converts the data from the unit defined at MarketData registration to the target unit you specify in the query.

var actualTimeSeries = await qs.CreateActual()
    .ForMarketData(new[] { 100000001 })
    .InGranularity(Granularity.Day)
    .InUnitOfMeasure(CommonUnitOfMeasure.MW)
    .InAbsoluteDateRange(new LocalDate(2024,08,01), new LocalDate(2024,08,10))
    .ExecuteAsync();

By default, the aggregation rule used during extraction is the one defined at registration. However, you can override it if needed. The conversion is always applied before aggregation.

Aggregation Rule Override

AggregationRule can be overrided using the .WithAggregationRule() method in QueryService.

var actualTimeSeries = await qs.CreateActual()
    .ForMarketData(new[] { 100000001 })
    .InGranularity(Granularity.Day)
    .WithAggregationRule(AggregationRule.AverageAndReplicate)
    .InAbsoluteDateRange(new LocalDate(2024,08,01), new LocalDate(2024,08,10))
    .ExecuteAsync();

Sometimes, especially when converting from a consumption unit (e.g., MWh) to a power unit (e.g., MW), the registered aggregation rule (e.g., SumAndDivide) may not make sense for the new unit.

If you don’t override the aggregation rule, the conversion may produce invalid or misleading results.

Example: Convert power (MW) to energy (MWh):

var actualTimeSeries = await qs.CreateActual()
    .ForMarketData(new[] { 100000001 })
    .InGranularity(Granularity.Day)
    .InUnitOfMeasure(CommonUnitOfMeasure.MWh)
    .WithAggregationRule(AggregationRule.AverageAndReplicate)
    .InAbsoluteDateRange(new LocalDate(2024,08,01), new LocalDate(2024,08,10))
    .ExecuteAsync();

Composite Unit Example: MWh/day

var actualTimeSeries = await qs.CreateActual()
    .ForMarketData(new[] { 100000001 })
    .InGranularity(Granularity.Day)
    .InUnitOfMeasure(CommonUnitOfMeasure.MWh / CommonUnitOfMeasure.day)
    .WithAggregationRule(AggregationRule.AverageAndReplicate)
    .InAbsoluteDateRange(new LocalDate(2024,08,01), new LocalDate(2024,08,10))
    .ExecuteAsync();

CheckConversion: Validate Unit Compatibility

Use the CheckConversion method to verify whether a list of input units can be converted into a specifified target unit:

var inputUnits = new[] {
    CommonUnitOfMeasure.MW,
    CommonUnitOfMeasure.s,
    CommonUnitOfMeasure.kW / CommonUnitOfMeasure.s
};

var outputUnit = CommonUnitOfMeasure.kW;

var checkResults = marketDataService.CheckConversion(inputUnits, outputUnit);

Returned Object: CheckConversionResult

  1. TargetUnitOfMeasure: "kW"
  2. ConvertibleInputUnitsOfMeasure: [ "MW", "kW/s" ]
  3. NotConvertibleInputUnitsOfMeasure: [ "s" ]

Filler Strategy

All extraction types (Actual,Versioned and Market Assessment) have an optional filler strategy.

var versionedSeries = await qs.CreateVersioned()
    .ForMarketData(new int[] { 100000001 })
	.InGranularity(Granularity.Day)
	.ForMostRecent()
	.InAbsoluteDateRange(new LocalDate(2018, 6, 22), new LocalDate(2018, 7, 23))
	.WithFillLatestValue(Period.FromDays(7))

Null

 .WithFillNull()

None

 .WithFillNone()

Custom Value

 //Timeseries
 .WithFillCustomValue(123)
 // Market Assessment
 ..WithFillCustomValue(new MarketAssessmentValue { Settlement = 123, Open = 456, Close = 789, High = 321, Low = 654, VolumePaid = 987, VolumeGiven = 213, Volume = 435 })

Latest Value

 .WithLFillLatestValue(Period.FromDays(7))

MarketData Service

Using the ArtesianServiceConfig cfg we create an instance of the MarketDataService which is used to retrieve, edit or delete MarketData references. GetMarketReference will read the marketdata entity by MarketDataIdentifier and returns an istance of IMarketData if it exists.

//reference market data entity
var marketDataEntity = new MarketDataEntity.Input(){
    ProviderName = "TestProviderName",
    MarketDataName = "TestMarketDataName",
    OriginalGranularity = Granularity.Day,
    OriginalTimezone = "CET",
    AggregationRule = AggregationRule.Undefined,
    Type = MarketDataType.VersionedTimeSerie,
    MarketDataId = 1,
    DerivedCfg = new DerivedCfgCoalesce()
    {
        OrderedReferencedMarketDataIds = new int[]{ 10000, 10001, 10002}.ToArray(),
        Version = 1,
    }
}

var marketDataService = new MarketDataService(cfg);

var marketData = await marketDataService.GetMarketDataReference(new MarketDataIdentifier(
        marketDataEntity.ProviderName,
        marketDataEntity.MarketDataName)
    );

DerivedCfg can be of type: DerivedCfgCoalesce, DerivedCfgSum, DerivedCfgMuv. To Check MarketData for IsRegistered status, returns true if present or false if not found.

var isRegistered = await marketData.IsRegistered();

To Register MarketData , it will first verify that it has not all ready been registered then proceed to register the given MarketData entity.

await marketData.Register(marketDataEntity);

Calling Update will update the current MarketData metadata with changed values. Calling Load, retrieves the current metadata of a MarketData.

marketData.Metadata.AggregationRule = AggregationRule.SumAndDivide;
marketData.Metadata.Transform = SystemTimeTransforms.GASDAY66;

await marketData.Update();

await marketData.Load();

In marketData a public readonly parameter DerivedCfg contains the three possible DerivedCfg types. In case the MarketData is Derived, only one of the three types is populated. The other two are null.

marketData.DerivedCfg.DerivedCfgCoalesce
marketData.DerivedCfg.DerivedCfgSum
marketData.DerivedCfg.DerivedCfgMuv

Updating the DerivedCfg can be performed with UpdateDerivedConfiguration on MarketData. A validation will be done on the existing DerivedCfg of the MarketData, that should be not null and with same type as the one used for the update.

var derivedCfgUpdate = new DerivedCfgCoalesce()
{
    OrderedReferencedMarketDataIds = new int[]{ 10002, 10001, 10000}.ToArray(),
};

marketData.UpdateDerivedConfiguration(derivedCfgUpdate);
// an overload with force parameter (to force the update and rebuild) is provided
//marketData.UpdateDerivedConfiguration(derivedCfgUpdate, true);

Using Write mode to edit MarketData and Save to save the data of the current MarketData providing an instant. Can be used Delete specifying a range to delete a specific range of the time serie.

Actual Time Series

EditActual starts the write mode for an Actual Time serie. Checks are done to verify registration and MarketDataType to verify it is an Actual Time Serie. Using AddData to be written. When data is saved with Save, can be deleted with Delete function specifying the start and the end range.

var writeMarketData = marketdata.EditActual();

writeMarketData.AddData(new LocalDate(2018, 10, 03), 10);
writeMarketData.AddData(new LocalDate(2018, 10, 04), 15);

await writeMarketData.Save(Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()));

await writeMarketData.Delete(new LocalDateTime(2018, 10, 04), new LocalDateTime(2018, 10, 05));

To delete the whole range of the Actual Time serie, the Delete command can be used without specifying any start and end range.

var writeMarketData = marketdata.EditActual();

await writeMarketData.Delete();

Versioned Time Series

EditVersioned starts the write mode for a Versioned Time serie. Checks are done to verify registration and MarketDataType to verify it is a Versioned Time Serie. Using AddData to be written. When data is saved with Save, can be deleted with Delete function specifying the start and the end range.

var writeMarketData = marketData.EditVersioned(new LocalDateTime(2018, 10, 18, 00, 00));

writeMarketData.AddData(new LocalDate(2018, 10, 03), 10);
writeMarketData.AddData(new LocalDate(2018, 10, 04), 15);

await writeMarketData.Save(Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()));

await writeMarketData.Delete(new LocalDateTime(2018, 10, 04), new LocalDateTime(2018, 10, 05), version);

To delete the whole range of the Versioned Time serie, the Delete command can be used without specifying any start and end range.

var writeMarketData = marketdata.EditVersioned(new LocalDateTime(2018, 10, 18, 00, 00));

await writeMarketData.Delete();

Market Assessment Time Series

EditMarketAssessment starts the write mode for a Market Assessment. Checks are done to verify registration and MarketDataType to verify it is a Market Assessment. Using AddData to provide a local date time and a MarketAssessmentValue to be written. When data is saved with Save, can be deleted with Delete function specifying the start and the end range.

var writeMarketData = marketData.EditMarketAssessment();

var marketAssessmentValue = new MarketAssessmentValue()
{
    High = 47,
    Close = 20,
    Low = 18,
    Open = 33,
    Settlement = 22,
    VolumePaid = 34,
    VolumeGiven = 23,
    Volume = 16

};

writeMarketData.AddData(new LocalDate(2018, 11, 28), "Dec-18", marketAssessmentValue);

await writeMarketData.Save(Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()));

var product = new List<string>(){"Dec-18"};

await writeMarketData.Delete(new LocalDateTime(2018, 10, 04), new LocalDateTime(2018, 10, 05), product);

To delete the whole range of the Market Assessment Time serie, the Delete command can be used without specifying any start and end range.

var writeMarketData = marketdata.EditMarketAssessment();

await writeMarketData.Delete();

Auction Time Series

EditAuction starts the write mode for an Auction entity. Checks are done to verify registration and MarketDataType to verify it is an Auction entity. Using AddData to provide a local date time and Auction bid and offer arrays to be written. When data is saved with Save, can be deleted with Delete function specifying the start and the end range.

var writeMarketData = marketData.EditAuction();

var localDateTime = new LocalDateTime(2018, 09, 24, 00, 00);
var bid = new List<AuctionBidValue>();
var offer = new List<AuctionBidValue>();
bid.Add(new AuctionBidValue(100, 10));
offer.Add(new AuctionBidValue(120, 12));

writeMarketData.Add(localDateTime, new AuctionBids(localDateTime, bid.ToArray(), offer.ToArray()));
await writeMarketData.Save(Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()));

await writeMarketData.Delete(new LocalDateTime(2018, 10, 04), new LocalDateTime(2018, 10, 05));

To delete the whole range of the Auction Time serie, the Delete command can be used without specifying any start and end range.

var writeMarketData = marketdata.EditAuction();

await writeMarketData.Delete();

Bid Ask Time Series

EditBidAsk starts the write mode for a Bid Ask. Checks are done to verify registration and MarketDataType to verify it is a Bid Ask. Using AddData to provide a local date time and a BidAskValue to be written. When data is saved with Save, can be deleted with Delete function specifying the start and the end range.

var writeMarketData = marketData.EditBidAsk();

var bidAskValue = new BidAskValue()
{
    BestBidPrice = 47,
    BestBidQuantity = 18,
    BestAskPrice = 20,
    BestAskQuantity = 33,
    LastPrice = 22,
    LastQuantity = 13
};

writeMarketData.AddData(new LocalDate(2018, 11, 28), "Dec-18", bidAskValue);

await writeMarketData.Save(Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()));

var product = new List<string>(){"Dec-18"};

await writeMarketData.Delete(new LocalDateTime(2018, 10, 04), new LocalDateTime(2018, 10, 05), product);

To delete the whole range of the Bid Ask Time serie, the Delete command can be used without specifying any start and end range.

var writeMarketData = marketdata.EditBidAsk();

await writeMarketData.Delete();

Acknowledgments

Product 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 was computed.  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.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.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 is compatible. 
.NET Framework net461 was computed.  net462 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
7.6.1 482 7/23/2025
7.6.0 152 6/25/2025
7.6.0-beta03 133 6/17/2025
7.6.0-beta02 138 6/17/2025
7.6.0-beta01 134 6/16/2025
7.5.0 183 5/22/2025
7.5.0-beta01 143 5/22/2025
7.4.1 204 2/21/2025
7.4.0 152 2/14/2025
7.4.0-beta01 106 2/6/2025
7.3.1 160 1/15/2025
7.3.0 95 1/15/2025
7.2.0 110 1/9/2025
7.1.0 209 12/10/2024
7.0.3 118 12/10/2024
7.0.2 332 10/17/2024
7.0.1 581 8/22/2024
7.0.0 141 8/22/2024
7.0.0-beta02 251 8/13/2024
7.0.0-beta01 219 8/13/2024
6.1.0 173 8/21/2024
6.0.1 173 7/1/2024
6.0.0 157 5/28/2024
5.0.2 124 5/28/2024
5.0.1 395 10/30/2023
5.0.0 239 8/11/2023
4.3.4-beta01 192 8/10/2023
4.3.3 212 8/4/2023
4.3.2 232 7/28/2023
4.3.1 399 5/11/2023
4.3.0 831 3/28/2023
4.2.0 524 1/2/2023
4.1.0 1,303 6/23/2022
4.1.0-beta2 235 6/22/2022
4.1.0-beta1 221 5/25/2022
4.0.0 1,793 5/16/2022
4.0.0-beta2 244 6/22/2022
3.2.1 1,751 10/14/2021
3.2.0 574 10/12/2021
3.1.2 482 9/30/2021
3.1.1 1,311 3/18/2021
3.1.0 636 3/5/2021
3.0.0 649 1/21/2021
2.2.5 553 1/11/2021
2.2.4 570 12/23/2020
2.2.1 944 10/7/2020
2.2.0 685 9/2/2020
2.1.0 661 9/1/2020
2.1.0-beta01 522 7/7/2020
2.0.1 1,174 5/20/2020
2.0.0 2,376 4/6/2020
2.0.0-beta04 589 3/16/2020
2.0.0-beta03 608 3/9/2020
2.0.0-beta02 520 3/3/2020
2.0.0-beta01 516 3/2/2020
1.9.1-beta01 621 1/24/2020
1.9.0-beta01 617 1/16/2020
1.8.0 908 11/20/2019
1.8.0-beta01 533 11/19/2019
1.7.2 899 11/14/2019
1.7.0 775 10/14/2019
1.6.0 836 5/22/2019
1.5.2 808 5/20/2019
1.5.1 815 5/16/2019
1.5.0 755 5/10/2019
1.4.3 802 5/9/2019
1.4.2 850 5/6/2019
1.4.1 942 4/3/2019
1.4.0 978 3/20/2019
1.3.2 928 2/18/2019
1.3.1 904 2/18/2019
1.3.0 982 11/28/2018
1.2.2-beta01 693 11/28/2018
1.2.1 965 11/7/2018
1.2.0 979 10/23/2018
1.2.0-beta07 755 10/23/2018
1.2.0-beta06 727 10/22/2018
1.2.0-beta05 759 10/19/2018
1.2.0-beta04 793 10/18/2018
1.2.0-beta03 743 10/18/2018
1.2.0-beta02 750 10/18/2018
1.2.0-beta01 748 10/18/2018
1.1.2-beta05 802 10/3/2018
1.1.2-beta04 774 10/3/2018
1.1.2-beta03 769 10/3/2018
1.1.2-beta02 817 10/3/2018
1.1.2-beta-01 780 10/3/2018
1.1.1 969 9/28/2018
1.1.0 1,008 9/27/2018
1.1.0-beta04 794 9/26/2018
1.1.0-beta03 767 9/26/2018
1.1.0-beta02 730 9/25/2018
1.1.0-beta01 760 9/25/2018
1.0.0 1,855 8/17/2018
0.2.7-alpha02 886 8/14/2018
0.2.6-alpha02 891 8/14/2018
0.2.5-alpha02 857 8/13/2018
0.2.4-alpha02 854 8/13/2018
0.2.3-alpha02 839 8/10/2018
0.2.2-alpha02 919 8/8/2018
0.2.1-alpha02 929 8/8/2018
0.2.0-alpha02 933 7/25/2018
0.1.0-alpha02 1,084 7/19/2018
0.1.0-alpha01 1,059 7/19/2018

Breaking: remove support for .NET6 (EOL) in favor of .NET8