What's New in the OSS ASN.1 Tools for C#
Applies to: ASN.1/C# v5.3
What's New in ASN.1/C# 5.3
New Features
Support for nullable reference types
The new -nullableReferenceTypes compiler option instructs the ASN.1/C# compiler to generate a
nullable aware context with nullable reference types for the following
schema fields:
- Fields that have ASN.1 reference types marked as OPTIONAL or DEFAULT within
a SET, SEQUENCE, or CLASS type
- Fields that appear after the extension marker ("...") in a SET or SEQUENCE
type
- Alternatives in a CHOICE type
Previously, only C# nullable value types were supported for the following
ASN.1 simple types: BOOLEAN, INTEGER, NULL, ENUMERATED, and REAL.
When the -nullableReferenceTypes option is specified, each generated C# file
includes a "#nullable enable annotations" directive. Variables with nullable
reference types are generated with the "?" nullable modifier. A C# compiler
that supports C# language version 8.0 or later (available in Visual Studio
2019 or later) must be used during compilation.
Support for custom Size and ValueRange attributes
The new -genSizeValueRangeAttributes compiler option instructs the ASN.1 compiler to generate custom SizeAttribute and
ValueRangeAttribute attributes from the Oss.Asn1 namespace. The attributes
include the effective minimum and maximum values of permitted counts,
lengths, and integer values that are computed based on the subtype
constraints present in the input ASN.1 schema.
SizeAttribute and ValueRangeAttribute are attached to C# properties, which
represent fields associated with ASN.1 types that have size or value range
constraints. Subtype constraints applied to elements of SEQUENCE OF and SET
OF types are mapped to attributes attached to the corresponding parent
collection class.
Attributes can be retrieved by an application using C# Reflection at runtime.
SizeAttribute is generated for the following types with size constraints:
- SEQUENCE OF
- SET OF
- restricted character strings
- BIT STRING
- OCTET STRING
SizeAttribute stores the effective minimum value in the Min property and the
effective maximum value in the Max property. The properties have a C#
"int" type with values between 0 and INT_MAX (2147483647). An additional
IsExtensible property returns true if the corresponding size constraint is
extensible, for example, (SIZE(1..2, ...)).
ValueRangeAttribute is generated for INTEGER types with value range
constraints that are not marked with the HUGE directive. The attribute
stores the effective minimum value in the Min property and the effective
maximum value in the Max property. The Min and Max properties have a C#
"object" type. An additional OperandType property can be used to determine
the actual C# integer type, which can be either an "int", "long", or "ulong"
type. The IsExtensible property returns true if the corresponding value
range constraint is extensible.
Improvements
The following changes have been made to the ASN.1 compiler:
- ASN.1 values of BIT STRING types with named bit lists and size constraints are now correctly handled when the values are defined
using one or more identifiers from the parent type list. These values can be
present within a DEFAULT syntax, within a single value constraint, or
nested within other values.
The generated values now have the smallest possible length permitted by the
size constraint, which includes the largest bit value from identifiers
specified in the ASN.1 value definition. If the smallest length is greater
than the largest bit value, the value is padded with trailing zero bits
until it reaches the smallest length.
- When the ASN.1/C# compiler handles uninitialized value
components within objects of types with contents constraints, it now generates code that does not cause ToString() to
throw a null reference exception. A <<<NULL>>> placeholder
string is printed instead.
- All reference type fields are now omitted when a
reference type is used in the "COMPONENTS OF Type" notation of a field that
appears after the extension marker within another reference type used in the
"COMPONENTS OF Type" notation after the extension marker, as required by the ASN.1
standard.
The following runtime changes have been made:
- The OER decoder now ignores unknown extensions. The OER runtime correctly
decodes sequences that contain unknown extensions and ignores unrecognized
types.
- The COER/OER encoder now correctly encodes an octet string in a large
structure. Previously, when the encoding object size was greater than the
default buffer chunk size, NullReferenceException was issued.
What's New in ASN.1/C# 5.2
New Features
The following changes have been made to the ASN.1 compiler:
- The -2015 compiler option is now an alias of the new -2021 compiler option.
- The ASN1.Version compiler
directive now accepts "2021" as an argument.
New utility classes
The following utility classes have been implemented:
- The Oss.Asn1.ByteTool utility class, which provides
methods that are used to print the hexadecimal dump of binary data, to convert
binary data that represents Binary-Coded Decimal (BCD) numbers and IP addresses
to standard text notation, and to parse text notation back to binary data.
- The Oss.Asn1.BerTool utility class, which defines
the following methods that can be useful when working with BER encodings:
- int BerTool.ReadBerMessage(Stream, ref byte[]), which facilitates error
recovery when reading concatenated BER messages from a stream.
- Tlv BerTool.ReadTlv(ref ArraySegment<byte>), which implements a pull parser that
parses a BER encoding to TLV objects.
- void BerTool.DumpTlv(ref ArraySegment<byte>, ITlvDump), which implements a TLV dump
that is similar to the dump printed by the osstlv.exe utility.
The osstlv.exe utility is now cross-platform and can be run on the following platforms:
- Windows with .NET Framework 3.0 or later, .NET Core 2.1 or later, or
.NET 5 or later.
- MacOs with .NET Core 2.1 or later or .NET 5 or later.
- Linux with .NET Core 2.1 or later or .NET 5 or later.
This new version of the utility replaces the osstlv.exe native executable that could be run
only on Windows platforms.
- Additional utility methods for the following C# classes
that represent simple ASN.1 types:
- Oss.Asn1.ObjectIdentifier:
- ToString();
- ToString(bool);
- Oss.Asn1.RelativeOid:
- ToString();
- ToString(bool);
- Oss.Asn1.BitString:
- ToString();
- ToHexString();
- Oss.Asn1.BitStringWithCOntentsConstraint:
- Oss.Asn1.OctetStringWithCOntentsConstraint:
New samples
The ASN.1 Standards repository now includes ASN.1 specifications for 3GPP
Release 17, as follows:
- 5g_e1ap_r17 TS 37.483 V17.1.0 (2022-06)
- 5g_f1ap_r17 TS 38.473 V17.1.0 (2022-06)
- 5g_ngap_r17 TS 38.413 V17.1.1 (2022-06)
- 5g_rrc_r17 TS 38.331 V17.1.0 (2022-07)
- 5g_xnap_r17 TS 38.423 V17.1.0 (2022-06)
- lte_lcsap_r17 TS 29.171 V17.0.0 (2022-03)
- lte_lppa_r17 TS 36.455 V17.0.0 (2022-04)
- lte_m2ap_r17 TS 36.443 V17.0.1 (2022-04)
- lte_m3ap_r17 TS 36.444 V17.0.0 (2022-04)
- lte_rrc_cv2x_r17 TS 36.331 V17.1.0 (2022-07)
- lte_rrc_nb_iot_r17 TS 36.331 V17.1.0 (2022-07)
- lte_rrc_r17 TS 36.331 V17.1.0 (2022-07)
- lte_s1ap_nb_iot_r17 TS 36.413 V17.1.0 (2022-06)
- lte_s1ap_r17 TS 36.413 V17.1.0 (2022-06)
- lte_sbcap_r17 TS 29.168 V17.1.0 (2021-12)
- lte_slmap_r17 TS 36.459 V17.0.0 (2022-04)
- lte_x2ap_nb_iot_r17 TS 36.423 V17.1.0 (2022-06)
- lte_x2ap_r17 TS 36.423 V17.1.0 (2022-06)
- lte_xwap_r17 TS 36.463 V17.0.0 (2022-04)
- umts_rrc_r17 TS 25.331 V17.1.0 (2022-07)
What's New in ASN.1/C# 5.1.0.1
Improvements
The following -compat flags have been added:
What's New in ASN.1/C# 5.1
New Features
ASN.1 value notation parsing
The -avn compiler option is now supported. The option instructs the compiler to generate additional C# code that implements parsing of ASN.1 value notation data into C# objects that represent values defined by value notation. For more information about implementation restrictions, see the
Value Parsing section.
NOTE: The ASN.1 value notation parser
generated by the -avn option is a chargeable feature in non-evaluation licenses. Contact Sales to obtain pricing information.
New samples
New samples have been created for release 16 of the LTE and 5G protocols:
- 5g_rrc_r16 TS 38.331 V16.4.1 (2021-03)
- lte_lcsap_r16 TS 29.171 V16.2.0 (2020-12)
- lte_lppa_r16 TS 36.455 V16.1.0 (2020-10)
- lte_m2ap_r16 TS 36.443 V16.1.0 (2021-01)
- lte_m3ap_r16 TS 36.444 V16.0.0 (2020-07)
- lte_rrc_cv2x_r16 TS 36.331 V16.4.0 (2021-03)
- lte_rrc_nb_iot_r16 TS 36.331 V16.4.0 (2021-03)
- lte_rrc_r16 TS 36.331 V16.4.0 (2021-03)
- lte_sbcap_r16 TS 29.168 V16.0.0 (2020-07)
- lte_slmap_r16 TS 36.459 V16.0.0 (2020-07)
- lte_xwap_r16 TS 36.463 V16.0.0 (2020-07)
- umts_rrc_r16 TS 25.331 V16.1.0 (2020-10)
Samples for releases 14, 15, and 16 of the LTE and 5G protocols have been updated to use the most recent versions of the ASN.1 schemas available:
- 5g_e1ap_r15 TS 38.463 V15.8.0 (2020-10)
- 5g_e1ap_r16 TS 38.463 V16.5.0 (2021-04)
- 5g_f1ap_r15 TS 38.473 V15.13.0 (2020-03)
- 5g_f1ap_r16 TS 38.473 V16.4.1 (2021-03)
- 5g_ngap_r15 TS 38.413 V15.11.0 (2021-04)
- 5g_ngap_r16 TS 38.413 V16.5.0 (2021-04)
- 5g_rrc_r15 TS 38.331 V15.13.0 (2021-03)
- 5g_xnap_r15 TS 38.423 V15.11.0 (2021-04)
- 5g_xnap_r16 TS 38.423 V16.5.0 (2021-04)
- lte_lcsap_r15 TS 29.171 V15.5.1 (2021-03)
- lte_rrc_cv2x_r14 TS 36.331 V14.16.0 (2021-01)
- lte_rrc_cv2x_r15 TS 36.331 V15.16.0 (2021-03)
- lte_rrc_nb_iot_r14 TS 36.331 V14.16.0 (2021-01)
- lte_rrc_nb_iot_r15 TS 36.331 V15.16.0 (2021-03)
- lte_rrc_r14 TS 36.331 V14.16.0 (2021-01)
- lte_rrc_r15 TS 36.331 V15.16.0 (2021-03)
- lte_s1ap_nb_iot_r15 TS 36.413 V15.10.0 (2020-10)
- lte_s1ap_nb_iot_r16 TS 36.413 V16.5.0 (2021-04)
- lte_s1ap_r15 TS 36.413 V15.10.0 (2020-10)
- lte_s1ap_r16 TS 36.413 V16.5.0 (2021-04)
- lte_x2ap_nb_iot_r15 TS 36.423 V15.11.0 (2020-10)
- lte_x2ap_nb_iot_r16 TS 36.423 V16.5.0 (2021-04)
- lte_x2ap_r15 TS 36.423 V15.11.0 (2020-10)
- lte_x2ap_r16 TS 36.423 V16.5.0 (2021-04)
The cam_denm sample has been updated to use the most recent version of the ASN.1 schema:
- CAM ETSI EN 302 637-2 V1.4.1 (2019-04)
- DENM ETSI EN 302 637-3 V1.3.1 (2019-04)
- ITS-Container ETSI TS 102 894-2 V1.3.1 (2018-08)
A new sample has been created for the IEEE 1609.2 specification. The sample
demonstrates how to construct, sign, and verify signed Ieee1609Dot2Data
using the .NET System.Security.Cryptography API.
What's New in ASN.1/C# 5.0
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 5.0.
New Features
Support for Partial Decoding
The ASN.1 compiler now supports the new -enablePartialDecode and
-partialDecodeOnly command-line options and the OSS.DataCallback and
OSS.InfoCallback compiler directives. The -enablePartialDecode and
-partialDecodeOnly compiler options instruct the compiler to generate code that
makes the new DecodePartial() method of the Codec object available to you.
The method does not return the decoded PDU value. Instead, it invokes a
user-defined callback method when decoding each field that is marked by the
OSS.DataCallback or OSS.Info Callback compiler directive and optionally
passes the decoded field value to it.
The partial decoding feature enables you to
- Extract data without writing code to access deeply nested fields of
complex PDUs.
- Reduce the memory footprint of applications that contain minimal
information in their PDUs.
The feature is available for the BER, DER, PER, UPER, CPER, CUPER, OER, and
COER encoding rules.
For more information, see the Partial Decoding section.
New samples
Samples for release 16 of the LTE and 5G protocols have been created:
- TS 38.463 (5g_e1ap_r16) V16.0.0 (2020-01)
- TS 38.473 (5g_f1ap_r16) V16.0.0 (2020-01)
- TS 38.413 (5g_ngap_r16) V16.0.0 (2020-01)
- TS 38.423 (5g_xnap_r16) V16.0.0 (2020-01)
- TS 36.413 (lte_s1ap_nb_iot_r16) V16.0.0 (2020-01)
- TS 36.413 (lte_s1ap_r16) V16.0.0 (2020-01)
- TS 36.423 (lte_x2ap_nb_iot_r16) V16.0.0 (2020-01)
- TS 36.423 (lte_x2ap_r16) V16.0.0 (2020-01)
The following new samples have been created for:
- Release 15 of the 5G RRC protocol: TS 38.331 (5G RRC)
V15.7.0 (2019-09).
- Release 15 of the SLmAP LTE protocol: TS 36.459 (LTE SLmAP)
V15.0.0 (2018-01).
The basic/threads sample has been created. The sample demonstrates how to
use the OSS ASN.1/C# API in multi-threaded applications.
Samples for releases 13, 14, and 15 of the LTE and 5G protocols have been
updated to use the most recent versions of the ASN.1 schemas available:
- TS 38.463 (5g_e1ap_r15) V15.5.0 (2019-10)
- TS 38.473 (5g_f1ap_r15) V15.7.0 (2019-10)
- TS 38.413 (5g_ngap_r15) V15.5.0 (2019-10)
- TS 38.423 (5g_xnap_r15) V15.5.0 (2019-10)
- TS 29.171 (lte_lcs_r14) V14.3.0 (2019-09)
- TS 29.171 (lte_lcs_r15) V15.3.0 (2019-09)
- TS 36.455 (lte_lppa_r15) V15.2.1 (2019-01)
- TS 36.331 (lte_rrc_cv2x_r14) V14.12.0 (2019-09)
- TS 36.331 (lte_rrc_cv2x_r15) V15.7.0 (2019-09)
- TS 36.331 (lte_rrc_nb_iot_r13) V13.14.0 (2019-06)
- TS 36.331 (lte_rrc_nb_iot_r14) V14.12.0 (2019-09)
- TS 36.331 (lte_rrc_nb_iot_r15) V15.7.0 (2019-09)
- TS 36.331 (lte_rrc_r13) V13.14.0 (2019-06)
- TS 36.331 (lte_rrc_r14) V14.12.0 (2019-09)
- TS 36.331 (lte_rrc_r15) V15.7.0 (2019-09)
- TS 36.413 (lte_s1ap_nb_iot_r13) V13.8.0 (2018-09)
- TS 36.413 (lte_s1ap_nb_iot_r14) V14.9.0 (2019-07)
- TS 36.413 (lte_s1ap_nb_iot_r15) V15.7.1 (2019-10)
- TS 36.413 (lte_s1ap_r13) V13.8.0 (2018-09)
- TS 36.413 (lte_s1ap_r14) V14.9.0 (2019-07)
- TS 36.413 (lte_s1ap_r15) V15.7.1 (2019-10)
- TS 36.423 (lte_x2ap_nb_iot_r13) V13.8.0 (2019-10)
- TS 36.423 (lte_x2ap_nb_iot_r14) V14.8.0 (2019-10)
- TS 36.423 (lte_x2ap_nb_iot_r15) V15.7.0 (2019-10)
- TS 36.423 (lte_x2ap_r13) V13.8.0 (2019-10)
- TS 36.423 (lte_x2ap_r14) V14.8.0 (2019-10)
- TS 36.423 (lte_x2ap_r15) V15.7.0 (2019-10)
Improvements
- The ASN.1 compiler will now issue an error when the governors of an
information object set or value set used as actual parameters and the actual
parameter of the paramdummy governor included in an instance of a
parameterized type are not compatible.
The new -allow flag, incompatibleGovernorsForObjectValueSets, can be used to
suppress these errors.
- The ASN.1 compiler will now correctly apply the EXTENSIBILITY IMPLIED option
in the module definition. The following inextensible types defined in the
module will now be implicitly extensible:
- All ENUMERATED types.
- SET, SEQUENCE, and CHOICE types whose type definitions match some type
definitions inside other modules that do not have the EXTENSIBILITY IMPLIED
option.
Previously, the EXTENSIBILITY IMPLIED option did not have an effect on the
above types. This could result in an incorrect PER encoding of their
values at runtime.
The new -allow BadExtensibilityImplied option can be used to restore the
previous behavior.
- The ASN.1 compiler will now correctly compare values of a BIT STRING type
with named bits when one of the values is specified as {}.
Previously, the compiler incorrectly compared these values. As a result,
a false constraint violation could be reported or a real violation
could be missed.
- The ASN.1 compiler will now correctly apply ASN1.WorkingSet directives
specified with module names but without definitive module identifiers when
the target module definition includes a definitive module identifier and is
referenced in the IMPORTS statement with the SUCCESSOR syntax.
Previously, when the non-relaxed mode was used, an error about undefined
types was issued and the types from the specified working set were not
included in the generated code.
What's New in ASN.1/C# 4.7
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.7.
New Features
Support for X.680 Amendment 1
The ASN.1 compiler now supports X.680 Amendment 1. The IMPORTS clause allows symbols to be imported from the latest module version, as indicated by the object identifier, and it can now include WITH SUCCESSORS and WITH DESCENDANTS as SelectionOption.
Support for .NET Standard 2.0
The OSS ASN.1 Tools for C# now includes an additional version of the runtime assembly compatible with .NET Standard 2.0. You can use it to target numerous platforms that implement the .NET Standard 2.0 specification (for example, .NET Framework, .NET Core, Xamarin, Mono, UWP, etc.).
Unlike .NET Standard 1.4, the .NET Standard 2.0 version of asn1csrt.dll does not require that the ASN.1 must be compiled with the -noSerializable command-line parameter. It also supports C# classes generated with the -genSchemaInfo compiler option.
Support for the following compiler directives:
- The ASN1.Remove directive, which instructs the ASN.1 compiler to ignore ASN.1 items. Currently, the following restriction applies: when the CANONICAL-XER encoder is used, the ASN1.Remove directive cannot be applied to components with a DEFAULT value (they must be encoded, therefore they cannot be removed).
- The ASN1.DeferDecoding directive. When ASN1.DeferDecoding is specified, the compiler will not automatically decode a particular component within a CHOICE, SEQUENCE, or SET structure when its containing type is marked for decoding.
A special type of absolute reference notation
A special type of absolute reference notation that allows you to access ASN.1 types located within WITH COMPONENTS and WITH COMPONENT (inner subtype) clauses and consists of two dollar signs ($$) followed by an index number indicating a particular WITH COMPONENTS or WITH COMPONENT is now supported. You can now assign user-defined names within CONSTRAINED BY clauses that are present within an inner subtype or a compiler-generated structure.
An alternative form of encoding values
The JSON encoders now support an alternative form of encoding values of BIT STRING or OCTET STRING types with contents constraints if an ENCODED BY is absent. When you select this form, the values are encoded as text (the JSON value represents the contained value) rather than hex string.
New compiler options
The -jer command-line option is now an alias for the -json command-line option.
New samples
The following new samples have been created:
- A sample for the DIN EN 15722 Intelligent transport systems - ESafety -
ECall minimum set of data standard. The sample demonstrates how the
ECallMessage message can be created and serialized to UPER bits using the API
of the generated C# classes.
- A sample for the eUICC Profile Package standard. The sample demonstrates
how the eUICC Profile Package can be constructed and saved to the disk file
using the API of the generated C# classes.
- A sample for the GSMA Remote SIM Provisioning standard. The sample
demonstrates how to invoke the GetBoundProfilePackage function of the ES9+
interface at the SM-DP+ using the API of the generated C# classes.
The following samples have been created for release 15 of the LTE
protocols:
- TS 29.171 (LCSAP) V15.1.0 (2018-09)
- TS 36.455 (LPPA) V15.1.0 (2018-09)
- TS 36.443 (M2AP) V15.0.0 (2018-09)
- TS 36.444 (M3AP) V15.0.0 (2018-09)
- TS 36.331 (RRC CV2X) V15.3.0 (2018-09)
- TS 36.331 (RRC NB IOT) V15.3.0 (2018-09)
- TS 36.331 (RRC) V15.3.0 (2018-09)
- TS 36.413 (S1AP NB IOT) V15.3.0 (2018-09)
- TS 36.413 (S1AP) V15.3.0 (2018-09)
- TS 29.168 (SBCAP) V15.1.0 (2018-09)
- TS 36.423 (X2AP NB IOT) V15.3.0 (2018-09)
- TS 36.423 (X2AP) V15.3.0 (2018-09)
- TS 36.463 (XWAP) V15.0.0 (2018-06)
The following samples for releases 13 and 14 of the LTE protocols have been
updated to use the most recent versions of the ASN.1 schemas available:
- TS 29.171 (LCSAP) V14.2.0 (2017-12)
- TS 36.455 (LPPA) V14.5.0 (2018-09)
- TS 36.443 (M2AP) V14.1.0 (2018-09)
- TS 36.331 (RRC CV2X) V14.8.0 (2018-09)
- TS 36.331 (RRC NB IOT) V13.10.0 (2018-07)
- TS 36.331 (RRC NB IOT) V14.8.0 (2018-09)
- TS 36.331 (RRC) V13.11.0 (2018-09)
- TS 36.331 (RRC) V14.8.0 (2018-09)
- TS 36.413 (S1AP NB IOT) V13.7.0 (2018-06)
- TS 36.413 (S1AP NB IOT) V14.7.0 (2018-09)
- TS 36.413 (S1AP) V13.7.0 (2018-06)
- TS 36.413 (S1AP) V14.7.0 (2018-09)
- TS 29.169 (SBCAP) V14.2.0 (2017-12)
- TS 36.423 (X2AP NB IOT) V14.6.0 (2018-06)
- TS 36.423 (X2AP) V14.6.0 (2018-06)
The following new samples have been created for release 15 of the 5G
protocols:
- TS 38.463 (E1AP) V15.1.0 (2018-09)
- TS 38.473 (F1AP) V15.3.0 (2018-09)
- TS 38.413 (NGAP) V15.1.0 (2018-09)
- TS 38.423 (XnAP) V15.1.0 (2018-09)
A new sample has been created for the BTP protocol (ILP-RFC 0023: Bilateral Transfer protocol). The sample demonstrates how BTP peers communicate using the Prepare, Fulfill, and Reject requests.
Improvements
- The BER decoder no longer issues a false error while skipping an unknown extension in a SEQUENCE or CHOICE type when the unknown extension is encoded using the indefinite-length form.
- The ASN.1 compiler now correctly generates the BER codec for decoding messages when the indefinite-length form is used.
- When the PER encoder removes trailing 0 bits to ensure that the size of the transmitted value of a BIT STRING type with named bits is the smallest size that can carry the value and that it satisfies the size constraint (according to ITU-T X.691 clause 16.3), the value is now correctly encoded.
What's New in ASN.1/C# 4.6
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.6.
New Features
Support for the Canonical Packed Encoding Rules (ALIGNED and UNALIGNED)
The OSS ASN.1 Tools for C# supports the Canonical Packed
Encoding Rules (ALIGNED and UNALIGNED) as specified by ITU-T Recommendation
X.691 (08/2015) | ISO/IEC 8825-2:2015.
New compiler options
The -cper and -cuper compiler options instruct the compiler to enable
support for CPER. For better security, the CPER decoder operates in a strict mode: every
deviation from the X.691 standard requirements is reported.
Support for the CANONICAL-PER encoder and CANONICAL-PER
decoder is enabled when the -cper or -cuper compiler option is specified. A strict
conformance level operation mode has been implemented in the BASIC-PER
decoder.
NOTE: The following ASN.1 types are currently not supported by CPER: SET OF, GeneralString, and GraphicString. The compiler issues a warning when these types are encountered in an ASN.1 schema and the -cper or -cuper compiler option is used. The runtime throws an exception on an attempt to encode or decode a value of these types.
New directive
The compiler now supports the ASN1.RealRepresentation directive.
New samples
New samples for release 14 of LTE protocols have been created and existing
samples for release 12 and 13 have been updated to the most recent versions
of ASN.1 schemas available:
- TS 29.171 (LCSAP) V14.1.0 (2017-06)
- TS 36.455 (LPPA) V14.3.0 (2017-09)
- TS 36.443 (M2AP) V14.0.1 (2017-09)
- TS 36.444 (M3AP) V14.1.0 (2017-06)
- TS 36.331 (RRC NB IOT) V14.4.0 (2017-09)
- TS 36.331 (RRC) V14.4.0 (2017-09)
- TS 36.413 (S1AP NB IOT) V14.4.0 (2017-10)
- TS 36.413 (S1AP) V14.4.0 (2017-10)
- TS 29.169 (SBCAP) V14.1.0 (2017-09)
- TS 36.331 (RRC CV2X) V14.4.0 (2017-09)
- TS 36.423 (X2AP NB IOT) V14.4.0 (2017-09)
- TS 36.423 (X2AP) V14.4.0 (2017-09)
- TS 36.463 (XWAP) V14.2.0 (2017-06)
- TS 32.297 (3GPP CDR)
Improvements
The ASN.1 compiler supports the UPPERCAMELCASED and LOWERCAMELCASED keywords
in the NAME and TEXT JER encoding instructions.
What's New in ASN.1/C# 4.5
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.5.
New Features
Conformance to Draft ITU-T Recommendation X.jsoner
The ASN.1/C# compiler and runtime library support the
JSON Encoding Rules. The existing -json command-line option instructs the compiler to enable support for X.jsoner at runtime.
The JSON codec supports the following encoding instructions:
- JER:ARRAY
- JER:BASE64
- JER:NAME
- JER:OBJECT
- JER:TEXT
- JER:UNWRAPPED
Support for .NET Standard 1.4
The OSS ASN.1 Tools for C# now includes an additional version of the runtime assembly compatible with .NET Standard 1.4. You can use this version of the asn1csrt.dll runtime DLL to develop applications on the following platforms:
To generate C# classes compatible with .NET Standard, specify the -noserializable compiler option.
NOTE: When generating C# classes that will be used with .NET Standard, do not specify the -genschemainfo compiler option. This option generates C# attributes that are not supported by .NET Standard.
New samples
The following new samples for LTE protocols have been added:
What's New in ASN.1/C# 4.4
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.4.
New Features
Support for CXER
The -cxer option has been added to support the Canonical XML Encoding Rules (CXER) in
the ASN.1/C# Tools. This option enables generation of the CXER encoder and the XER decoder
so CXER messages can be encoded and decoded.
New command-line options
What's New in ASN.1/C# 4.3.1
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.3.1.
New Features
The OSS ASN.1 Tools for C# now includes ASN.1 Studio 8.0. For a summary of the improvements in ASN.1 Studio 8.0, see the Enhancements History section.
What's New in ASN.1/C# 4.3
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.3.
New Features
The following new features have been added:
Support for E-XER
For more information about the limitations that apply to the E-XER encoder/decoder, see the Encoder/Decoder Limitations section.
New command-line option
The -exer command-line option enables generation of code for E-XER.
New runtime option
The RecursionLimit decoder option limits the depth of nested recursive calls when the value of a circularly defined type is decoded.
What's New in ASN.1/C# 4.2
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.2.
New Features
The following new features have been added:
Support for new encoding rules
- Distinguished Encoding Rules (DER)
- Canonical Octet Encoding Rules (COER)
- XML Encoding Rules (XER)
New command-line options
Sample Code Generation
The ASN.1 compiler can generate a sample program that shows you how to encode, decode, or print PDU and Value objects for types defined in the schema. To generate a sample program, use the -sampleCode command-line option.
New method
The Copy() method has been added to the PDU classes. The method implements a deep copy of an object.
New runtime options
The JSON encoder now supports the EncodeImpliedValues option which enables encoding of null PDU fields (they imply a default value) in the JSON output.
The ValueNotationFormatter class now supports the PrintImpliedValues which
enables printing of null PDU fields (they imply a default value) in the formatted output.
Improvements
The JSON codec now supports an alternative format so that optional fields can be encoded as <key>:null (for example, "DateOfBirth":null).
Improved UTF8 printing and initialization of UTF8String fields. The ASN.1 compiler now generates human-readable strings (instead of byte arrays) to initialize UTF8String fields.
What's New in ASN.1/C# 4.1
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.1.
New Features
The following new features have been added:
Support for JSON Encoding Rules (JSON)
New command-line options
New representation for SET OF/SEQUENCE OF
The new representation provides a separate class wrapping List<>, which is especially useful when handling nested SET OF/SEQUENCE OF.
Improvements
Improved implementation for comparing SET OF/SEQUENCE OF values. You can now compare nested SET OF/SEQUENCE OF on three or more levels.
To facilitate usage of text-based codecs, for example, JSON or XER, the BaseCodec class was separated into two parts: BinaryCodec and TextCodec. Note that existing applications that reference BaseCodec must be changed to reference BinaryCodec.
The compiler now recognizes reserved C# keywords.
Reserved words specified with the -reservedWords compiler option are now case-sensitive.
What's New in ASN.1/C# 4.0
This section provides a summary of the new and enhanced features in the OSS ASN.1 Tools for C# 4.0.
Improvements
With version 4.0, the OSS ASN.1 Tools for C# has been redesigned with a more user-friendly API and better performance.
Users of the OSS ASN.1/C# Tools version 3 will find the architecture and the development process very familiar. However, the API is not compatible with previous versions (3 and earlier), so your existing application code must be modified to use the new API. However, you can install version 4.0 alongside an older version of the OSS ASN.1 Tools for C#; the two versions will peacefully co-exist.
See the Migration Guide for information about upgrading to version 4 and the Comparison Card to see the differences between versions 3 and 4.