DHI.Platform.SDK
4.0.0
Prefix Reserved
dotnet add package DHI.Platform.SDK --version 4.0.0
NuGet\Install-Package DHI.Platform.SDK -Version 4.0.0
<PackageReference Include="DHI.Platform.SDK" Version="4.0.0" />
<PackageVersion Include="DHI.Platform.SDK" Version="4.0.0" />
<PackageReference Include="DHI.Platform.SDK" />
paket add DHI.Platform.SDK --version 4.0.0
#r "nuget: DHI.Platform.SDK, 4.0.0"
#:package DHI.Platform.SDK@4.0.0
#addin nuget:?package=DHI.Platform.SDK&version=4.0.0
#tool nuget:?package=DHI.Platform.SDK&version=4.0.0
Platform SDK
How to work with platform SDK
See documentation on https://develop.mike-cloud.com/Sdk.html
Interactive authentication
PkceAccessTokenProvider performs an interactive browser flow each time GetTokenAsync is
called. For clients that make multiple requests in one process, use
CachedPkceAccessTokenProvider instead, or wrap an existing PkceAccessTokenProvider with it. It
performs PKCE once, keeps the access and refresh
tokens only in memory, reuses the access token until one minute before expiry, and silently
refreshes it when possible. Tokens without a known expiry are refreshed or reacquired on the next
request rather than cached indefinitely. If the refresh token is rejected with invalid_grant, it
clears the session and performs one new interactive PKCE flow.
The cached provider is process-local and does not persist credentials. Construct one provider instance and reuse it for the lifetime of the client/session. A cancelled SDK request stops waiting for authentication, while any shared acquisition or refresh continues so other callers can reuse its result and a rotated refresh token is not lost.
| 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 was computed. 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 is compatible. 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 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
- Azure.Storage.Blobs (>= 12.13.0)
- CloudNative.CloudEvents (>= 1.3.80)
- DHI.EUM (>= 23.0.3)
- Microsoft.AspNetCore.SignalR.Client (>= 10.0.3)
- Microsoft.AspNetCore.SignalR.Client.Core (>= 10.0.3)
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.8)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Logging (>= 10.0.8)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Options (>= 10.0.8)
- Newtonsoft.Json (>= 13.0.4)
- NuGet.Protocol (>= 6.14.3)
- Polly.Extensions.Http (>= 3.0.0)
- System.IO.Abstractions (>= 16.1.25)
- System.Linq.Async (>= 6.0.1)
- System.Text.Json (>= 10.0.8)
-
net10.0
- Azure.Storage.Blobs (>= 12.13.0)
- CloudNative.CloudEvents (>= 1.3.80)
- DHI.EUM (>= 23.0.3)
- Microsoft.AspNetCore.SignalR.Client (>= 10.0.3)
- Microsoft.AspNetCore.SignalR.Client.Core (>= 10.0.3)
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.8)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Logging (>= 10.0.8)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Options (>= 10.0.8)
- Newtonsoft.Json (>= 13.0.4)
- NuGet.Protocol (>= 7.6.0)
- Polly.Extensions.Http (>= 3.0.0)
- System.IO.Abstractions (>= 16.1.25)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on DHI.Platform.SDK:
| Package | Downloads |
|---|---|
|
DHI.Workflow.Actions.Azure
Azure and MIKE Cloud actions for DHI Workflow. |
|
|
DHI.Platform.SDK.Spatial
Package Description |
|
|
DHI.Platform.SDK.IAM
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.0 | 190 | 10/13/2026 |
| 3.3.2 | 2,675 | 6/23/2026 |
| 3.3.1 | 3,313 | 6/10/2026 |
| 3.2.3 | 2,446 | 3/24/2026 |
| 3.2.2 | 343 | 3/10/2026 |
| 3.2.1 | 699 | 2/4/2026 |
| 3.2.0 | 265 | 1/13/2026 |
| 3.1.6 | 6,919 | 4/1/2025 |
| 3.1.5 | 475 | 3/12/2025 |
| 3.1.4 | 2,717 | 1/22/2025 |
| 3.1.3 | 1,255 | 11/27/2024 |
| 3.1.2 | 1,381 | 9/18/2024 |
| 3.1.1 | 3,155 | 7/24/2024 |
| 3.1.0 | 3,635 | 6/4/2024 |
| 3.0.1 | 7,651 | 5/4/2023 |
| 3.0.0 | 929 | 3/29/2023 |
| 2.3.4 | 7,858 | 9/23/2022 |
| 2.3.3 | 1,571 | 6/23/2022 |
| 2.3.2 | 7,859 | 3/25/2022 |
___________________________________________________________
October 13, 2026 Release 4.0.0
- BREAKING: `ISharingClient.DeletePublicationAsync` now requires a `projectId` parameter (plus an optional `datasetId`) to route the request; the underlying Sharing API now mandates project/dataset routing headers that were not previously exposed
- BREAKING: `IDatasetClient.GetDatasetListAsync`: its underlying V3 endpoint was retired server-side; reimplemented on top of the V4 dataset listing endpoint (`GetDatasetListV4Async`). This restores non-recursive, immediate-project-only listing (a short-lived interim fix in this same unreleased version had switched it to a recursive endpoint, which is no longer the case). The method now returns `IEnumerable<DatasetListResponse>` (`Id`, `ProjectId`, `Name`, `DatasetType`, `CreatedAt`, `UpdatedAt`, `StorageSize`) instead of `IEnumerable<DatasetOutput>`, and the `generateSasTokens` parameter was removed (the V4 endpoint cannot embed SAS tokens in the list response); call `IDatasetClient.GetDatasetAsync` for full dataset detail. This also fixes `403 Unauthorized` errors previously raised by SAS-token-authenticated `DatasetClient` instances calling this method
- BREAKING: several public API members had two or more overloads that each carried their own optional parameters, an unsafe pattern per Roslyn's [public API design guidance](https://github.com/dotnet/roslyn/blob/main/docs/Adding%20Optional%20Parameters%20in%20Public%20API.md) that was blocking nullable-annotation of these members. Per that guidance, exactly one overload of each keeps its optional parameter(s); the other now requires the parameter explicitly:
- `ITimeSeriesClient.CreateDatasetAsync(Guid, CreateTimeSeriesDatasetInput, CancellationToken)` — `cancellationToken` is now required (the `(Guid, string, ...)` overload is unaffected)
- `ITransferClient.DownloadAsync(Guid, Guid, Stream, CancellationToken)` — `cancellationToken` is now required (the file-path overload is unaffected)
- `ITransferClient.UploadAsync(Guid, string, CancellationToken)` — `cancellationToken` is now required (the stream-based overload is unaffected)
- `Transformations.TransformationExtensions.WithCoordinateSystemTransformation` — `overrideInputSrid` is now required (pass `null` for the previous default) on **both** the `ITransferPipeline` and generic `ITransferProcess<T,U>` overloads, since they were tied on parameter count and neither could be established as "the" canonical overload
- `ITransferProcess<TTransferSource, TTransferResult>.WithReader<TTransferReader>(Action<TTransferReader>)` / `WithWriter<TTransferWriter>(Action<TTransferWriter>)` — the configure-callback parameter is now required (the `(string, IEnumerable<ParameterInput>)` and reader/writer-instance overloads are unaffected)
- BREAKING: the standalone Administration service was retired; `AdministrationClient`/`IAdministrationClient` now talk to it through IAM instead, with the same public methods. As a result of regenerating against the current contract: `AssetCostOutput` gains `AssetType`, `CpuCost`, and `MemoryCost` properties, and the `ValidationProblemDetails` error type is now `HttpValidationProblemDetails`
- BREAKING: removed `NSwagClient.UpdateJsonSerializerSettings(JsonSerializerSettings)` (protected virtual). The SDK's generated clients never invoked it (they configure serialization through their own static `UpdateJsonSerializerSettings`), so SDK serialization behavior is unchanged. Custom `NSwagClient` subclasses that relied on its defaults (`NullValueHandling.Ignore`, `StringEnumConverter`, `DefaultValueHandling.Ignore`) must now define their own `UpdateJsonSerializerSettings`
- BREAKING: `CrsTransformation.OutputSrid` is now `int?` (was `int`), following the regenerated Metadata contract
- BREAKING: removed `SubscriptionMode.OnApproval`; the Sharing API only supports `SubscriptionMode.Open`
- BREAKING: removed unused generated contracts `DatasetOutputCollectionResponse`, `DatasetSummaryOutput`, `DatasetSummaryOutputCollectionResponse` and `TimeSeries.ObjectResponse`; no SDK method returned or accepted them
- Behavioral: `ITimeSeriesClient.GetMultipleTimeSeriesValuesFramesAsync` with an unknown time series id now throws `RestApiException` (HTTP 404, "Time series with id ... was not found in dataset ...") instead of `ValidationException` ("Number of time series in the response is different than expected"); the V3 endpoint rejects unknown ids server-side and matches returned values by time series id rather than by position
- Behavioral: missing values that previously surfaced as `NullReferenceException` or serialization errors now throw `InvalidOperationException` with a descriptive message: SAS token, service URL and upload URL responses; project row version; required event payload fields; a transfer without a configured reader/writer. `ISdkInfoClient.GetLatestSdkVersionAsync` now throws instead of returning `null` when no version is found
- Behavioral: `IEventSubscriberClient.SubscribeAsync` now throws `ArgumentNullException` when `onDataHandler` is `null`, instead of accepting it and failing with `NullReferenceException` when the first event arrives
- Behavioral: setting a PubSub CloudEvent extension value (`ProjectIdValue`, `ResourceIdValue`, ...) to `null` now removes the attribute instead of storing `null`
- Migrate `ITimeSeriesClient.GetTimeSeriesValuesAsync` / `GetMultipleTimeSeriesValuesAsync` / `GetMultipleTimeSeriesValuesFramesAsync` to the V3 cursor-paginated time series values endpoints; the V2 endpoints they used were retired server-side
- Add `CachedPkceAccessTokenProvider` for process-local PKCE token caching, cancellation-aware acquisition, silent refresh, refresh-token rotation, and one-time recovery from `invalid_grant`
- Complete nullable reference type annotations across all public API surfaces (no remaining oblivious types)
- Add `WithMaxExecutionTime(int maxExecutionTimeInSeconds)` to `IJobBuilder`, `ITransferPipeline` and `ITransferProcess<TTransferSource, TTransferResult>`, and `MaxExecutionTimeSeconds` to `JobDefinitionInput` and the `Convert*Input` transfer contracts, allowing jobs and transfers to run longer than the default 24h limit
- The package no longer depends on `NuGet.Protocol`; consumers that relied on it transitively must reference it directly
- Fix `ITimeSeriesClient.GetTimeSeriesValuesAsync` / `GetMultipleTimeSeriesValuesAsync` throwing when a time series contains non-finite values: infinity (`Infinity`/`-Infinity`) and `NaN` returned by the platform are now read correctly for both `float` and `double` series, using culture-invariant conversion
- Fix `AdministrationClient.GetFeaturesListAsync` / `GetAssetCostListAsync` returning `null` instead of an empty collection when the server has no data
- Fix serializing `TransferOutput` (and any other polymorphic contract whose subtype declares its own property named like the discriminator) throwing `Can not add property type to Newtonsoft.Json.Linq.JObject`
- Fix `JobErrorMessage.CronJobId` / `JobProgressMessage.CronJobId` always being `null`; the constructor argument was never assigned
- Fix engine execution status-changed events throwing when `RunningSetupIndex` is absent; it now defaults to 0 as intended
- Fix `ClientFactory` creating clients with `null` dependencies when the optional `ClientFactoryOptions` members are not set: a default `ServiceUriProvider` for the configured environment is used when `ServiceUriProvider` is not set, and a `NullLogger` when `LoggerComputeClient` / `LoggerEventSubscriberClient` / `LoggerUserClient` are not set, so compute execution monitoring and event subscriptions work instead of failing with `NullReferenceException`
- Fix `ISharingClient.SearchPublicationsAsync` throwing when `limit` is explicitly `null`; the default of 200 is now used
- Fix `Page<TItem>.NextAsync` throwing `NullReferenceException` when the page has a cursor but no next-page delegate; an empty page is returned
___________________________________________________________
June 23, 2026 Release 3.3.2
- Add optional `tenantId` parameter to `ClientCredentialsAccessTokenProvider` and `DeviceCodeAccessTokenProvider` to scope the token to a specific tenant
- Add `NodeSize` property and `WithNodeSize(string nodeSize)` to `ITransferPipeline` / `ITransferProcess` for selecting machine types in transfer jobs
- Add `IDatasetClient.GetDatasetListV4Async`: cursor-based paginated dataset listing with search, type filter, and sort options
- Add `DatasetListResponse`, `DatasetListResponseCursorResponse`, and `DatasetSortProperty` contracts
___________________________________________________________
June 10, 2026 Release 3.3.1
- Add `IJobBuilder.WithNodeSize(string nodeSize)` to select a DHI machine type for a job (e.g. "standard", "large", "highcpu")
- Add `IComputeClient.GetJobNodeSizeListAsync()` to list available machine types and their resource limits
- Add `PkceAccessTokenProvider`: OAuth2 Authorization Code + PKCE loopback flow (RFC 8252/7636) for interactive user authentication in desktop/CLI scenarios
- Add `DeviceCodeAccessTokenProvider`: OAuth2 Device Code flow (RFC 8628) for interactive authentication on devices without a browser
- Add `ClientCredentialsAccessTokenProvider`: OAuth2 Client Credentials flow (RFC 6749 §4.4) for non-interactive machine-to-machine authentication (K8S CronJobs, CI/CD pipelines)
- Add `GetOAuthBaseUrl()` extension on `PlatformEnvironment` returning the mike-platform OAuth server base URL for each environment
- Add `IDatasetClient.GetPagedDatasetListAsync`: paginated dataset listing using server-side offset/limit
- Add `Offset` property to `ProjectListOptions` to control the starting position of paginated project and subproject listings
- Add `IUserClient.GetMyTenantsAsync`: list the tenants the current principal belongs to
- `PkceAccessTokenProvider`: add an optional `tenantId` to issue a token scoped to a specific tenant, and expose `AcquireAsync()` returning the access token, refresh token and expiry (`OAuthTokenResult`)
- Add `RefreshTokenAccessTokenProvider`: silently obtain a new access token from a refresh token (`refresh_token` grant); throws `OAuthTokenException` (e.g. `invalid_grant`) when the refresh token is expired/revoked. Supports an optional `tenantId` to silently mint a token scoped to another tenant the user is a member of
___________________________________________________________
March 24, 2026 Release 3.2.3
- Newtonsoft.Json package downgrade to fix issue: https://github.com/JamesNK/Newtonsoft.Json/issues/3095
___________________________________________________________
March 10, 2026 Release 3.2.2
- .net10 support
- Fix in usage of IJobBuilder.WithStorageRequest
- Extend transfer resources validation
___________________________________________________________
February 4, 2026 Release 3.2.1
- added support to set/override cpu cores and memory requests in transfer pipeline.
___________________________________________________________
January 13, 2026 Release 3.2.0
- support for cross-site dataset moves
___________________________________________________________
April 1, 2025 Release 3.1.6
- no changes
___________________________________________________________
March 12, 2025 Release 3.1.5
- Tiling scheme introduced a new property "Palette" to support the Fixed color palette for the tiles.
- Update DHI.EUM to version 23.0.3
- A new optional parameter StorageSize to the transfers
___________________________________________________________
January 22, 2025 Release 3.1.4
- update DHI.EUM to 22.1.0
- Extend EngineExecution information with status change log
- Update of vulnerable packages
___________________________________________________________
November 26, 2024 Release 3.1.3
- Feature principal type
___________________________________________________________
September 18, Release 3.1.2
- no changes
___________________________________________________________
July 24, 2024 Release 3.1.1
- User Story 94516: SDK | reflect changes to engine support after June 2024
- User Story 95844: SDK | Add GetTile into the TilesClient
___________________________________________________________
June 4, 2024 Release 3.1.0
- Removal of vulnerabilities
- Extend Multidimensional dataset info by elements number when spatial domain is mesh
- Add StorageRequest as part of the JobBuilder
- Add support for IUserClient to ClientFactory
- Enable transfers aggregation Max option
- Add support for AppendFrom into ITransferClient
___________________________________________________________
May 4, 2023 Release 3.0.1
- Fixed failure when passing GIS FeatureClass without any parameters by updating `DHI.WaterData.GIS.Converters` dependency to version 1.1.1
___________________________________________________________
February 1, 2023 Release 3.0.0
- Updates in HierarchyClient: methods GetRecursiveDatasetListAsync, GetRecursiveProjectListAsync has additional parameter "pageSizeLimit" that controls output page size in API calls. This update can break existing code - GetRecursiveDatasetListAsync, GetRecursiveProjectListAsync methods calls.
- Added IUserClient interface, which allows retrieval of information about the currently used principal.
- Updated versions of available engines and removed old engine versions
- Enhanced ISharingClient
- Added IAM Client - Reflects IAM v2 backend
- Functionality from Administration Client moved to IAM Client
- Added StorageType (TimeStep|TimeSeries) on TemporalDomainOutputGetDatasetOutput so clients can tell whether a multidimensional dataset is time step or time series oriented
- Added options to upload partial results for an engine execution
___________________________________________________________
September 22, 2022 Release 2.3.4
- New `GetAssetCostListAsync` method added to `IAdministrationClient` to find out how many credits different assets (e.g. engine pool nodes) cost.
- New `environmentVariables` optional parameter added to `CreateJob` method so that environment variables can be passed to the job container.
- New `*CronJob*` methods added to `IComputeClient` to allow scheduling and monitoring of jobs.
- New `TerminateOnNoProgressForSec` on `IEngine` added to control detection of frozen engine. Run is cancelled when engine doesn't progress longer than terminateOnNoProgressForSec seconds
- New `CancelJobAsync` on `IComputeClient`
- New `IClientFactory` with methods `CreateClientAPIKey`, `CreateClientSasToken`, and `CreateClientUserToken` added to make it easier to instantiate clients with different authentication mechanisms.
- Removed ServiceBusSettings in engines
_________________________________________________________________
June 22, 2022 Release 2.3.3
- Clients DI registration: The UsePlatformSasTokens is changed from the boolean flag to options
Migrate from the bool value in the options
false => UsePlatformSasTokensOptions.No
true => UsePlatformSasTokensOptions.InnerServices
___________________________________________________________
March 25, 2022 Release 2.3.2
- New field in ComputeOptions - MaxExecutionElapsedTimeHours
- New VM size in ComputeOptions.PoolTypes - VM_H_60 (HC with 44 CPU cores)
___________________________________________________________
March 21, 2022 Release 2.3.1
- New SdkInfoClient with methods and properties to get info about SDK versions that works with the current platform services: GetLatestSdkVersionAsync, GetSdkSupportStatusAsync, GetSupportedSdkVersionsAsync, SdkPackageName, SdkVersion
- New TSUpdater writer - update writer for time series
- Support for time series with additional columns (flags) in time series client (UploadTimeSeriesValuesFramesAsync, GetTimeSeriesValuesFrameAsync, GetMultipleTimeSeriesValuesFramesAsync and CreateDataFramesAsync)
___________________________________________________________
March 8, 2022 Release 2.3.0
- Adding AdministrationClient with GetCreditsAsync, GetFeatureAsync and GetFeaturesListAsync
- Compute client suports IJobBuilder, IJobMonitor
- IComputeClient changes for CreateJob, GetMyExecutionsListAsync, GetEngineDefinitionsAsync, GetEngineDefinitionAsync, GetConfigurationListAsync
- IProjectClient MoveProjectAsync
- Internal subscriber to re-subscribe after reconnect of SignalR
- Fixed element calculation for grids
- Fixed calculating element position for nonequidistant grids
- Limit tests with file synchronization, waiting details messages
- Adding move project and dataset methods
- Fix upload helper for large files
- Fix empty tile client caching and add png compression
- Add resource requests for job service, enhance event handling, add communication channels
- Added scenario name for engine execution
___________________________________________________________
December 3, 2021 Release 2.2.2
- Memory and robustness optimization of large file stream upload.
___________________________________________________________
November 25, 2021 Release 2.2.0
- Using nuget.org for DHI packages
- Changes in IFileSynchronizationClient
___________________________________________________________
November 8, 2021 Release 2.1.1
- ITimeSeriesClient GetTimeSeriesValuesAsync renamed to GetMultipleTimeSeriesValuesAsync
- Using DHI.EUM 20.0.0-rc.1
- Nuget available on nuget.org
___________________________________________________________
November 5, 2021 Release 2.1.0
- IDatasetClient extended with "Move dataset" option
- IComputeClient extended with option to peek the engine/tool execution generated files
- Get the engine log for a running simulation
___________________________________________________________
September 1, 2021 Release 2.0.1
- Fix for work item #46458 - access level for projects is 0
___________________________________________________________
August 20, 2021 Release 2.0.0
- SDK is now split into two packages: DHI.Platform.SDK and DHI.Platform.SDK.Spatial. In order to use both packages, install nuget packages and initialize the SDK in your DI container, for example:
collection.AddPlatformClients(o =>
{
/* your initialization code here */
})
.AddPlatformSpatialClients();
- Services covered in DHI.Platform.SDK package:
- IComputeClient: covers the compute/engine service, see https://develop.mike-cloud.com/docs/SDK/HowTo/how-to-run-engine/
- ICustomerClient: allows retrieval of users within the tenant
- IDatasetClient: provides listing and searching of datasets
- IEventSubscriberClient: allows creating of event subscriptions, see https://develop.mike-cloud.com/docs/SDK/HowTo/how-to-subscribe-to-events/
- IFileSynchronizationClient: provides convenience methods for synchronizing folders and files with the cloud
- IHierarchyClient: provides methods for manipulating the hierarchy of files and folders in the cloud
- IProjectClient: provides methods for working with projects/folders (creating, listing, updating)
- IRawClient: allows working with files in the Raw storage, namely download of existing files, see https://develop.mike-cloud.com/docs/API/Raw-file-storage/
- ISharingClient: exposes the sharing functionality, see https://develop.mike-cloud.com/docs/API/Data-Sharing/Overview/
- ITilesClient: exposes the tiling service, see https://develop.mike-cloud.com/docs/API/Tiling-service/Tiling/
- ITimeSeriesClient: provides methods for working with timeseries via the timeseries service, see https://develop.mike-cloud.com/docs/API/Time-series/
- ITransferClient: provides methods for importing, exporting and converting data, see https://develop.mike-cloud.com/docs/SDK/HowTo/how-to-upload-files/
- Exception handling has been unified, so that only RestApiException (or derived RestApiException<T>) is thrown from http calls, regardless of the originating client.
- More verbose logging is now supported, configuration should be handled as described in https://develop.mike-cloud.com/docs/SDK/HowTo/how-to-add-logging/
___________________________________________________________
November 11, 2020 Initial release 1.0.0