All notable changes to the LaunchDarkly.CommonSdk package will be documented in this file. For full release notes for the projects that depend on this project, see their respective changelogs. This file describes changes only to the common code. This project adheres to Semantic Versioning.
LdValue.Equals()
incorrectly returned true for object (dictionary) values that were not equal.- Summary events incorrectly had
unknown:true
for all evaluation errors, rather than just for "flag not found" errors (bug introduced in 2.9.0, not used in any current SDK).
- Fixed an exception when serializing user custom attributes in events (bug in 2.9.0).
EvaluationReason
static methods and properties for creating reason instances.LdValue
helpers for dealing with array/object values, without having to use an intermediateList
orDictionary
:BuildArray
,BuildObject
,Count
,Get
.LdValue.Parse()
. It is also possible to useNewtonsoft.Json.JsonConvert
to parse or serializeLdValue
, but since the implementation may change in the future, using the type's own methods is preferable.
EvaluationReason
properties all exist on the base class now, so for instance you do not need to cast toRuleMatch
to get theRuleId
property. This is in preparation for a future API change in whichEvaluationReason
will become a struct instead of a base class.
- Improved memory usage and performance when processing analytics events: the SDK now encodes event data to JSON directly, instead of creating intermediate objects and serializing them via reflection.
EvaluationReason
subclasses. Use only the base class properties and methods to ensure compatibility with future versions.
- Added
LaunchDarkly.Logging.ConsoleAdapter
as a convenience for quickly enabling console logging; this is equivalent toCommon.Logging.Simple.ConsoleOutLoggerFactoryAdapter
, but the latter is not available on some platforms.
IUserBuilder.AnonymousOptional
allows setting theAnonymous
property tonull
(necessary for consistency with other SDKs). See note about this under Fixed.
IUserBuilder
was incorrectly setting the user'sAnonymous
property tonull
even if it had been explicitly set tofalse
. Null and false behave the same in terms of LaunchDarkly's user indexing behavior, but currently it is possible to create a feature flag rule that treats them differently. SoIUserBuilder.Anonymous(false)
now correctly sets it tofalse
, just as the deprecated methodUserExtensions.WithAnonymous(false)
would.LdValue.Convert.Long
was mistakenly converting to anint
rather than along
. (#32)
- A packaging error made the
LaunchDarkly.CommonSdk.StrongName
package unusable in 2.6.0.
- Value type
LdValue
, to be used in place ofJToken
whenever possible.
- All event-related code except for public properties now uses
LdValue
.
- Internal helper type
ValueType
, unnecessary now because we can useLdValue.Convert
.
- Many improvements to XML documentation comments.
- Internal helper types
ValueType
andValueTypes
. - XML documentation comments are now included in the package for all target frameworks. Previously they were only included for .NET Standard 1.4.
- Internal types are now sealed.
- Changed some internal classes to structs for efficiency.
IBaseConfiguration
andICommonLdClient
interfaces.
IBaseConfiguration.EventCapacity
andIBaseConfiguration.EventFlushInterval
.UserBuilder.Key
setter.
IBaseConfiguration.SamplingInterval
.IBaseConfiguration.EventQueueCapacity
(now a synonym forEventCapacity
).IBaseConfiguration.EventQueueFrequency
(now a synonym forEventFlushInterval
).
User
constructors.User.Custom
andUser.PrivateAttributeNames
will be changed to immutable collections in the future.
User.Builder
provides a fluent builder pattern for constructingUser
objects. This is now the preferred method for building a user, rather than settingUser
properties directly or usingUserExtension
methods likeAndName()
that modify the existing user object.User.IPAddress
is equivalent toUser.IpAddress
, but has the standard .NET capitalization for two-letter acronyms.
User.IpAddress
(useIPAddress
).- All
UserExtension
methods are now deprecated. The setters for allUser
properties should also be considered deprecated, although C# does not allow these to be marked with[Obsolete]
.
- Fixed a build error that caused classes to be omitted from
LaunchDarkly.CommonSdk.StrongName
.
- The package and assembly name are now
LaunchDarkly.CommonSdk
, and theInternalsVisibleTo
directives now refer toLaunchDarkly.ServerSdk
andLaunchDarkly.XamarinSdk
. There are no other changes. All future releases of the LaunchDarkly server-side .NET SDK and client-side Xamarin SDK will use the new package names, and no further updates of the oldLaunchDarkly.Common
package will be published.
- Added support for planned future LaunchDarkly features related to analytics events and experimentation (metric values).
- Added support for planned future LaunchDarkly features related to analytics events and experimentation.
- It is now possible to deserialize evaluation reasons from JSON (this is used by the Xamarin client).
- The
IFlagEventProperties
interface was extended and modified to support the aforementioned features.
- Under some circumstances, a
CancellationTokenSource
might not be disposed of after making an HTTP request, which could cause a timer object to be leaked.
- The assemblies in this package now have Authenticode signatures.
This release was an error. It works, but there are no changes from 1.2.1 except for using a newer version of dotnet-eventsource
, which was also an unintended re-release of the previous version.
The only changes in this version are to the build:
- What is published to NuGet is now the Release configuration, without debug information.
- The Debug configuration (the default) no longer performs strong-name signing. This makes local development easier.
LaunchDarkly.Common
now has anInternalsVisibleTo
directive for an unsigned version of theLaunchDarkly.Client
unit tests. Again this is to support local development, since the client will be unsigned by default as well.
-
The non-strong-named version of this library (
LaunchDarkly.Common
) can now be used with a non-strong-named version ofLaunchDarkly.Client
, which does not normally exist but could be built as part of a fork of the SDK. -
Previously, the delay before stream reconnect attempts would increase exponentially only if the previous connection could not be made at all or returned an HTTP error; if it received an HTTP 200 status, the delay would be reset to the minimum even if the connection then immediately failed. Now, if the stream connection fails after it has been up for less than a minute, the reconnect delay will continue to increase. (changed in
LaunchDarkly.EventSource
3.2.0)
-
Fixed an unobserved exception that could occur following a stream timeout, which could cause a crash in .NET 4.0. (fixed in
LaunchDarkly.EventSource
3.2.0) -
A
NullReferenceException
could sometimes be logged if a stream connection failed. (fixed inLaunchDarkly.EventSource
3.2.0)
Incorporates the fix from 1.0.6 that was not included in 1.1.0.
- New
EvaluationDetail
andEvaluationReason
classes will be used in future SDK versions that support capturing evaluation reasons.
- Updated LaunchDarkly.EventSource to fix a bug that prevented the client from reconnecting to the stream if it received an HTTP error status from the server (as opposed to simply losing the connection).
- The reconnection attempt counter is no longer shared among all StreamManager instances. Previously, if you connected to more than one stream, all but the first would behave as if they were reconnecting and would have a backoff delay.
- Updated the dependency on
LaunchDarkly.EventSource
, which no longer has package references to System assemblies.
- The package
LaunchDarkly.Common
is no longer strong-named. Instead, we are now building two packages:LaunchDarkly.Common
andLaunchDarkly.Common.StrongName
. This is because the Xamarin project requires an unsigned version of the package, whereas the main .NET SDK uses the signed one. - The project now uses a framework reference (
Reference
) instead of a package reference (PackageReference
) to refer toSystem.Net.Http
. An unnecessary reference toSystem.Runtime
was removed. - The stream processor now propagates an exception out of its initialization
Task
if it encounters an unrecoverable error.
''This release is broken and should not be used.''
- When targeting .NET 4.5, the dependency on
Newtonsoft.Json
now has a minimum version of 6.0.1 rather than 9.0.1. This should not affect any applications that specify a higher version for this assembly.
- The
Identify
method is no longer part ofILdCommonClient
, since it does not have the same signature in the Xamarin client as in the server-side .NET SDK.
Initial release, corresponding to .net-client version 5.1.0.