Skip to main content
net10.0.NETFramework4.8net8.0net9.0

OPC UA Complex Types Client Class Library

Published
Oct 7, 2026
12d ago
Total Downloads
1.2M
1,184,340

Install

dotnet add package OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes --version 2.0.0
ProductVersions
.NET
net10.0net8.0net9.0
Other
.NETFramework4.8

README

OPC UA .NET Standard β€” Client.ComplexTypes (legacy reflection-emit loader)

OPCFoundation.NetStandard.Opc.Ua.Client.ComplexTypes is the legacy reflection-emit complex-type and data-type loader. It walks a server's DataTypeSystem, fetches the missing DataType definitions, generates runtime types using System.Reflection.Emit, and registers them with the IServiceMessageContext so the encoders / decoders can round-trip server-defined Structures, Optionals, Unions, and Enumerations.

When to use this package

Most consumers do not need this package. The OPCFoundation.NetStandard.Opc.Ua.Client package ships a NativeAOT-friendly complex-type loader that does not require System.Reflection.Emit β€” it builds the runtime StructureDefinition / EnumDefinition graphs directly. Prefer that path for any new application, and especially for trimmed / NativeAOT deployments where reflection-emit is unavailable.

Reference Opc.Ua.Client.ComplexTypes only when:

  • You have a 1.5.378-era codebase that relied on the ComplexTypeSystem reflection-emit API and you are not ready to migrate, or
  • You explicitly need to reflect over the runtime-generated CLR types (e.g. you bind them into a UI grid, serialize them through a third-party reflection-based serializer, or use them with System.Linq.Expressions).

For straight-through encode / decode of server-defined complex types no consumer-side reflection is required β€” use Opc.Ua.Client.

Getting started

using Opc.Ua.Client;
using Opc.Ua.Client.ComplexTypes;

var loader = new ComplexTypeSystem(session);
await loader.LoadAsync();
// session.MessageContext.Factory now resolves the server's custom types
// as reflection-emit-generated CLR types.

Target frameworks

net48, net8.0, net9.0, net10.0. The package is not NativeAOT-compatible because the runtime type emission depends on System.Reflection.Emit.

Additional documentation

See the main repository README and the Complex Types guide for the full design (legacy reflection-emit loader vs. the NativeAOT-friendly loader in Opc.Ua.Client).

Changes from Previous Version

v2.0.0-preview.6v2.0.0
Removed Frameworks
.NETFramework4.7.2.NETStandard2.1
Deprecation Removed
Deprecation notice was removed in this version.

Adoption Assessment

A verified publisher signal is available. Assess fit from the package's supported frameworks, license and dependency graph rather than popularity alone.

No SPDX license expression is published. Review the license text and your organisation's policy before redistribution.Compatibility metadata lists 4 target frameworks; confirm the exact target used by your application.The published metadata declares 89 direct dependency entries across framework groups. Inspect the resolved dependency graph for your target framework.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.