Releases: configcat/.net-sdk
Releases · configcat/.net-sdk
v9.4.3
v9.4.2
v9.4.1
Improvements:
- Improve handling of the race condition between
FetchAsyncandDisposeinHttpClientConfigFetcher. Also, prepareDefaultConfigFetcherforObjectDisposedExceptionpotentially thrown byHttpClientConfigFetcheror user-provided config fetcher implementations. (#110) - Minor improvement to logging-related intellisense documentation. (#111)
v9.4.0
Improvements:
- Include the SDK Key in log message of error 1100 ("Your SDK Key seems to be wrong...") (#108 )
- Mask SDK Key (keep only the last 6 characters visible) when writing it to the log.
- Make config URL generation more robust and make redirect logic consistent with other SDKs.
- Use monitonic clock (
Stopwatch.GetTimestamp) instead of system clock (DateTime.UtcNow) for scheduling poll iterations in Auto Polling mode for improved precision and resistance to system clock adjustments (time sync, user initiated clock adjustments, etc.) (#105) - Correct the internal cache refresh behavior in offline mode: if the client uses an external cache, a synchronization should happen in every case where a fetch operation would happen in online mode. (For example, in Auto Polling mode, the background polling loop should sync with the external cache even when it doesn't initiate config fetch operations.)
- Eliminate race condition between concurrent cache synchronizations (on asynchronous code path only).
- Raise
ConfigChangedonce per config refresh operation, eliminate race conditions around cache write, and improve performance in high concurrency situations by deduplicating config refresh instead of config fetch operation only. - Correct the intellisense docs for some config caching/refreshing-related APIs.
Bug fixes:
- Fix a bug in
HttpClientConfigFetcher. (TheW/prefix should not be stripped from the received ETag because other SDKs don't do that, which could lead to erroneous behavior when .NET and other SDKs use a shared cache.) (#108) - Fix a minor bug in
ForceRefresh/ForceRefreshAsync. (Operation should synchronize with the external cache even in offline mode.) (#105) - Fix error reporting in
ConfigCatClientSnapshot.GetValue/GetValueDetails. (Report correct error codes.)
Breaking changes:
- Change
ForceRefresh/ForceRefreshAsyncto report failure and log a warning in offline mode only when the client is not configured to use an external cache. (Very low impact expected.) (#105) - Make the
ClientReadyevent consistent with other SDKs in Auto Polling mode. When the client is offline,ClientReadyis emitted as soon as the initial sync with the external cache completes. (Low impact expected.) - Make changes to also raise the
ConfigChangedevent when the local cache is updated as a result of synchronization with the external cache. (Low impact expected.)
v9.3.2
v9.3.1
Bug fixes:
- Check cache expiration in every poll iteration, not just the first one in Auto Polling mode to reduce network traffic when the SDK uses a shared cache. (#98)
- Synchronize in-memory cache with the external cache in every poll iteration, not just the first one in Auto Polling mode regardless of offline mode to keep in-memory cache up-to-date when the SDK uses a shared cache.
v9.3.0
New features:
- Provide a new, more convenient way (
ConfigCatClientOptions.LogFilter) for consumers to specify custom log event filter logic. (#95)
Improvements:
- Make the SDK trimmable and AOT-friendly by switching to source generated JSON serialization. Now it is compatible with AOT deployment models like NativeAOT, wasm-tools, IL2CPP, etc. (#94)
- Add support for Unity WebGL. (See
ConfigCatClient.PlatformCompatibilityOptionsand sample script files.) - Switch to source generated regular expressions for improving performance in .NET 8+ applications.
- Minor performance improvements (reduced memory allocation) around log messages and evaluation log building. (#95)
- Include additional clues in log messages when config fetching from CDN servers fails to make it easier to investigate issues. (#96)
v9.2.0
New features and improvements:
- Add methods ("snapshot API") which make it possible to synchronously evaluate feature flags/settings without block waiting for potential underlying I/O operations. At the same time, deprecate synchronous methods that may involve block waiting. (#81)
- Add a parameter named
CacheStateto the event args of theClientReadyevent, by means of which consumers can get information about the initialization state of the client. - Define error codes (
EvaluationErrorCode,RefreshErrorCode) and expose them (EvaluationDetails.ErrorCode,RefreshResult.ErrorCode) to consumers so they can reliably identify the error type without resorting to guess it by checking the error message. (#86) - Introduce a new hook named
ConfigFetchedwhich can be used to observe config fetching-related errors even when refreshing is done by the SDK. - Add the missing
GetKeyAndValue/GetKeyAndValueAsyncmethod to improve consistency with other SDKs. (#91)
Bug fixes:
- Make subscription to hook events thread-safe.
v9.1.0
Improvements:
- Make naming of
UserComparatormembers consistent. (#89) - Adjust the terminology used in XML comments to the main documentation.
- Minor performance improvements. (#88)
Bug fixes:
- Use
HttpClientHandler.AutomaticDecompressiononly when it's available (to support Blazor WASM). (#90) - Fix a few edge cases where user attribute values was not converted to their canonical string representations. (#88)
- Don't accept string arrays that contain null values in the case of ARRAY (NOT) CONTAINS ANY OF comparators.
- Allow leading/trailing whitespace in length prefix for (NOT) STARTS/ENDS WITH ANY OF comparators to align behavior with other SDKs. (#89)
- Align evaluation logging and evaluator error reporting in some edge cases where the config JSON contains errors.
- Correct grammar mistakes in error messages.
Breaking changes:
- Change the name of some
UserComparatormembers:Is(Not)OneOf->TextIs(Not)OneOf,SensitiveIs(Not)OneOf->SensitiveTextIs(Not)OneOf,(Not)ContainsAnyOf->Text(Not)ContainsAnyOf. (Low impact expected.)