﻿= 2.58.0.0 (released 2026-10-30) =
NEW: Introduced OpcCertificateSettings.Organization, which adds the organization (O) to the subject of the application instance certificate the SDK creates, as required by OPC UA.
NEW: Introduced overloads of OpcDiscoveryClient.DiscoverEndpoints and DiscoverServers which filter by transport profile and server URI.
NEW: OpcBrowseNode.IncludeSubtypes is public now (default false), and OpcViewDescription provides public constructors to browse a view.
NEW: Introduced OpcClient.ChangeUserIdentity to change the user identity of a connected session.
NEW: Introduced OpcClient.ReconnectInterval, the time between two reconnect attempts (formerly ReconnectTimeout, which remains as a hidden alias), and OpcClient.MaxReconnectDuration, which ends the reconnect attempts after the time specified (default 0, unlimited).
NEW: Introduced OpcDataFieldInfo.GetLength, which states the maximum length of each dimension of a field.
NEW: Introduced OpcRawObject, which represents a value of a structure the SDK cannot decode (an unknown data type or a field of no fixed value rank) with its encoding and encoded body, and OpcData.Encode to encode a structure as an OpcRawObject. Breaking change: code which expected an array of bytes or an XmlElement for a value of an unknown structure receives an OpcRawObject; its RawData holds what was returned before.
NEW: Introduced the attributes RolePermissions, UserRolePermissions, AccessRestrictions and AccessLevelEx in OpcAttribute and OpcAttributes, the member DataTypeDefinition of OpcAttributes, and the types OpcRolePermission and OpcPermissions. Breaking change: reading the attribute DataTypeDefinition yields an OpcDataTypeInfo instead of a StructureDefinition or EnumDefinition of the stack, and reading RolePermissions or UserRolePermissions yields an array of OpcRolePermission instead of RolePermissionType.
NEW: The trace event of the stack (Opc.Ua.Tracing.Instance.TraceEventHandler) provides the traced exception in TraceEventArgs.Exception.
CHANGED: Removed the CertificateFactory of the stack from the public API of the package, since the SDK does not provide CA signing or CRL generation. Breaking change: code which uses CertificateFactory does not compile anymore.
CHANGED: OpcSecurityAlgorithm.Auto uses Basic256Sha256 instead of the deprecated Basic256 (Sign) and Basic128Rsa15 (SignAndEncrypt). Breaking change: a client using Auto no longer connects to a server which offers only the deprecated policies.
CHANGED: State, StateChanged and BreakDetected of OpcClient follow a lost connection detected by a failing service call (e.g. BadConnectionClosed or BadSessionIdInvalid) at once instead of with the next keep-alive, and a recreated session reconnects to a restarted server within one interval. Breaking change: code which relied on the state changing with the keep-alive only sees the change earlier.
CHANGED: The data type system of OPC UA provides all predefined data types (e.g. Integer, UInteger, Enumeration or Image), each data type states its supertype as BaseType, and fields of data types derived from a built-in type (e.g. Duration, UtcTime or LocaleId) decode. Breaking change: built-in types and the structures of OPC UA state their supertype as BaseType instead of none, and a field of a type derived from ByteString yields a ByteString instead of an array of bytes.
CHANGED: OpcClient.ReconnectTimeout and DefaultReconnectTimeout are obsolete; use ReconnectInterval and DefaultReconnectInterval instead. Breaking change: code which uses them receives a compiler warning, and a compiler error with TreatWarningsAsErrors.
CHANGED: The single-node history services OpcClient.ReadNodeHistoryProcessed, ReadNodeHistoryAtTime and ReadNodeHistoryModified throw an OpcException with the status code of the server (e.g. BadAggregateNotSupported) for a node the server rejected and return an empty result for a node the server accepted without values. Before, a KeyNotFoundException was thrown in both cases. Breaking change: code which catches the KeyNotFoundException has to catch the OpcException.
CHANGED: OpcDiscoveryClient (DiscoverEndpoints, DiscoverServers and its constructors) throws an OpcException stating the reason (e.g. BadSecureChannelClosed) when the server cannot be reached, closes the channel during the handshake or the discovery URL uses an unsupported scheme, and the history navigators of OpcClient.ReadNodeHistory and ReadEventHistory throw an OpcException stating BadCommunicationError when a page was not finished within the maximum number of requests. Before, the ServiceResultException of the stack was thrown. Breaking change: code which catches the ServiceResultException has to catch the OpcException.
CHANGED: OpcViewDescription.Default is a static readonly field now, so that the default view cannot be replaced. Breaking change: code which assigns OpcViewDescription.Default does not compile anymore.
FIXED: Issue with arrays of object (e.g. a method argument of the data type BaseDataType and the value rank OneDimension), which were encoded as an array of structures instead of an array of variants.
FIXED: Issue with OpcClient.Connect, which failed with an IndexOutOfRangeException on a server whose data type dictionaries state a NamespaceUri not at all or several times. A dictionary which cannot be loaded is left out and traced. The issue existed since version 2.8.0.0.
FIXED: Issue with OpcClient, which failed to connect to a server offering a user token policy with an unsupported security policy (e.g. RSA_DH_AesGcm) before a supported one.
FIXED: Issue with reading processed history (e.g. OpcClient.ReadNodeHistoryProcessed), which requested both timestamps, so that a server could reject the request with BadTimestampsToReturnInvalid. The issue existed since version 1.5.11.0. Breaking change: the processed values no longer carry a server timestamp.
FIXED: Issue with multi-dimensional fields of a structure (e.g. UInt16[2,3,2]), which were left out of its encoding. The issue existed since version 2.8.0.0.
FIXED: Issue with an OpcStatusCode, which could not be passed as a method argument or written as a value.
FIXED: Issue with OpcClient, which remained in the state Reconnecting when the server rejected one of its subscriptions after a reconnect. The issue existed since version 2.32.0.0.
FIXED: Issue with a structure described in a data type dictionary whose field refers to a data type known by its DataTypeDefinition only, which the client could not resolve. The issue existed since version 2.40.0.0. Breaking change: the Name and XmlName of such a data type state the namespace of its node instead of the namespace of OPC UA.
FIXED: Issue with fields declared with a data type which has no definition of its own (e.g. a vendor's subtype of Byte), which stated the nearest supertype instead of their declared data type, and with OpcClient.GetDataType, which provided no data type for such a data type.
FIXED: Issue with a matrix of structures, which failed to encode with an InvalidCastException. The issue existed since version 2.9.2.0.
FIXED: KeyNotFoundException in the single-node history update services OpcClient.CreateNodeHistory, ReplaceNodeHistory, UpdateNodeHistory, DeleteNodeHistory, DeleteNodeHistoryAtTime and DeleteNodeHistoryModified for a node identifier stating a namespace index only (e.g. "ns=2;s=Value"). The results of the history update services are keyed by the node identifier of the command now.
FIXED: Endless history read in case the server rejects a node on a following page of a history read, because the continuation point of the rejected node was requested again on each page. The issue existed since version 1.6.5.0.
FIXED: Issue with a new subscription whose monitored items the server rejected. In case the subsequent deletion of the subscription failed too, its error replaced the one of the monitored items. The OpcException states the reason why the monitored items were rejected now. The issue existed since version 2.32.0.0.

= 2.57.1.0 (released 2026-10-23) =
NEW: Introduced the NotificationFailed event in OpcSubscription and OpcClient, and the according handler OpcSubscriptionSetup.NotificationFailed, which occurs when a notification message from the server failed to be received, e.g. because a value in it cannot be decoded. Before, the data changes and events of such a message were dropped without notice. The event is first raised by the OpcSubscription the message belongs to and, if not handled, by the OpcClient. A message whose subscription is not known (yet) is reported by the OpcClient only.
FIXED: Issue with structured data types known only by their DataTypeDefinition (e.g. when using OpcClient.UseDynamic) which declare a member of another structured data type. Since version 2.57.0 such a member was decoded without its fields, so that the values decoded after it could be wrong, events holding such a structure were dropped without notice, or decoding failed with an exceeded MaxStringLength or the status code BadEncodingLimitsExceeded.
FIXED: Issue with structured data types known only by their DataTypeDefinition which declare a member of a simple data type without a definition of its own (e.g. a vendor-specific subtype of Byte, UInt16 or String). Decoding such a structure failed with an ArgumentNullException and the whole read with the status code BadUnknownResponse. Such a member is now decoded as the nearest supertype the client knows.
FIXED: Issue with events of a built-in event type in OpcClient. Since version 2.56.0 such an event was created as an instance of one of the base types of its event type, e.g. a dialog condition as OpcCondition instead of OpcDialogCondition or an alarm condition as OpcAcknowledgeableCondition instead of OpcAlarmCondition.
FIXED: Issue that caused OpcClient.Connect() to fail when UseDynamic is enabled and the server sends the same HasSubtype or HasEncoding reference of a data type more than once.

= 2.57.0.0 (released 2026-09-14) =
FIXED: Issue with structured data types using OpcEncodingMaskKind.Auto whose first optional member is not set. Values decoded after such a member could be wrong, or decoding failed with an EndOfStreamException or a ServiceResultException reporting an exceeded MaxStringLength.
FIXED: Issue with members of a structured data type declared as one of the wrapper types OpcText, OpcName, OpcNodeId, OpcValue or OpcEngineeringUnitInfo. Such a member is now encoded and decoded consistently, whether it holds a value or a null reference.
FIXED: Issue with members of a structured data type declared as a nullable value type (e.g. int?, short?, double? or DateTime?). The value of such a member is now preserved.
FIXED: NullReferenceException while decoding a structured data type with an array member which is not optional and holds a null reference.
FIXED: InvalidCastException while decoding an array of Guid values.
FIXED: Issue with empty arrays of the wrapper types OpcText, OpcName, OpcValue and OpcEngineeringUnitInfo. As a member of a structured data type such an array is now encoded as an empty array instead of a null reference, and as a parameter of a method call it is now passed as an array of the type the called method declares, which a server accepts. Before, only a null reference was accepted for such a parameter.
FIXED: Issue with an empty array of OpcNodeId values being passed as an array of expanded node identifiers.

= 2.56.0.0 (released 2026-08-19) =
FIXED: Issue with wrong event type resolution in OpcClient in case an event type is registered using only an expanded node identifier (e.g. using OpcNamespace.GetId, where the OpcNamespace instance does not have a namespace index assigned). This results into always receiving OpcEvent instances instead of the specific sub-type of OpcEvent or a custom typed event data storage.

= 2.55.0.0 (released 2026-08-07) =
FIXED: StackOverflowException when machine is under load.

= 2.54.1.0 (released 2026-07-22) =
NEW: Introduced new OpcNodeSet.GetNodes method to retrieve the whole address space defined by a node set.
FIXED: Issue with incorrect encoding of optional fields in the OpcClient when enabling UseDynamic and the server doesn't provide a TypeDictionary.
FIXED: Issue with only root node based node retrieval using the method OpcNodeSet.GetNode. The method now retrieves any node in the node set loaded.
FIXED: Issue with node retrieval using the method OpcNodeSet.GetNode after loading a node set without a custom context with matching namespace URIs.

= 2.54.0.0 (released 2026-06-25) =
NEW: Added support providing event history in the OpcServer using the IOpcEventHistoryProvider interface, and for reading event history in the OpcClient with the ReadEventHistory method.
CHANGED: Enhanced certificate validation especially for application instance certificates to support compliant validation of basic constraint extensions. This is required for CTT compliance.
FIXED: OpcText.Equals() and .CompareTo() methods could throw a NullReferenceException and could return a wrong comparison result.

= 2.53.1.0 (released 2026-05-06) =
FIXED: Exception occured when some types in user assemblies couldn't be loaded when using an OpcServer, or OpcClient while dynamic type registration is enabled.

= 2.52.0.0 (released 2026-03-13) =
NEW: Introduced support for new security policy algorithms Aes128_Sha256_RsaOaep and Aes256_Sha256_RsaPss.

= 2.51.4.0 (released 2026-02-18) =
NEW: Introduced client-side support of ResendData using OpcSubscription.ResendData to query current values of monitored items in reporting mode.

= 2.51.2.0 (released 2026-01-12) =
FIXED: Issue that could cause OpcClient.Connect() to fail when UseDynamic is enabled and the server provides one or more type dictionary nodes that returned an BadNotReadable status when reading them. In that case, the error is now ignored and an empty type dictionary is used.

= 2.51.0.0 (released 2025-11-24) =
CHANGED: When using .NET Framework, version 4.7.2 or higher is now required.

= 2.50.2.0 (released 2025-07-07) =
FIXED: Issue receiving ModelChangeEvent and GeneralModelChangeEvent data in OpcClient.
FIXED: Issue with NullReferenceException in OpcGeneralModelChange in case where the Changes property of the data store was a null reference (Nothing in Visual Basic).

= 2.50.1.0 (released 2025-06-16) =
NEW: Added support of method members in NodeType reflection.

= 2.50.0.0 (released 2025-06-12) =
NEW: Added new OpcEncoding.Empty() method to provide empty encoding arrays.
NEW: Added new OpcEncodingMask.DefaultAuto to simplify generic encoding definitions.
NEW: Introduced support of NodeTypeSystem information in the OpcContext.
NEW: Introduced thread local OpcContext (using new OpcContext.Current property) to support scenarios where an OpcContext is required but not given by any parameter e.g. in the ctor of some node.
CHANGED: When OpcClientSecurity.UseOnlySecureEndpoints is set to true, the OpcClient now only selects endpoints with a 'SignAndEncrypt' mode, and no longer selects ones with a 'Sign' mode, because the latter does not provide confidentiality.
         To use the previous behavior of selecting endpoints with a "Sign" or "SignAndEncrypt" policy, set client.Security.EndpointPolicy to one with that mode, and set OpcClient.Security.AutoUpgradeEndpointPolicy to true. Alternatively, to select the "best" endpoint offered by the server, set OpcClient.Security.UseHighLevelEndpoint to true (but note that this does not provide security).
CHANGED: When creating an event filter with OpcEventFilterFactory.Select(), the type identifier of the BaseEventType is now used by default in the simple attribute operands (as it was before v2.32.0.0), to ensure that when specifying multiple event types that may have fields with the same name, all fields can be received.
         To use the previous behavior of specifying the actual event type identifier in the simple attribute operands, specify OpcEventFieldSelectOptions.UseExplicitEventTypeIds in OpcEventFilterFactory.Select().
FIXED: NullReferenceExceptions while comparing to Number struct values in case the underlying value is a null reference (Nothing in Visual Basic).
FIXED: Issue which could cause OpcEngineeringUnitInfo.CommonCode to return a string containing a NUL character.
FIXED: Issue which could cause an OpcException when reading a structured data type with an array of nested structured data types when OpcClient.UseDynamic was enabled.
FIXED: Issue with InvalidCastException when reading a structured data type containing an array of structured data types.
FIXED: Issue which could cause the OpcClient to connect to endpoints with a 'None' policy mode when that was the only policy offered by the server, even if OpcClientSecurity.UseOnlySecureEndpoints was set to true.
FIXED: Issue with decoding structured data types when a null value occured for an array field.
FIXED: IndexOutOfRangeException when importing a NodeSet where a VariableNode specifies a ValueRank of 0.
FIXED: Methods OpcData.Decode<T>(...) that were intended to be added with version 2.40.0.0 were missing in the Opc.UaFx.Client SDK.

= 2.42.5.0 (released 2024-12-03) =
FIXED: NullReferenceException that was thrown and caught internally when processing an empty publish response.

= 2.42.4.0 (released 2024-10-21) =
NEW: Introduced implicit cast operator from UserIdentityToken to OpcIdentityToken.
CHANGED: Updated Portable.BouncyCastle dependency to version 1.9.0, to fix a vulnerability.

= 2.42.3.0 (released 2024-09-10) =
NEW: Added support for subscription licenses.
FIXED: Issue that could cause OpcClient.State to be stuck in "Connecting" when calling OpcClient.Disconnect(), while at the same time another thread calls methods like OpcClient.CallMethod().

= 2.42.0.0 (released 2024-06-05) =
CHANGED: OpcArgument.ArrayDimensions and OpcArgumentInfo.ArrayDimensions now support null references (Nothing in Visual Basic) when enabled via OpcAutomatism.UseNullInsteadOfEmptyArrays. This means whenever a server provides a value of "null" for the ArrayDimensions this property will now return a null reference (Nothing in Visual Basic) as well.
NEW: Introduced new property OpcAutomatism.UseNullInsteadOfEmptyArrays to control several array / list / collection properties regarding their supported / encoded values. When setting this property to the value true, some properties will no longer set a null reference (Nothing in Visual Basic) to an empty array / list / collection. In addition they encode these values using an array size equal to -1. If a server / client "requires" an empty array / list / collection, the OpcAutomatism.UseNullInsteadOfEmptyArrays property has to be set to the value false. This results into empty array / list / collection values which are encoded using an array size equal to zero.
FIXED: The OpcClient no longer selects an endpoint with an unknown security algorithm (which would fail to connect) when using default settings and there is at least one endpoint available with a known security algorithm.
FIXED: Added a workaround for some OPC Classic servers that don't support reading specific properties together with other, regular properties.

= 2.41.1.0 (released 2024-01-18) =
FIXED: Issue that caused a memory leak in the OpcClient when repeatedly calling OpcClient.BrowseNodes() or accessing file nodes with class OpcFileMethods, OpcFileStream or OpcFileInfo.
FIXED: Issue that could cause the OpcClient to incorrectly send Read requests (from the keep-alive timer) even when the ActivateSession call hasn't completed yet.

= 2.41.0.0 (released 2023-12-02) =
FIXED: Issue with OpcVariableNodeInfo.IsArray and OpcVariableNode.IsArray incorrectly returning false (the former since v2.33.0) for an array with 3 or more dimensions.
FIXED: Issue with a deadlock occuring when calling OpcClient.Disconnect() or OpcClient.Dispose() while at the same time event subscriptions were active.
FIXED: Issue that caused the OpcClient.State not changing to 'Reconnecting' when a connection break was detected while an operation like ReadNodes() was still executing.
FIXED: Issue that prevented to create an event filter from an OpcNodeId if it was using a resolved namespace.
FIXED: Issue that caused reflected type fields to be declared in a wrong order when the type implements an interface.

= 2.40.0.0 (released 2023-10-23) =
NEW: Enhanced OpcDataTypeInfo to support ExtensionObjects as system type as well (IsSystemType property).
NEW: Introduced new OpcData.Decode<T>(...) methods to manually decode a binary encoded data stream/buffer to a structured object.
NEW: Introduced explicit support for encoding/decoding/use of ExtensionObjects.
NEW: Improved performance when receiving custom event data for the first time.
NEW: Introduced new OpcNodeSet.Load(string, OpcNodeSetLoadOptions) method to provide more details about the node-set file to load.
FIXED: Issue with wrong calculated encoding mask when using explicit encoding.
FIXED: Issue with encoding/decoding subtypes of built-in data types according to their base types.
FIXED: Issues with en-/decoding ExtensionObjects in custom structured data types.
FIXED: Issue with nested event type fields like ActiveState/Id not being reported correctly since v2.32.0.
FIXED: Issue with mixed data types which are defined using DataTypeDescriptions and DataTypeDefinitions while the definitions uses different field types. The descriptions are now priorized.
FIXED: Issue with event subscriptions not working since v2.29.0 when no OpcEventFilter was specified.

= 2.33.0.0 (released 2023-09-11) =
NEW: Improved performance of event filter creation using only event types of the node type system provided by the server.
NEW: Introduced support of data types which are only declared using a data type definition and no longer a data type description.
NEW: Introduced support of dynamic union data type resolution and representation using the OpcDataObject.
CHANGED: OpcContext.Empty.SessionId no longer provides a null reference (Nothing in Visual Basic). Instead it provides OpcNodeId.Null.
CHANGED: Evaluation of OpcVariableNodeInfo.IsArray to no longer use the ValueRank value instead of the ArrayDimensions to decide whether the Value attribute provides an array.

= 2.32.0.0 (released 2023-08-28) =
NEW: Introduced new Name property in OpcDataTypeAttribute to define a different name per DataType as used by the implementing .NET type.
NEW: Introduced support of lazy initialization of custom OpcData store implementations with support of a default constructor.
NEW: Introduced new IsUnion property in IOpcDataTypeInfo to indicate whether a data type is union data type.
NEW: Introduced new interface IOpcUnion to implement custom union data types using this interface type.
NEW: Introduced typed support of the abstract Number data type which supports the encoding of all primitive numeric data types.
NEW: Introduced new OpcSubscriptionSetup class to create a new subscription with all properties preset in once.
NEW: Introduced new OpcClient.CreateSubscription(...) method which uses a OpcSubscriptionSetup to create a new subscription.
FIXED: Added a reference to System.Text.Encodings.Web 4.5.1 (for the NuGet package), to fix a vulnerability warning caused by the transitive reference through Microsoft.AspNetCore.Server.Kestrel 2.1.3/1.1.3.
FIXED: Issue with always used type identifier of the BaseEventType in the simple attribute operands in an event filter.
FIXED: Issue to assure that equal Start and End times when read processed history values do not result into a infinite loop and memory consumption.
FIXED: Issues with deadlocks when using UseDynamic and subscriptions consuming structured data types represented using OpcDataObjects.

= 2.31.0.0 (released 2023-05-17) =
CHANGED: Updated Newtonsoft.Json dependency to version 13.0.3, to fix a vulnerability.

= 2.30.0.0 (released 2022-12-07) =
CHANGED: The OpcEvent.EventId property now provides the underlying ByteString instead of an byte-array (before the ByteString was introduced).
FIXED: OpcEvent.GetValue<T>(string) correctly returns a ByteString value when type parameter T is Opc.UaFx.ByteString.
FIXED: Issue with ArgumentException in OpcClient.Connect() when the current AppDomain's friendly name contains non-path characters (e.g. in an Office VSTO add-on).

= 2.29.0.0 (released 2022-09-16) =
NEW: Introduced OpcNamespace.GetNextId() method to query the next free numerical node identifier from the OpcNamespace.
FIXED: Issues with missing data type information for the abstract data type "Structure" (i=22).

= 2.28.1.0 (released 2022-09-02) =
NEW: Introduced inline initialization of encoding mask related "reserved" fields using a bit-array.

= 2.28.0.0 (released 2022-08-19) =
NEW: Unknown (user) defined data types are now resolved using the events OpcData.TypeResolve and OpcClient.TypeResolve using the according encoding identifier and OpcNodeId.Null for the data type identifier.
CHANGED: Disabling OpcAutomatism.UseDynamicTypeRegistration resulted to a deferred dynamic type registration at the time a custom data type is manually registered.
FIXED: Issue with OpcData.TypeResolve there the event arguments passed provided the encoding identifier as the type identifier. This has been solved and the encoding identifier is provided as part of the Encoding supplied. 
FIXED: Issue with OpcClient.TypeResolve not being invoked for every data type.
FIXED: Issue with not encoded dynamically resolved data types.
FIXED: Issue with missing leading array length in case a data type uses a fixed length field.
FIXED: Issues with inline registered data types although OpcAutomatism.UseDynamicTypeRegistration has been disabled.
FIXED: Issues with enumerations described in a different data type dictionary as structured data types when using full qualified data type identifiers (value and namespace uri).
FIXED: Issues when selecting an endpoint by constraints, to ignore endpoints that have Mode == None but Algorithm != None and fallback if there is no other endpoint available.

= 2.27.0.0 (released 2022-06-27) =
NEW: Added new OpcClient.TypeResolve event to resolve user defined types according to client / session related conditions.
NEW: Improved OpcDataTypeDictionary.GetType(OpcEncoding) to consider encodings without expanded node identifiers.
NEW: Introduced IOpcDataTypeMapper and its default implementation OpcDataTypeMapper.
NEW: Introduced new OpcData method to register, determine and unregister custom data type mappers.
NEW: Introduced new OpcDataTypeMapper.Convertible and OpcDataType.Delegate methods to construct simple custom data type mappers.
FIXED: Regression with enhancement of IOpcNodeInfo.Child overloads and their implementations.

= 2.26.0.0 (released 2022-04-13) =
NEW: Added new Declarations property to OpcDataTypeInfo to indicate in which way data type has been declared.
NEW: Added support for arrays of Bit members to define the encoding bits no longer only using scalar encoding bit members.
NEW: Enhanced OPC Watch with new upload button to write a file to a file node (the existing file content is truncated before).
FIXED: Issue with not respected custom data type encoding identifiers.
FIXED: Issue with cached application certificates using a custom application store path.

= 2.25.0.0 (released 2022-03-22) =
NEW: Updated OPC UA Stack Types to v1.04.368.
NEW: Introduced IOpcData<T> to provide a way to subclass data types which are programmatically not inheritable.
NEW: Different improvements for lazy and cached data type metadata processing to improve performance of encode/decode operations.
NEW: Introduced new OpcClientSecurity related properties to configure the AuthenticationLevel and ImpersonationLevel the client shall use when connecting to an OPC Classic server.
CHANGED: Default size of (auto) encoding mask from one bit to 32 bit to improve usability of the by default expected 32 bit encoding mask.
FIXED: Issue with (auto) bit number used when a data type members is marked as optional using OpcDataTypeMemberSwitchAttribute.
FIXED: Issue with reloading the servers data type system after a connection has been lost and re-established.

= 2.24.0.0 (released 2022-03-09) =
NEW: Introduced support for OPC UA NumericRange information using the new OpcRange structure.
NEW: Enhanced OpcReadNode with new Range property to support reading a range of elements in an attribute.
NEW: Enhanced OpcWriteNode with new Range property to support writing a range of elements in an attribute.
NEW: Introduced additional OpcClient.ReadNode method overloads to provide an OpcRange to read a range of elements in an attribute.
NEW: Introduced additional OpcClient.WriteNode method overloads to provide an OpcRange to write a range of elements in an attribute.
FIXED: Issues with strict XmlReflectionImporter used in Mono/Xamarin while mapping class information (including expected attributes and property types).

= 2.23.0.0 (released 2022-03-02) =
NEW: Introduced new Tag property in OpcServiceCommand to assign custom metadata bound to a specific command.
NEW: Introduced Load, Parse and TryParse methods on OpcDataTypeDictionary to provide different ways to consume a XML serialized dictionary in any possible way.
NEW: Overall review of OpcReadHistoryDetails, OpcReadNodeHistoryDetails, OpcReadNodeHistoryRawDetails and OpReadNodeHistoryModifiedDetails.
NEW: Added missing documentation to OpcReadHistoryDetails, OpcReadNodeHistoryDetails, OpcReadNodeHistoryRawDetails and OpReadNodeHistoryModifiedDetails.
NEW: Introduced new ReturnBounds property in OpcReadNodeHistoryDetails.
NEW: Introduced new ReadNode[s]History[Modified] methods to OpcClient to support custom OpcReadHistoryDetails.

= 2.22.0.1 (released 2022-02-25) =
FIXED: Issue calling Acknowledge, Confirm and AddComment on OpcCondition and OpcAcknowledgeableCondition instances.

= 2.22.0.0 (released 2022-02-11) =
NEW: Introduced new CreateArray method in OpcArrayDimensions.
NEW: Introduced new GetDataType methods in OpcContext to determine context sensitive data type information.
NEW: Introduced support of OpcModelChangeEvent and OpcGeneralModelChangeEvent including its OpcModelChangeItem and OpcModelChangeActions.

= 2.21.0.0 (released 2022-02-01) =
NEW: Client API - Prepared OPC UA v1.04 compatible support of data type definitions using data type nodes new DataTypeDefinition attribute. This enhancement is backwards compatible to OPC UA v1.03, because data type dictionaries and data type descriptions including the data type encodings are still used to determine declared and described data type information.

= 2.20.4.0 (released 2022-01-14) =
NEW: Clients are now notified with the status code BadNodeIdUnknown when a node subscribed is deleted later.

= 2.20.3.0 (released 2022-01-04) =
FIXED: Issue with OpcNamespace.Resolve() and OpcNamespaceCollection.ResolveValue() not working correctly.
FIXED: Issue with StackOverflowException when (implictly) converting a byte[] as a null reference to ByteString.

= 2.20.2.0 (released 2021-10-20) =
FIXED: Issue with duplicated string in OpcException.Message.

= 2.20.1.0 (released 2021-10-08) =
FIXED: Issue when connecting to a server using 'https:' URLs on .NET Framework.

= 2.20.0.0 (released 2021-09-17) =
NEW: OpcClient now provides node type information for event, object and variables types.
NEW: OpcNode provides new RegisterType und UnregisterType methods to define/undefine custom node types.
NEW: OpcNode provides new GetType and GetTypeInfo methods to determine Sytem.Type and OpcNodeTypeInfo instances used to define/describe a node type.
NEW: Enhanced OpcNodeTypeSystem class to provide Default and Current node type system related node type information.
NEW: Members in OpcNodeTypeInfo to provide additional information about the type and its children/members.
CHANGED: OpcMemberOrigins now defines an additional enum member "Method" for method origins.

= 2.19.2.0 (released 2021-09-10) =
NEW: Introduced support of IEnumerable<OpcName> in OpcNamePath.
NEW: Introduced new OpcClient.GetType(s) methods to determine any type information associated with a node identifier.
NEW: Introduced new OpcClient.IsSubtypeOf method to determine whether a type is a subtype of another type.
NEW: Introduced new IOpcNodeInfo.Child(OpcNamePath) method to determine a child node using a path of browse names to follow and lookup the according child.
NEW: Introduced new ServiceName property in OpcServiceRequest and OpcServiceResponse.
NEW: Introduced new methods GetResults and GetResultExceptions in OpcServiceResponse to determine request and command related exception information.
CHANGED: Removed unnecessary new lines in the string representation of OpcException instances.
FIXED: Misleading use of the same base type (= the top most node type) for the top most base type when examining the type hierarchy of a node type (e.g. BaseType of 'BaseEventType' was 'BaseEventType').
FIXED: Possible NullReferenceExceptions using OpcClient.GetDataType and OpcClientGetNodeType methods with a null reference (Nothing in Visual Basic) instead of a valid instance of the OpcNodeId class.
FIXED: Issue with too few history values being returned when the server sent no values but a continuation point in one of the responses.

= 2.19.1.0 (released 2021-09-01) =
NEW: Introduced new OpcEvent.GetValue method for subclasses to determine the correct value according to its event type definition and using its property name as the name of the node its value is to be retrieved. However the same method can be used to resolve the value using the qualified name syntax as known/supported using the DataStore.Get methods. This assures that custom event types do not longer need to know the namespace index in any case.
CHANGED: IOpcReadOnlyNodeDataStore requires now the implementation of IOpcNamespaceResolver as well.
FIXED: Issue with resolving the according custom OpcEvent type/instance for a custom event declared using the expanded node identifier of the event type.

= 2.19.0.0 (released 2021-08-27) =
CHANGED: Parameter of OpcFilterOperand.OfType from "value : object" to "typeId : OpcNodeId" to assure that a "OfType" operand is evaluated as expected (= using a OpcNodeId).
NEW: Enhanced node type and data type resolution to support expanded (= resolved) node identifiers as well.
FIXED: Regression issue using OpcFileNode access using Read and Write operations after enforcing foundations stack to use ByteString for ByteString and byte[] for byte[] instead of using ByteString for byte[].
FIXED: Issue with no history values being returned when server reports status code 'GoodNoData' with a continuation point.
FIXED: Issue with a infinite history values being returned when server allows to re-use continuation points.

= 2.18.5.0 (released 2021-08-13) =
NEW: Introduced support of encoding-based data type retrieval using OpcClient.GetDataType with e.g. OpcValue.DataTypeId.
NEW: Enhanced processing of (structured) data type information to support duplicate data type declarations to redirect to data type descriptions where referenced.
FIXED: Regression in v2.18.4.0 with OpcException+BadServerNotConnected with enabled OpcClient.UseDynamic option while connecting to a server.
FIXED: Issues with Siemens OPC UA Servers using a custom server interface setup with custom structured data types. This resolution requires to "enable standard SIMATIC server interface" as well to support the custom server interface setup and its data types used.

= 2.18.4.0 (released 2021-08-09) =
NEW: Introduced indexer using an Int32 to address a dedicated OpcDataField in OpcDataObjects.
NEW: OpcClient.SubscriptionsChanged event is now raised whenever OpcClient.Subscriptions are cleared.
NEW: Removed obsolete code not longer supported in .NET 5.0.
FIXED: Issue with late loaded custom type information after the OpcClient.Connected event has been raised.

= 2.18.3.0 (released 2021-06-28) =
NEW: Introduded additional OpcNodeIdComparison options: IgnoreNamespaceIndex and IgnoreNamespaceIndexIgnoreCase.
FIXED: Issue transporting a byte-array to a method node, because of the foundation stack transfers such a value by default as a ByteString instead of using it as it is.

= 2.18.2.0 (released 2021-06-17) =
NEW: Introduced OpcNodeIdComparison and new OpcNodeId.Equals methods to compare node identifiers using different comparison methods.
CHANGED: OpcNodeId now matches the OPC UA specification and compares node identifiers and namespaces case-sensitive.

= 2.18.1.0 (released 2021-06-02) =
NEW: Added additional setter to OpcBrowseNode.Degree property.
FIXED: Issue when running on Mono and connecting to a OPC UA Server that doesn't send a certificate.
FIXED: Issue with missing subscription based notifications after an automatic reconnection.
FIXED: Issue with using OpcValue + byte[] which result into a ByteString encoded Byte-Array upon the underlying stack API.

= 2.18.0.0 (released 2021-05-26) =
NEW: Introduced new OpcReferenceTypes.GetReferenceTypeName(OpcNodeId) and GetReferenceType(OpcName) methods.
NEW: Completely reviewed and enhanced the types OpcRelativePath and OpcRelativePathElement.
NEW: Introduced support for browse path translation using the TranslateBrowsePath service.
NEW: OpcClient now supports browse path translation using new TranslatePath and TranslatePaths methods.
CHANGED: Format of ByteString from base64 encoding to hex (= "X2") encoded / formatted strings which matches foundations binary encoded representation of a ByteString.
FIXED: Issues with reflecting System.Type information which is defined by-reference e.g. using an "out" parameter in the delegate of a method node.
FIXED: Issues with importing UANodeSets its references use aliases to address a dedicated node.
FIXED: Issue with missing type identifier whenever inspecting fields of data types there the type of the field is an array type. The array type did not provide the type identifier of its element type.
FIXED: Issues in applications with third party components using attribute types which are not loadable. This fixes TypeLoadExceptions whenever custom data / event types are inspected.

= 2.17.0.0 (released 2021-05-04) =
NEW: Enhanced encoding/decoding support for structured data types using their base type information.
NEW: Introduced support of namespaces with null references using OpcNamespace.Create.
NEW: Introduced explicit support of the ByteString data type to simplify differentiation between byte[] and ByteString values.
FIXED: Issue with servers supplying null references in their array of namespaces.
FIXED: Issue with firewall aware and therefore DNS safe host names used to create a new session using the raw discovered endpoint URL instead.
FIXED: Issue with TypeInitializationException while testing for Unity in some dynamic assembly load scenarios.
FIXED: Issue with InvalidOperationException in foundations BufferManager whenever a still locked buffer is to be returned without a preceding unlock.
FIXED: Issue with comparing expanded node identifiers with the same identifier using different namespaces.
FIXED: Issue with querying type information from a custom type its name is already in use by a different custom type in a different namespace.

= 2.16.1.0 (released 2021-04-21) =
NEW: Enhanced OpcNominalNodeIdFactory to apply custom logic to the OpcName used to define the OpcNodeId created.
FIXED: Issue with still existing OpcSubscription instances in OpcClient.Subscriptions althougth the client has been disconnected.

= 2.16.0.0 (released 2021-04-20) =
FIXED: Issue with FileNotFoundException using some third party assemblies while dynamic type registration is enabled.

= 2.15.0.0 (released 2021-03-31) =
NEW: Introduced new Opc.UaFx.Client.OpcSubscription.Client property to get access to the client which is the owner of a subscription.

= 2.14.0.0 (released 2021-03-04) =
NEW: Introduced new static OpcName.IsNullOrEmpty method which ignores the namespace information associated with the OpcName.
NEW: Introduced new static OpcNodeId.IsNullOrEmpty method which ignores the namespace information associated with the OpcNodeId.
NEW: Introduced new OpcNamespace.GetId(object) method to determine a new node identifier without to know which type of value it is.
NEW: Introduced additional non-generic OpcData.RegisterType methods to not longer enfore the use of the generic type parameter.
FIXED: Issue with "malformed" or "TooMany" subscriptions preventing the OpcClient to automatically reconnect after connection loss.
FIXED: Issue with missing custom enumeration type references in the global data type system.

= 2.13.0.0 (released 2021-03-01) =
NEW: Improved dynamic resolution of the data type attribute supporting expanded node identifiers as well.
NEW: Improved dynamic data type encoding / decoding to support subclassing and cascaded custom structured data types.
NEW: Introduced new OpcDataTypeIgnoreMemberAttribute to explictly exclude a member from being encoded or decoded.
NEW: Introduced new OpcDataTypeAttribute.NamespaceUri property to define the target namespace used for the data type dictionary of the data type.
NEW: Introduced support for embedded custom data types when using dynamic data exchange using container types like Variant and/or ExtensionObject.

= 2.12.3.0 (released 2021-02-17) =
NEW: Enhanced support of IL2CPP regarding issues with embedded string evaluation.
FIXED: Issues using default certificate probing paths in Unity using UWP.

= 2.12.2.0 (released 2021-02-15) =
NEW: Implemented localization support for arguments of a method node.
FIXED: Issue with missing localized information in case there a client uses the locale of a neutral culture.
FIXED: Issue with null references (Nothing in Visual Basic) in case of reading localizable attributes without localization information.

= 2.12.1.0 (released 2021-02-11) =
This release affects only the Server related API.

= 2.12.0.0 (released 2021-02-04) =
NEW: Introduced new Namespaces property in IOpcApplicationInstance and OpcApplicationInstance to provide the namespaces used.
NEW: Introduced new Namespaces property in OpcClient to reflect the namespaces defined by the server connected to.
NEW: Introduced new Namespaces property in OpcContext to provide the namespaces currently valid within a given context.
NEW: Implemented IOpcNamespaceResolver in OpcNamespaceCollection and OpcReadOnlyNamespaceCollection.
NEW: Resolve method in IOpcNamespaceResolver to resolve another (= "online") namespace using the metadata from a (offline / local) defined namespace.
NEW: OpcNamespace now provides an Uri whenever the OpcNamespace.Value is a valid Uri.
NEW: Introduced new Scope property in OpcNamespace to describe the context within the namespace has been created and its metadata applies to.
CHANGED: The OpcNamespace.Default namespace now provides the default Value and Uri used to identify the foundations default namespace.
CHANGED: Removed obsolete methods from IOpcNamespaceResolver and all its implementations in OpcClient, OpcServer, OpcContext and OpcNodeManager.
CHANGED: OpcClient.State transitions to not longer change the state (using the by default activated reconnect mechanism) by calling e.g. ReadNode while the OpcClient is about re-establish a broken connection.
CHANGED: In case of a broken connection the OpcClient tries (by default) to re-establish the connection and re-use the previously used session. If this works the OpcClient will raise the Reconnected event as before. In case the client has been forced to create a new session (e.g. upon timeout of the previous session) the OpcClient will now raise the Connected event instead of the Reconnected event to provide a way to differ these conditions in user code.
FIXED: Issue with "collapsed" endpoint urls when discovering a server which returns e.g. "opc.tcp://:4840".
FIXED: Issue with un-resolved node identifiers used when manually creating monitored items being added to a subscription.
FIXED: Issue with "over-resolved" node identifiers through resolving a node identifier always to a new node identifier instead of overriding namespace information in existing node identifiers.
FIXED: Issue with providing custom data types without to define an explicit NamespaceUri in its DataTypeEncoding.
FIXED: Issue with lost OpcNamespace information after inline re-initializing the node identifier of a node its foundation node identifier has been changed in meantime.
FIXED: Issue in applications where multiple servers are accessed or a client and server are implemented in the same process; however all involved namespaces did not match every use case. This has now been solved through not longer inline resolving the namespace of an existing node identifier and OpcNamespace instance. If this is desired the user now have to resolve the namespace on its own.

= 2.11.5.0 (released 2020-12-21) =
This release affects only the Server related API.

= 2.11.4.0 (released 2020-12-15) =
NEW: Introduced new OpcContext.Owner property which refers to an IOpcApplicationInstance like OpcClient or OpcServer the context belongs to (if available).
NEW: Introduced new OpcException.Context property which offers an instance of the OpcContext class and therefore provides additional context-sensitive information regarding an exception thrown/caught.

= 2.11.3.1 (released 2020-11-27) =
FIXED: Issue connecting to Servers evaluating endpoint URLs using case sensitive comparsion and not supporting '/' terminated URLs.

= 2.11.3.0 (released 2020-11-23) =
NEW: Added missing OpcEventDataSetItem.ClientID property.
NEW: Added missing code documentation of OpcSecurityPolicy, OpcSecurityMode and OpcSecurityAlgorithm.
CHANGED: OpcDataChangeDataSetItem.ClientID from Int32 to Int64 to match used type in OpcMonitoredItem.ClientID.
FIXED: Issue with missing OpcNotification.Data using OpcNotification.GetDataChanges() without accessing OpcNotification.Data before.
FIXED: Issue with type initialization in OpcClient using Unity with IL2CPP which results into a different type initilization order.

= 2.11.2.0 (released 2020-11-10) =
FIXED: Issue that could lead to a hang in OpcClient.Dispose() when a subscription was active.
FIXED: Possibility of Exceptions in OpcClient.Dispose and OpcServer.Dispose.
FIXED: Issue validating license information using IL2CPP and .NET Standard 2.0 as scripting backend in Unity.
FIXED: Issue which prevented use of an existing SynchronizationContext to process notifications in the same context a subscription was created from.

= 2.11.1.0 (released 2020-11-05) =
NEW: Property to configure the TimestampsToReturn for all requests using OpcClient.Services.ReadNodesHistory.TimestampsToReturn.
NEW: Property to query the ApplicationUri contained in the subject alternate name extension of certificates using the OpcCertificateInfo.ApplicationUri property.
NEW: Property OpcClientSecurity.AutoUpgradeEndpointPolicy to enable endpoint selection using a match (= default) and next-best technique to determine an endpoint which at least satisfies the policy configured.
CHANGED: The constructor of OpcCertificateJudgementEventArgs does not longer verify if the specified certificates are a null reference (Nothing in Visual Basic), because of some Server might supply no certificate data.
FIXED: Issue with not longer stored last notifications in subscriptions / monitored items if they are not (longer) created for the current session.

= 2.11.0.0 (released 2020-10-06) =
NEW: Added missing code documentation to subscription related types in the Client namespace.
CHANGED: OpcClient methods validate the connection state using an OpcException (with BadServerNotConnected) instead of using an InvalidOperationException.
CHANGED: Default QueueSize of OpcMonitoredItem created using OpcClient.SubscribeEvent(s) from int.MaxValue to uint.MaxValue to enfore that the server uses the maximum queue size supported for event notifications (which was initially intended with the wrong int.MaxValue).
CHANGED: Renamed OpcMonitoredItemStatus.DataItemQueueSize to QueueSize to match the naming used in OpcMonitoredItem (which defines the requested size while the status gives the revised size).
CHANGED: Returned type of OpcMonitoredItemStatus.Id from Int32 to Int64 to cover the underlying non-CLS compliant UInt32 of the foundations stack.
CHANGED: Adopted recently reviewed API of OpcMonitoredItem to OpcMonitoredItemStatus and reworked OpcMonitoredItemStatus.AutoFlushCache to QueueMode (as in OpcMonitoredItem).
FIXED: Wrong status code used for communication errors (BadNotConnected -> BadCommunicationError).
FIXED: Client connected to a fallback/unsecure endpoint in case of a preset SecurityPolicy is not supported by a Server.
FIXED: Issue with not applied OpcSubscription.TimestampsToReturn without changing the monitored items of a subscription.
FIXED: Typos in RegisterNode(s) code documentation.

= 2.10.0.3 (released 2020-09-11) =
FXIED: Issue with connecting to OPC Classic Servers in OPC Watch.

= 2.10.0.2 (released 2020-09-09) =
FIXED: Issue with comparing OpcNodeIds using a Byte-Array as node identifier value.

= 2.10.0.1 (released 2020-07-15) =
NEW: Updated description in NuGet.

= 2.10.0.0 (released 2020-07-14) =
NEW: Enhanced OpcCertificateManager.SaveCertificate method to determine format of certificate using the file extension of the specified filePath parameter.
NEW: Introduced OpcValueRange.Of methods to dynamically determine the according OpcValueRange for a specific type of data.
NEW: Added support to encode/decode System.Decimal (not supported by OPC UA) using System.Double. This applies to fields in data structures.
NEW: ProductUri property in OpcClient and OpcServer to simplify the configuration of it.
NEW: Added automatic initialization of ProductUri information in Client and Server applications.
NEW: Introduced use/support of an existing SynchronizationContext to process notifications in the same context a subscription was created from.
NEW: Improved developer expierence in GUI applications (like Windows Forms) regarding correct multi-threading in GUI applications to handle received notifications.
FIXED: Issue linking assembly in C++ CLR projects using C++/CLI which results into C2686.
FIXED: Issue with NullReferenceException using .NET Core 3.1 while receiving event notification data.
FIXED: Issue with not expanded node identifiers in namespace index one (reserved for the core/application namespace).

= 2.9.2.1 (released 2020-05-08) =
FIXED: Issue reading a structured data type which uses an array as a field while OpcClient.UseDynamic is equals true.

= 2.9.2.0 (released 2020-05-06) =
NEW: Added additional constructor overloads to OpcArgument to support the use of OpcDataType, the identifier of a data type and custom array dimensions as well.
NEW: Added support for n-dimensional (= multi-dimensional) arrays of structured data types.
NEW: Added support for n-dimensional variable nodes (this includes new ArrayDimensions property on OpcVariableNode as well).
NEW: Added support of null references as field values for fields using a reference type as the type of value.
NEW: Added support of the ObjectType NodeClass in calls to the add nodes service.
NEW: Added support of the VariableType NodeClass in calls to the add nodes service.
FIXED: Issue with automatic definition of value rank of variable nodes in case of n-dimensional custom structured types.
FIXED: Issues in stack to support n-dimensional custom structured types.
FIXED: Issue loading UANodeSets with extended values for AccessLevel and UserAccessLevel in UAVariable entries (belongs to stack v1.04).
FIXED: Issue with NullReferenceException in OpcDataTypeInfo.BaseType in case of data types defined in a node set using an UATypeDefinitions without any field.
FIXED: Issue with wrong determined value rank in case of System.Byte[], because of its was matched with the ByteString by the foundations stack.

= 2.9.1.0 (released 2020-04-22) =
FIXED: Issue which led to duplicate browsed references between parent/child nodes imported using a nodeset.
FIXED: Issues with newer versions of System.ServiceModel.Primitives. Rolled back dependency to v4.5.3 in all target frameworks.
FIXED: Issues with subsequent evaluation licenses used for bundle licensing (client + server).
FIXED: Issue with wrong determined value rank in case of System.Byte[], because of its was matched with the ByteString by the foundations stack.
FIXED: Issue with result of OpcNamespace.Get(int, Uri) which result into a OpcNamespace.Value which did not express the Uri.OriginalString as defined by the namespaceUri parameter.

= 2.9.0.0 (released 2020-04-01) =
NEW: Unified product licensing which does not longer differ between frameworks.
NEW: All Licenser classes now offer different FailIf... and ThrowIf... methods to verify the used license on-demand by user code. Use FailIf... methods in your DEBUG configurations and use ThrowIf... methods in your RELEASE configurations to protect you from the unlicensed use of the SDK.
NEW: Added new GetNodeType(...) methods to OpcClient (only for event node types).
NEW: Added new GetNodeTypeSystem(...) methods to OpcClient (only for event node types).
NEW: Added new GetNodeType(...) methods to OpcNodeSet.
NEW: Added new GetNodeTypeSystem(...) method to OpcNodeSet.
NEW: Added new GetNodeType(...) methods and GetNodeTypeSystem() method to OpcNodeSet.
NEW: Improved expierence while debugging and inspecting the properties of OpcNodeInfo instances (and its subclasses).
NEW: Browsing supports now to read additional attributes besides the attributes supported by the browse services.
NEW: OpcNodeInfo now implements IOpcNodeInfo to provide a more fluent use of nodes instances independent from their source.
NEW: Additional configurable services in OpcClientServices: Browse and ReadNodes.
NEW: Significantly improved performance when constructing event filters.
NEW: IOpcNodeInfo now defines the additional methods: AttributeValue(...), Child(...) and Children().
NEW: Unlimited browse, read and write operations upon automatic request partitioning (OpcClient).
NEW: OpcClient.CertificateJudgement event to handle certificate issues after a connection has been established and certificate information has been successfully validated first.
NEW: OpcModel representing the model information in node sets.
NEW: OpcMemberSwitch.Conditions property to inform about the condition under which a switch is evaluated.
NEW: Direct support of .NET Core 3.1 as one of our target frameworks.
NEW: Added additional metadata properties (LastModified and Name) to OpcNodeSet.
NEW: Added missing documentation to collection and some other types.
NEW: OpcData.GetNodeId now supports array types as well.
NEW: Support of System.Object and System.Object[] for encoding / decoding data types.
NEW: Support of Serialization / Deserialization attributes defined in System.Runtime.Serialization on data types.
NEW: OpcDataTypeMembersAttribute to filter members which shall be encoded / decoded on data types.
NEW: OpcDictionary<TKey, TValue> as a bare and not by default available data type to transport dictionaries using OPC UA.
NEW: Respecting order of fields as they are declared within their inheritance hierarchy to always define the fields of the base data type first.
NEW: Added new GetDataType(...) methods to OpcClient.
NEW: Added new GetDataType(...) methods to OpcNodeSet.
NEW: IOpcNodeInfo now defines the methods Child(...) and Children() to query the child nodes of a node instance.
NEW: Implemented new OpcNamespaceCollection.
NEW: OpcNodeSet.Namespaces property to provide the namespaces referred to in a node set.
NEW: Static OpcContext.Empty property to define an empty context instance where required and supported.
NEW: Implemented IOpcNamespaceResolver in OpcContext to resolve namespaces of OpcNodeId instances.
NEW: OpcTypeSystem class which acts as the new base class of the existing OpcDataTypeSystem and the new OpcNodeTypeSystem classes.
NEW: OpcDataTypeDictionary.Documentation property.
CHANGED: License codes used prior v2.9 do not longer work. Customers will receive new license keys working in all frameworks supported.
CHANGED: OpcAttributeWriteAccess is now based on UInt32.
CHANGED: The default value of OpcAutomatism.AlwaysParseStringIdentifiers is now false.
CHANGED: Moved OpcBrowseNode class from Opc.UaFx.Client to Opc.UaFx namespace.
CHANGED: Moved OpcBrowseNodeDegree enum from Opc.UaFx.Client to Opc.UaFx namespace.
CHANGED: IOpcBrowseService and OpcBrowseRequest now use the classes OpcViewDescription and OpcBrowseNode instead of foundations ViewDescription and BrowseDescription classes.
CHANGED: Moved OpcReadOnlyNamespaceCollection from namespace Opc.UaFx.Server to namespace Opc.UaFx.
CHANGED: Renamed Description property of IOpcDataTypeInfo, OpcDataTypeInfo and OpcDataFieldInfo to Documentation to match the definition of the OPC UA specification.
CHANGED: OpcEncoding.All(...) now constructs the OpcEncoding.Id using the default browse names for the different encoding types.
CHANGED: OpcNamespace.ToString() now always returns a string which just represents the OpcNamespace.Value + OpcNamespace.Index (if not zero).
CHANGED: OpcNodeSet.GetDataTypeSystem() now provides a OpcDataTypeSystem instance which uses the typical browse name for the type of encoding used by the type system.
CHANGED: Removed method IOpcTypeProvider.GetType(OpcEncoding), because of encoding information only applies to data types.
CHANGED: OpcTypeCategory.EventType and OpcTypeCategory.ReferenceType has been removed.
FIXED: Issues with validating outdated certificates or certificates which violate some policy regarding general valid certificates. Such certificates can now handled by the CertificateValidationFailed event.
FIXED: Issue with the automatic application configuration in case there the entry assemblies AssemblyTitleAttribute is not present or defines a string.Empty as assembly title.
FIXED: Issue with variable node values changing their value using different complex data types (expressed using ExtensionObject as the data type of the node).
FIXED: Wrong encoding mask in case there is more than one optional field declared in a data type.
FIXED: Wrong interpretation in OpcArgument.IsArray and OpcArgumentInfo.IsArray.
FIXED: Issue with DataTypeDictionary nodes which do not define any DataTypeDescription nodes while constructing the DataTypeSystem using OpcClient.GetDataTypeSystem().
FIXED: Issues when decoding structured data using the new Opc.UaFx.Bit.
FIXED: Issue using OpcNodeId.UriIdentifier(...) in case there the OpcNodeId.Value is not of the type System.String.
FIXED: OpcNamespace now preserves the original string used to define the OpcNamespace without any subsequent changes as the value of the OpcNamespace.Value property.

= 2.8.3.1 (released 2020-01-24) =
FIXED: Issue with not longer working subscription-handlers after a long running reconnection attempt succeeded.
FIXED: Issue with disposed socket in diposed TcpMessageSocket used in a request header representing the last request send to the server to which the connection got lost.

= 2.8.3.0 (released 2020-01-16) =
NEW: Support of OpcExceptions in delegates used to define method nodes. This enables the definition of bad results without the need to manually change the result of the method call using the OpcMethodContext-Parameter.
NEW: Added support for additional access levels (StatusWrite and TimestampWrite).
NEW: Added missing documentation to OpcAccessLevel, OpcVariableNode.AccessLevel and OpcVariableNode.UserAccessLevel.
NEW: Added support to disconnect and abort a pending reconnect attempt on OpcClient.
NEW: Changes to improve the experience with UWP applications regarding the use of the native tool chain.
CHANGED: Reviewed OpcClient.State changes in order to detect a lost connection to the server.
CHANGED: OpcClient.State now changes automatically only to Disconnected (during a running request) if ReconnectTimeout is greater than zero (reconnection is manually handled).
FIXED: Issue with not applied status (code) information passed to one of the constructors defined by OpcValue.
FIXED: Issue with TypeDictionaries which do not offer NamespaceUri information.

= 2.8.2.1 (released 2019-12-13) =
FIXED: Issue with parallel subscription publishing while calling a method node in OpcClient.
FIXED: Issue with conditions upon the OpcClientKeepAlive.Interval is not applied to the current session.

= 2.8.2.0 (released 2019-11-06) =
NEW: Introduced new Opc.UaFx.Bit as a .NET-based representation of the foundation-defined "Bit" value type for which no concrete implementation exists so far.
CHANGED: Explictly encoded information known as the "EncodingMask" of a structured data type is now handled using the new Opc.UaFx.Bit type instead of System.Boolean.
FIXED: Issue with mixed-structured data types using leading boolean values followed by additional non-boolean values which sometimes resulted into wrong encoded data streams.
FIXED: Issue connecting to OPC Classic servers using OPC Watch without a custom application certificate.

= 2.8.1.3 (released 2019-10-24) =
FIXED: Issue with exchanging structured data types without using the upcoming metadata-support.

= 2.8.1.2 (released 2019-10-23) =
CHANGED: iconUrl and licenseUrl information in NuGet packages upon their deprecation.
FIXED: Issue with wrong interpretation of Int32 as return type of method nodes.

= 2.8.1.1 (released 2019-10-11) =
NEW: Implemented support for method parameters using "System.Object" which are transported as OPC UA variant values.
FIXED: Issues with disregaded method parameters of the type "System.Object".
FIXED: Issue with reading large file nodes (representing files their content exceeds the MaxByteStringLength).

= 2.8.1.0 (released 2019-09-25) =
NEW: Implemented RegisterNodes and UnregisterNodes methods on the OpcClient that allow to register nodes on the OPC UA server for the current session for possibly faster access.
NEW: Enabled OPC Classic API in .NET Standard target to support the use of the API in .NET Core applications running on Windows.
NEW: Implemented OpcDataObject.HasField(name) and OpcDataObject.TryGetField(name, out field).
NEW: Improved performance by excluding foundation defined data type dictionaries while querying the data type system of the server.
NEW: Introduced new OpcClient.UseDynamic property and changed default value of OpcAutomatism.UseDynamic to the value false to improve the performance while connecting without the need of the knowledge of data types.
NEW: Implemented support for servers which do not support range-based reads to query the data type dictionary.
CHANGED: OpcAutomatism.UseDynamic property default value is now false. Change its value or the OpcClient.UseDynamic to true to enable use of OpcDataObject.
FIXED: Crash caused by an exception in Socket.Shutdown() that was not caught.

= 2.8.0.0 (released 2019-09-18) =
NEW: Introduced a whole set of new classes to support the definition, consumption and reflection of custom data types in client applications.
NEW: Introduced new OpcNodeSet class to provide a file, string or stream based source to offer data type system information from a UANodeSet.
NEW: Implemented new OpcClient.NodeSet property to assign an instance of the OpcNodeSet class which is to be used to query data type system information instead of querying the servers data type system.
NEW: Implemented new OpcClient.GetDataTypeSystem() method which determines the data type system which is used by the client to resolve data type information.
NEW: Introduced new OpcAutomatism.UseDynamicTypeRegistration property to control the automatic type reflection used by client and server applications to determine the different data and event types declared.
NEW: Introduced new OpcAutomatism.UseDynamic property to control the dynamic type resolution while consuming custom typed but not explictly declared data types in client applications.
NEW: Introduced new OpcNodeValue<T> class, OpcAttributeValue<T> and IOpcNodeAttribute with IOpcNodeDescriptor in conjunction with OpcNodeValuePair to declare "node-bound" values.
NEW: Enhanced OpcClient class with new ReadNodeValue and WriteNodeValue methods to read and write "node-bound" values.
NEW: Improved Exception handling to preserve StackTrace information from user code down to foundation and communication layer.
NEW: Implemented new OpcClient.KeepAlive property and the according OpcClientKeepAlive class to control and monitor the keep alive tasks executed against the server connected to.
NEW: Implemented dynamic type conversion in OpcValue.As<T>()
NEW: Added new AsValue<T>() method to OpcValue to provide a generic definition of the value using the new OpcValue<T> class.
NEW: OpcNamespace now provides the namespace string / uri using the new OpcNamespace.Value property.
NEW: Default transport limits increased DefaultMaxByteStringLength from 64 KB to 5 MB and DefaultMaxMessageSize from 1 MB to 10 MB.
NEW: Solved inline handled Exceptions in XmlSerializer during startup.
NEW: Improved Exception handling and tracing during data encoding and decoding (see OpcTypes.EncodingFailed and OpcTypes.DecodingFailed).
NEW: Introduced decoding and encoding related tracing support using the new OpcEncodingStackFrame and OpcEncodingStackTrace classes.
NEW: Added "int ResolveIndex(string namespaceValue)" and "string ResolveValue(int namespaceIndex)" to IOpcNamespaceResolver.
NEW: OpcClient now provides service methods to simplify calls to CallMethod using the new generic methods CallAction and CallFunc.
NEW: Added additional overloads to OpcBrowseNode to support OpcNodeIds to refer to specific types of references.
NEW: OpcNodeInfo now provides additional overloads of Children(...) and Parents(...) accepting a OpcReferenceType value.
NEW: OpcResult now provides with GetBaseResult() the root result.
NEW: OpcEventNode.EventTypeId is now writable using an added setter.
NEW: Introduced OpcEventTypeAttribute to define client-side declared custom event types used to handle event notification data in client applications.
NEW: Corrected wrong used status code while decoding in foundation stack (before: BadEncodingError, now: BadDecodingError).
NEW: Added missing SourceType property to Opc.Ua.Schema.Binary.FieldType.
NEW: Added missing BaseType property to Opc.Ua.Schema.Binary.BaseType.
CHANGED: OpcDataTypeAttribute is now applicable on classes and structures.
CHANGED: Renamed IOpcReadOnlyDataStore to IOpcReadOnlyNodeDataStore.
CHANGED: IOpcNamespaceResolver "Uri Resolve(int namespaceIndex)" and "int Resolve(Uri namespaceUri)" are now obsolete.
FIXED: Wrong used variable when configuring Opc.UaFx.Client.OpcSubscription.LifetimeCount.
FIXED: Issues during serialization of OpcException objects.

= 2.7.5.1 (released 2019-08-15) =
FIXED: Issue with multiple times serialized exception information which causes an SerializationException instead of the exception itself.

= 2.7.5.0 (released 2019-08-13) =
NEW: Improved API documentation: IOpcNode, IOpcNodeInfo and OpcNode.
NEW: Stack change to assure that a node-manager lock is hold as long monitored items are created, modified or deleted.
NEW: Updated to System.ServiceModel.Primitives 4.5.3, because in System.Private.ServiceModel 4.5.x a bug was fixed that the "System.Private.ServiceModel.dll" was not copied for .NET Core applications when publishing for Windows (win-xxx).
CHANGED: OpcMonitoredItem.AutoFlushCache has been replaced with new OpcMonitoredItem.QueueMode property to better express the mechanism used when the notification data item queue of an monitored item overflows.
FIXED: Issues with compiling using .NET Native tool chain.
FIXED: Issues with multiplied subscription notifications and events after reconnecting to the server.
FIXED: Issues with inline parsed OpcNodeId's when creating one using a string identifier.
FIXED: Issue with wrong used base address and security policies in OpcDiscoveryServer.
FIXED: Issue with re-created OpcMonitoredItem instances which additionally resulted into the issue that comparing OpcMonitoredItem instances not longer worked.

= 2.7.4.0 (released 2019-06-07) =
NEW: Domain name resolution used while validating client / server certificates now uses fallback mechanisms in case there is no DNS server configured in the operating system.
NEW: Re-implemented explicit use of OperationTimeout when using HTTPS (which is not longer part in the foundation stack).
FIXED: SocketExceptions on macOS while validating certificate domains using domain name resolution although there is no (available) DNS server configured in the operating system.

= 2.7.3.1 (released 2019-05-23) =
NEW: Added support for target framework .NET 4.6.
FIXED: Issues with connecting to a server using https on macOS and Linux, which results into the OpcException: An unrecognized response was received from the server.

= 2.7.3.0 (released 2019-05-17) =
NEW: Replaced local X509Certificate2 instance activation by using OpcCertificateManager.QueryInstance to load certificate information. This enables custom X509Certificate2 creation using an event handler.
NEW: Introduced new OpcCertificateStores.PathProbings property to enable custom probing mechanism to determine the certificate store paths to use by default.
NEW: Improved user experience regarding different (smaller) issues using subscriptions and monitored items (especially in automatically reconnecting clients).
NEW: Reviewed implementation of OpcMonitoredItem and OpcSubscription: Changed some "int"-based properties to use "long" as the property type to support underlaying "uint" properties used by the foundations stack.
NEW: Introduced additional AddMonitoredItem(...) overloads on OpcSubscription.
FIXED: Issue with connecting to a servers using https, which results into the OpcException: An unrecognized response was received from the server.

= 2.7.2.0 (released 2019-05-10) =
NEW: Support of TypeDefinition information when browsing intance nodes through new OpcInstanceNodeInfo class.
NEW: Added Socket property to the OpcSession class to identify the socket identity information for the used local and remote endpoints.
NEW: Enabled support for IL2CPP in Unity projects. This addresses some Overflow exceptions reported while IL2CPP has been executed.
NEW: Changed product icon of NuGet package.
FIXED: Issues when browsing more than one reference type at once which resultet into an ArgumentOutOfRangeException.
FIXED: Issues with sometimes outdated subscription and monitored item information when the client automatically reconnects to the server after the connection got lost.
FIXED: Issue with sometimes missing Client and Subscription based notification events - e.g. NotificationReceived event has been missed on OpcClient.

= 2.7.1.1 (released 2019-04-29) =
NEW: Update of Package Information (ProjectUrl and LicenseUrl).

= 2.7.1.0 (released 2019-03-25) =
FIXED: Issue with wrong wrapped .NET array types using OpcValue instances.
FIXED: Issue with wrong wrapped UA FX array types using OpcValue instances.

= 2.7.0.0 (released 2019-03-14) =
NEW: Completly reworked AddNode support in OpcClient including a whole new set of OpcAddNode command types like: OpcAddFolderNode, OpcAddObjectNode, OpcAddDataVariableNode, OpcAddAnalogItemNode and some more.
NEW: Completly reworked DeleteNode, AddReference and DeleteReference support in OpcClient including a whole new definition of the OpcDeleteNode, OpcAddReference and OpcDeleteReference command.
NEW: Introduced new OpcAddNodeResult class which provides a specialization of the OpcResult class to provide the used NodeId and the command instance from which the result originates.
NEW: Improved exception details when using the services AddNodes, DeleteNodes, AddReferences and DeleteReferences.
NEW: OpcException always provides Source, StackTrace, Data and HelpLink information were available and not does not longer skip them in case of a different source exception.
NEW: Enabled subclassing of OpcResult using custom types.
FIXED: Issue when writing built in structured values like OpcEngineeringUnitInfo or OpcValueRange using OpcClient.WriteNode.
FIXED: Issue when disconnecting the client which lead to a crash in case there was still at least one connect attemption pending.

= 2.6.0.0 (released 2019-02-20) =
NEW: Implemented OPC Classic support in OpcClient just using an address like "opc.com://<host>(:<port>)/<progId>/<classId>". (only in .NET Framework)
NEW: Implemented new OpcClassicInterface, OpcClassicInterfaces and OpcClassicInterfaceCollection classes and OpcClassicInterfaceCategory enumeration. (only in .NET Framework)
NEW: Implemented new OpcClassicApplicationDescription, OpcClassicApplicationDescriptionCollection, OpcClassicEndpointDescription and OpcClassicEndpointDescriptionCollection classes. (only in .NET Framework)
NEW: Implemented OPC Classic discovery using the new OpcClassicDiscoveryClient class which uses "OpcEnum.exe" (a COM application provided by the OPC Classic runtime environment). (only in .NET Framework)
NEW: Enhanced existing OpcDataChangeFilter to support the configuration of the Trigger, DeadbandType and DeadbandValue. Using the Trigger property it is possible to monitor items using the SourceTimestamp as well.
NEW: Implemented additional OpcClient.SubscribeDataChange overloads and additional OpcDataSubscribeDataChange constructor overloads accepting a value of the OpcDataChangeTrigger enumeration.
NEW: An predefined ApplicationName is now used as the SubjectName of the certificate when (automatically) creating a new certificate used by client applications.
NEW: Implemented generic OpcApplicationInstance class implementing IOpcApplicationInstance.
NEW: OpcClient uses the OpcApplicationInstance class as its base class.
NEW: Implemented generic OpcSecurity class.
NEW: OpcClient derives from OpcApplicationInstance class.
NEW: Centralized application configuration of client application instances using OpcApplicationInstance.
NEW: Implemented generic OpcTransport configuration class and its use in IOpcApplicationInstance.
NEW: Implemented generic OpcSecurity configuration class and its use in IOpcApplicationInstance.
NEW: Added Security and Transport properties to IOpcApplicationInstance.
NEW: Added CertificateValidationFailed event to IOpcApplicationInstance.
CHANGED: Removed OpcClientTransport class (replaced by new OpcTransport class).

= 2.5.7.0 (released 2019-02-06) =
NEW: OpcClient.WriteNode now directly accepts null as the value without the need of a new OpcValue instance.
NEW: API its signature only accepts "nodeId:string" to identify a node now parses inline the specified string value to ensure a more fluent usage of the framework API.
CHANGED: The application certificate is not longer stored in .\CertificateStores\Trusted, now it is stored (by default) in .\CertificateStores\App to improve startup performance when searching for the application certificate.

= 2.5.6.0 (released 2018-10-19) =
NEW: Added enhanced Android linking support when linking SDK+User for additional APIs.
NEW: Enhanced default certificate store directory to first try to use the local directory, then CommonApplicationData and then ApplicationData.
NEW: Additional support of .NET Framework 4.7.1 as the target framework to not longer refer to 12 additional system assemblies caused by .NET Standard references in .NET Framework 4.7.1. See https://github.com/Microsoft/dotnet/blob/master/releases/net471/KnownIssues/514195-Targeting%20.NET%20Framework%204.7.1%20copies%20extra%20files%20to%20your%20bin%20directory.md
FIXED: Issue when checking if a certificate store already contains a certificate. The store always returned true.
FIXED: Solved issues when browsing in Android SDK+User linked environment.

= 2.5.5.0 (released 2018-10-11) =
NEW: Extracted API for exclusive Client development from OPC UA Advanced.
NEW: CertificateRequested event on OpcClient and OpcServerBase to query an alternative certificate in case there a existing application instance certificate could not found or can't be used. This event can also used to determine the reason why a new certificate is required. This additionally enables the possibility to notify / query the user of the client about this need.
NEW: In cases there ".\CertificateStores\" (the default directory for certificates) is not writable the path "$(AppData)\OPC Foundation\CertificateStores\" is instead used as the default directory to maintain certificates.
NEW: Increased default lifetime of a certificate from 12 months (= 1 year) to 600 months (= 50 years).
NEW: Reduced default key size from 2048 to 1024 to support older certificates.
NEW: Less assembly size and less dependencies through reorganization of the internal licensing mechanism for .NET Standard.
NEW: Added documentation for OpcSubscription, OpcMonitoredItem, OpcMonitoredItemEventArgs, OpcMonitoredItemEventHandler and much some regarding subscriptions.
CHANGED: Default MinimumCertificateKeySize from 2048 to 1024 to support lower key sizes used by older certificates.
CHANGED: When changing the application certificate of a client or server instance using the Certificate property the store path type of the application certificate store changes to System. To use the store path type Directory you have to change the store path type manually and have to ensure that certificate can be found in the application certificate store - after changing the Certificate property.
FIXED: Problem when dynamically determining start time of node history to read count-based.
FIXED: Issue with rejected path of certificate application store when manually changing the application certificate.
FIXED: Wrong used start time when reading historical values without explictly specifying a start time.
