diff --git a/release-notes.md b/release-notes.md
index dd823ccdd6..725d7cf8d7 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -1,3 +1,4 @@
-## Intro:
+## Breaking changes:
-Hotfix: Fixed an incorrect string concatenation and subsequent argument exception when the Id of a contained resource was not set.
+- EvaluationContext.WithResourceOverrides() introduced in 5.10 is refactored to now be an extension method instead of a static construction method. It should now be called on an instance of EvaluationContext, and will mutate and return that instance.
+- We changed the datatype of the Attachment.Url from FhirUrl to FhirUri. The type of this element was changed with the introduction of R4. (FhirUrl doesn't exist in STU3). When we moved Attachment to base, we wrongfully put FhirUrl here, which is the more specific datatype of the two. We have corrected this.
diff --git a/src/Hl7.Fhir.Base/CompatibilitySuppressions.xml b/src/Hl7.Fhir.Base/CompatibilitySuppressions.xml
index cedb839bcb..48190dcf42 100644
--- a/src/Hl7.Fhir.Base/CompatibilitySuppressions.xml
+++ b/src/Hl7.Fhir.Base/CompatibilitySuppressions.xml
@@ -239,13 +239,6 @@
lib/net8.0/Hl7.Fhir.Base.dll
true
-
- CP0002
- M:Hl7.Fhir.FhirPath.FhirEvaluationContext.WithResourceOverrides(Hl7.Fhir.ElementModel.ITypedElement,Hl7.Fhir.ElementModel.ITypedElement)
- lib/net8.0/Hl7.Fhir.Base.dll
- lib/net8.0/Hl7.Fhir.Base.dll
- true
-
CP0002
M:Hl7.Fhir.Introspection.ClassMapping.get_DefinitionPath
@@ -372,20 +365,6 @@
lib/net8.0/Hl7.Fhir.Base.dll
true
-
- CP0002
- M:Hl7.Fhir.Rest.ContentType.BuildContentType(Hl7.Fhir.Rest.ResourceFormat,System.String)
- lib/net8.0/Hl7.Fhir.Base.dll
- lib/net8.0/Hl7.Fhir.Base.dll
- true
-
-
- CP0002
- M:Hl7.Fhir.Rest.ContentType.BuildMediaType(Hl7.Fhir.Rest.ResourceFormat,System.String)
- lib/net8.0/Hl7.Fhir.Base.dll
- lib/net8.0/Hl7.Fhir.Base.dll
- true
-
CP0002
M:Hl7.Fhir.Serialization.BaseFhirJsonPocoSerializer.Serialize(System.Collections.Generic.IReadOnlyDictionary{System.String,System.Object},System.Text.Json.Utf8JsonWriter)
@@ -456,6 +435,13 @@
lib/net8.0/Hl7.Fhir.Base.dll
true
+
+ CP0002
+ M:Hl7.Fhir.Specification.Snapshot.SnapshotGeneratorExtensions.RemoveAllNonInheritableExtensions(Hl7.Fhir.Model.Element)
+ lib/net8.0/Hl7.Fhir.Base.dll
+ lib/net8.0/Hl7.Fhir.Base.dll
+ true
+
CP0002
M:Hl7.Fhir.Utility.AnnotatableExtensions.RemoveAnnotations``1(Hl7.Fhir.Utility.IAnnotatable)
@@ -570,7 +556,7 @@
CP0002
- M:Hl7.FhirPath.EvaluationContext.WithResourceOverrides(Hl7.Fhir.ElementModel.ITypedElement,Hl7.Fhir.ElementModel.ITypedElement)
+ M:Hl7.FhirPath.EvaluationContextExtensions.WithResourceOverrides``1(``0,Hl7.Fhir.ElementModel.ITypedElement,Hl7.Fhir.ElementModel.ITypedElement)
lib/net8.0/Hl7.Fhir.Base.dll
lib/net8.0/Hl7.Fhir.Base.dll
true
diff --git a/src/Hl7.Fhir.Base/Hl7.Fhir.Base.csproj b/src/Hl7.Fhir.Base/Hl7.Fhir.Base.csproj
index 6d29f1ee45..94ca4c6749 100644
--- a/src/Hl7.Fhir.Base/Hl7.Fhir.Base.csproj
+++ b/src/Hl7.Fhir.Base/Hl7.Fhir.Base.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/src/Hl7.Fhir.Base/Model/Generated/Attachment.cs b/src/Hl7.Fhir.Base/Model/Generated/Attachment.cs
index cd90a09215..41c6164ddb 100644
--- a/src/Hl7.Fhir.Base/Model/Generated/Attachment.cs
+++ b/src/Hl7.Fhir.Base/Model/Generated/Attachment.cs
@@ -209,7 +209,7 @@ public string Url
if (value == null)
UrlElement = null;
else
- UrlElement = new Hl7.Fhir.Model.FhirUrl(value);
+ UrlElement = new Hl7.Fhir.Model.FhirUri(value);
OnPropertyChanged("Url");
}
}
diff --git a/src/Hl7.Fhir.Base/Model/ParametersExtensions.cs b/src/Hl7.Fhir.Base/Model/ParametersExtensions.cs
index af139c813d..30b06149c9 100644
--- a/src/Hl7.Fhir.Base/Model/ParametersExtensions.cs
+++ b/src/Hl7.Fhir.Base/Model/ParametersExtensions.cs
@@ -9,6 +9,7 @@ namespace Hl7.Fhir.Model
public static class ParametersExtensions
{
private const string CODEATTRIBUTE = "code";
+ private const string URLATTRIBUTE = "url";
private const string SYSTEMATTRIBUTE = "system";
private const string CONTEXTATTRIBUTE = "context";
@@ -39,12 +40,13 @@ internal static void CheckForValidityOfValidateCodeParams(this Parameters parame
{
parameters.NoDuplicates();
- //If a code is provided, a system or a context must be provided (http://hl7.org/fhir/valueset-operation-validate-code.html)
- if (parameters.Parameter.Any(p => p.Name == CODEATTRIBUTE) && !(parameters.Parameter.Any(p => p.Name == SYSTEMATTRIBUTE) ||
+ //This error was changed from system to url. See: https://chat.fhir.org/#narrow/channel/179202-terminology/topic/Required.20.24validate-code.20parameters/near/482250225
+ //If a code is provided, a url or a context must be provided (http://hl7.org/fhir/valueset-operation-validate-code.html)
+ if (parameters.Parameter.Any(p => p.Name == CODEATTRIBUTE) && !(parameters.Parameter.Any(p => p.Name == URLATTRIBUTE) ||
parameters.Parameter.Any(p => p.Name == CONTEXTATTRIBUTE)))
{
//422 Unproccesable Entity
- throw new FhirOperationException($"If a code is provided, a system or a context must be provided", (HttpStatusCode)422);
+ throw new FhirOperationException($"If a code is provided, a url or a context must be provided", (HttpStatusCode)422);
}
}
}
diff --git a/src/Hl7.Fhir.Base/Specification/Snapshot/SnapshotGeneratorExtensions.cs b/src/Hl7.Fhir.Base/Specification/Snapshot/SnapshotGeneratorExtensions.cs
index 20bdc6b445..4116067f1a 100644
--- a/src/Hl7.Fhir.Base/Specification/Snapshot/SnapshotGeneratorExtensions.cs
+++ b/src/Hl7.Fhir.Base/Specification/Snapshot/SnapshotGeneratorExtensions.cs
@@ -76,7 +76,11 @@ public static void RemoveAllConstrainedByDiffExtensions(this IEnumerable e
}
}
-
+ ///
+ /// This extension removes all non-inheritable extensions from the specified element definition and all it's child objects.
+ /// Non-inheritable extensions are extensions that should not be inherited by derived profiles.
+ ///
+ ///
internal static void RemoveAllNonInheritableExtensions(this Element element)
{
if (element == null) { throw Error.ArgumentNull(nameof(element)); }
diff --git a/src/Hl7.Fhir.Base/Specification/Terminology/ValidateCodeParameters.cs b/src/Hl7.Fhir.Base/Specification/Terminology/ValidateCodeParameters.cs
index ff3d6fadd5..6534a4d727 100644
--- a/src/Hl7.Fhir.Base/Specification/Terminology/ValidateCodeParameters.cs
+++ b/src/Hl7.Fhir.Base/Specification/Terminology/ValidateCodeParameters.cs
@@ -25,6 +25,7 @@ public class ValidateCodeParameters
private readonly string _dateAttribute = "date";
private readonly string _abstractAttribute = "abstract";
private readonly string _displayLanguageAttribute = "displayLanguage";
+ private readonly string _inferSystemAttribute = "inferSystem";
public ValidateCodeParameters(Parameters parameters)
{
@@ -41,6 +42,7 @@ public ValidateCodeParameters(Parameters parameters)
Date = parameters.GetSingleValue(_dateAttribute);
Abstract = parameters.GetSingleValue(_abstractAttribute);
DisplayLanguage = parameters.GetSingleValue(_displayLanguageAttribute);
+ InferSystem = parameters.GetSingleValue(_inferSystemAttribute);
}
@@ -58,7 +60,7 @@ public ValidateCodeParameters WithValueSet(string url, string context = null, Re
return this;
}
- public ValidateCodeParameters WithCode(string code = null, string system = null, string systemVersion = null, string display = null, string displayLanguage = null, string context = null)
+ public ValidateCodeParameters WithCode(string code = null, string system = null, string systemVersion = null, string display = null, string displayLanguage = null, string context = null, bool? inferSystem = null)
{
if (!string.IsNullOrWhiteSpace(code)) Code = new Code(code);
if (!string.IsNullOrWhiteSpace(system)) System = new FhirUri(system);
@@ -66,6 +68,7 @@ public ValidateCodeParameters WithCode(string code = null, string system = null,
if (!string.IsNullOrWhiteSpace(display)) Display = new FhirString(display);
if (!string.IsNullOrWhiteSpace(displayLanguage)) DisplayLanguage = new Code(displayLanguage);
if (!string.IsNullOrWhiteSpace(context)) Context = new FhirUri(context);
+ if (inferSystem is { }) InferSystem = new FhirBoolean(inferSystem);
return this;
}
@@ -151,6 +154,8 @@ public ValidateCodeParameters WithAbstract(bool? @abstract)
///
public Code DisplayLanguage { get; private set; }
+ public FhirBoolean InferSystem { get; private set; }
+
///
///
///
@@ -160,8 +165,8 @@ public Parameters Build()
var result = new Parameters();
if (Url is { }) result.Add(_urlAttribute, Url);
- if (Context is { }) result.Add(_contextAttribute, Context);
if (ValueSet is { }) result.Add(_valueSetAttribute, ValueSet);
+ if (Context is { }) result.Add(_contextAttribute, Context);
if (ValueSetVersion is { }) result.Add(_valueSetVersionAttribute, ValueSetVersion);
if (Code is { }) result.Add(_codeAttribute, Code);
if (System is { }) result.Add(_systemAttribute, System);
@@ -171,8 +176,8 @@ public Parameters Build()
if (CodeableConcept is { }) result.Add(_codeableConceptAttribute, CodeableConcept);
if (Date is { }) result.Add(_dateAttribute, Date);
if (Abstract is { }) result.Add(_abstractAttribute, Abstract);
- if (DisplayLanguage is { }) result.Add(_displayAttribute, DisplayLanguage);
-
+ if (DisplayLanguage is { }) result.Add(_displayLanguageAttribute, DisplayLanguage);
+ if (InferSystem is { }) result.Add(_inferSystemAttribute, InferSystem);
return result;
}
}
diff --git a/src/Hl7.Fhir.Conformance/CompatibilitySuppressions.xml b/src/Hl7.Fhir.Conformance/CompatibilitySuppressions.xml
index 3ba3bba48d..07eadf5988 100644
--- a/src/Hl7.Fhir.Conformance/CompatibilitySuppressions.xml
+++ b/src/Hl7.Fhir.Conformance/CompatibilitySuppressions.xml
@@ -8,13 +8,6 @@
lib/net8.0/Hl7.Fhir.Conformance.dll
true
-
- CP0001
- T:Hl7.Fhir.Specification.Snapshot.SnapshotGeneratorExtensions
- lib/net8.0/Hl7.Fhir.Conformance.dll
- lib/net8.0/Hl7.Fhir.Conformance.dll
- true
-
CP0002
M:Hl7.Fhir.Model.CapabilityStatement.ImplementationComponent.get_DescriptionElement
diff --git a/src/Hl7.Fhir.Conformance/Specification/Snapshot/SnapshotGenerator.cs b/src/Hl7.Fhir.Conformance/Specification/Snapshot/SnapshotGenerator.cs
index 87d34e30b7..abeeccafa8 100644
--- a/src/Hl7.Fhir.Conformance/Specification/Snapshot/SnapshotGenerator.cs
+++ b/src/Hl7.Fhir.Conformance/Specification/Snapshot/SnapshotGenerator.cs
@@ -2224,17 +2224,9 @@ private async Tasks.Task ensureSnapshot(StructureDefinition sd, string pro
try
{
- var shouldGenerate = _settings.RegenerationBehaviour switch
- {
- RegenerationSettings.TRY_USE_EXISTING => !sd.HasSnapshot,
- RegenerationSettings.REGENERATE_ONCE => !sd.HasSnapshot || !sd.Snapshot.IsCreatedBySnapshotGenerator(),
-#pragma warning disable CS0618 // Type or member is obsolete
- RegenerationSettings.FORCE_REGENERATE => true, // possible infinite recursion
-#pragma warning restore CS0618 // Type or member is obsolete
- _ => throw new InvalidOperationException($"Invalid RegenerationSettings value {_settings.RegenerationBehaviour}")
- };
-
- if (_settings.GenerateSnapshotForExternalProfiles && shouldGenerate)
+ if (_settings.GenerateSnapshotForExternalProfiles
+ && (!sd.HasSnapshot || (_settings.ForceRegenerateSnapshots && !sd.Snapshot.IsCreatedBySnapshotGenerator()))
+ )
{
// Automatically expand external profiles on demand
// Debug.Print($"[{nameof(SnapshotGenerator)}.{nameof(ensureSnapshot)}] Recursively generate snapshot for type profile with url: '{sd.Url}' ...");
@@ -2316,18 +2308,9 @@ private async Tasks.Task getSnapshotRootElement(StructureDefi
var cachedRoot = sd.GetSnapshotRootElementAnnotation();
if (cachedRoot != null) { return cachedRoot; }
#endif
- var hasValidRoot = _settings.RegenerationBehaviour switch
- {
- RegenerationSettings.TRY_USE_EXISTING => sd.HasSnapshot,
- RegenerationSettings.REGENERATE_ONCE => sd.HasSnapshot && sd.Snapshot.IsCreatedBySnapshotGenerator(),
-#pragma warning disable CS0618 // Type or member is obsolete
- RegenerationSettings.FORCE_REGENERATE => false,
-#pragma warning restore CS0618 // Type or member is obsolete
- _ => throw new InvalidOperationException($"Invalid RegenerationSettings value {_settings.RegenerationBehaviour}")
- };
-
+
// 2. Return root element definition from existing (pre-generated) snapshot, if it exists
- if (hasValidRoot)
+ if (sd.HasSnapshot && (sd.Snapshot.IsCreatedBySnapshotGenerator() || !_settings.ForceRegenerateSnapshots))
{
// Debug.Print($"[{nameof(SnapshotGenerator)}.{nameof(getSnapshotRootElement)}] {nameof(profileUri)} = '{profileUri}' - use existing root element definition from snapshot: #{sd.Snapshot.Element[0].GetHashCode()}");
// No need to save root ElemDef annotation, as the snapshot has already been fully expanded
diff --git a/src/Hl7.Fhir.STU3/CompatibilitySuppressions.xml b/src/Hl7.Fhir.STU3/CompatibilitySuppressions.xml
index cbfa73ddcf..794249f8ca 100644
--- a/src/Hl7.Fhir.STU3/CompatibilitySuppressions.xml
+++ b/src/Hl7.Fhir.STU3/CompatibilitySuppressions.xml
@@ -22,13 +22,6 @@
lib/net8.0/Hl7.Fhir.STU3.dll
true
-
- CP0001
- T:Hl7.Fhir.Specification.Snapshot.SnapshotGeneratorExtensions
- lib/net8.0/Hl7.Fhir.STU3.dll
- lib/net8.0/Hl7.Fhir.STU3.dll
- true
-
CP0002
F:Hl7.Fhir.Model.ExplanationOfBenefit.ActInvoiceGroupCode.ActInvoiceInterGroupCode
diff --git a/src/Hl7.Fhir.STU3/Specification/Snapshot/SnapshotGenerator.cs b/src/Hl7.Fhir.STU3/Specification/Snapshot/SnapshotGenerator.cs
index 8b2616a871..7b6029aeb4 100644
--- a/src/Hl7.Fhir.STU3/Specification/Snapshot/SnapshotGenerator.cs
+++ b/src/Hl7.Fhir.STU3/Specification/Snapshot/SnapshotGenerator.cs
@@ -1941,17 +1941,9 @@ private async Tasks.Task ensureSnapshot(StructureDefinition sd, string pro
try
{
- var shouldGenerate = _settings.RegenerationBehaviour switch
- {
- RegenerationSettings.TRY_USE_EXISTING => !sd.HasSnapshot,
- RegenerationSettings.REGENERATE_ONCE => !sd.HasSnapshot || !sd.Snapshot.IsCreatedBySnapshotGenerator(),
-#pragma warning disable CS0618 // Type or member is obsolete
- RegenerationSettings.FORCE_REGENERATE => true,
-#pragma warning restore CS0618 // Type or member is obsolete
- _ => throw new InvalidOperationException($"Invalid RegenerationSettings value {_settings.RegenerationBehaviour}")
- };
-
- if (_settings.GenerateSnapshotForExternalProfiles && shouldGenerate)
+ if (_settings.GenerateSnapshotForExternalProfiles
+ && (!sd.HasSnapshot || (_settings.ForceRegenerateSnapshots && !sd.Snapshot.IsCreatedBySnapshotGenerator()))
+ )
{
// Automatically expand external profiles on demand
// Debug.Print($"[{nameof(SnapshotGenerator)}.{nameof(ensureSnapshot)}] Recursively generate snapshot for type profile with url: '{sd.Url}' ...");
@@ -2033,18 +2025,9 @@ private async Tasks.Task getSnapshotRootElement(StructureDefi
var cachedRoot = sd.GetSnapshotRootElementAnnotation();
if (cachedRoot != null) { return cachedRoot; }
#endif
- var hasValidRoot = _settings.RegenerationBehaviour switch
- {
- RegenerationSettings.TRY_USE_EXISTING => sd.HasSnapshot,
- RegenerationSettings.REGENERATE_ONCE => sd.HasSnapshot && sd.Snapshot.IsCreatedBySnapshotGenerator(),
-#pragma warning disable CS0618 // Type or member is obsolete
- RegenerationSettings.FORCE_REGENERATE => false,
-#pragma warning restore CS0618 // Type or member is obsolete
- _ => throw new InvalidOperationException($"Invalid RegenerationSettings value {_settings.RegenerationBehaviour}")
- };
-
+
// 2. Return root element definition from existing (pre-generated) snapshot, if it exists
- if (hasValidRoot)
+ if (sd.HasSnapshot && (sd.Snapshot.IsCreatedBySnapshotGenerator() || !_settings.ForceRegenerateSnapshots))
{
// Debug.Print($"[{nameof(SnapshotGenerator)}.{nameof(getSnapshotRootElement)}] {nameof(profileUri)} = '{profileUri}' - use existing root element definition from snapshot: #{sd.Snapshot.Element[0].GetHashCode()}");
// No need to save root ElemDef annotation, as the snapshot has already been fully expanded
diff --git a/src/Hl7.Fhir.Shims.Base/Specification/Snapshot/SnapshotGeneratorSettings.cs b/src/Hl7.Fhir.Shims.Base/Specification/Snapshot/SnapshotGeneratorSettings.cs
index 09ca863da8..15aa3570b5 100644
--- a/src/Hl7.Fhir.Shims.Base/Specification/Snapshot/SnapshotGeneratorSettings.cs
+++ b/src/Hl7.Fhir.Shims.Base/Specification/Snapshot/SnapshotGeneratorSettings.cs
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) 2017, Firely (info@fire.ly) and contributors
* See the file CONTRIBUTORS for details.
*
@@ -7,7 +7,6 @@
*/
using Hl7.Fhir.Utility;
-using System;
namespace Hl7.Fhir.Specification.Snapshot
{
@@ -35,7 +34,7 @@ public void CopyTo(SnapshotGeneratorSettings other)
{
if (other == null) { throw Error.ArgumentNull(nameof(other)); }
other.GenerateSnapshotForExternalProfiles = GenerateSnapshotForExternalProfiles;
- other.RegenerationBehaviour = RegenerationBehaviour;
+ other.ForceRegenerateSnapshots = ForceRegenerateSnapshots;
other.GenerateExtensionsOnConstraints = GenerateExtensionsOnConstraints;
other.GenerateAnnotationsOnConstraints = GenerateAnnotationsOnConstraints;
other.GenerateElementIds = GenerateElementIds;
@@ -56,18 +55,7 @@ public void CopyTo(SnapshotGeneratorSettings other)
/// Re-generated snapshots are annotated to prevent duplicate re-generation (assuming the provided resource resolver uses caching).
/// If disabled (default), then the snapshot generator relies on existing snapshot components, if they exist.
///
- [Obsolete(
- "This setting does not work as intended. We will maintain the old behaviour for now, and we will consider removing it in a future major release. Use the new RegenerationBehaviour setting instead. See also https://github.com/FirelyTeam/firely-net-sdk/pull/2803")]
- public bool ForceRegenerateSnapshots
- {
- get { return this.RegenerationBehaviour == RegenerationSettings.REGENERATE_ONCE; }
- set { this.RegenerationBehaviour = value ? RegenerationSettings.REGENERATE_ONCE : RegenerationSettings.TRY_USE_EXISTING; }
- } // ForceExpandAll
-
- ///
- /// Setting for the regeneration behaviour of the snapshot generator. see .
- ///
- public RegenerationSettings RegenerationBehaviour { get; set; }
+ public bool ForceRegenerateSnapshots { get; set; } = false; // ForceExpandAll
///
/// Enable this setting to add a custom extension
@@ -96,24 +84,4 @@ public bool ForceRegenerateSnapshots
// See GForge #9791
// public bool MergeTypeProfiles { get; set; }
}
-
- ///
- /// Settings for defining the behaviour of the snapshot generator with respect to regenerating snapshots.
- ///
- public enum RegenerationSettings
- {
- ///
- /// Try to use an existing snapshot, if available.
- ///
- TRY_USE_EXISTING,
- ///
- /// Regenerate the snapshot once, to ensure it is up-to-date.
- ///
- REGENERATE_ONCE,
- ///
- /// Regenerate the snapshot every time. This is useful for debugging and testing purposes.
- ///
- [Obsolete("Watch out when using this setting! it could lead to infinite recursion and is mainly meant for debugging and testing purposes. If you previously had ForceRegenerateSnapshots set to true, consider using REGENERATE_ONCE instead.")]
- FORCE_REGENERATE,
- }
}
diff --git a/src/Hl7.Fhir.Shims.Base/Specification/Source/SnapshotSource.cs b/src/Hl7.Fhir.Shims.Base/Specification/Source/SnapshotSource.cs
index 01b5a880c0..7d8d30ac83 100644
--- a/src/Hl7.Fhir.Shims.Base/Specification/Source/SnapshotSource.cs
+++ b/src/Hl7.Fhir.Shims.Base/Specification/Source/SnapshotSource.cs
@@ -54,9 +54,7 @@ public SnapshotSource(ISyncOrAsyncResourceResolver source, bool regenerate)
private static SnapshotGeneratorSettings createSettings(bool regenerate)
{
var settings = SnapshotGeneratorSettings.CreateDefault();
-#pragma warning disable CS0618 // Type or member is obsolete
settings.ForceRegenerateSnapshots = regenerate;
-#pragma warning restore CS0618 // Type or member is obsolete
return settings;
}
@@ -72,11 +70,11 @@ public SnapshotSource(ISyncOrAsyncResourceResolver source)
#region IResourceResolver
- private IAsyncResourceResolver Resolver => Generator.AsyncResolver;
+ private IAsyncResourceResolver _resolver => Generator.AsyncResolver;
/// Find a resource based on its relative or absolute uri.
/// The source ensures that resolved instances have a snapshot component.
- public async Tasks.Task ResolveByUriAsync(string uri) => await ensureSnapshot(await Resolver.ResolveByUriAsync(uri).ConfigureAwait(false)).ConfigureAwait(false);
+ public async Tasks.Task ResolveByUriAsync(string uri) => await ensureSnapshot(await _resolver.ResolveByUriAsync(uri).ConfigureAwait(false)).ConfigureAwait(false);
///
[Obsolete("SnapshotSource now works best with asynchronous resolvers. Use ResolveByUriAsync() instead.")]
@@ -84,7 +82,7 @@ public SnapshotSource(ISyncOrAsyncResourceResolver source)
/// Find a (conformance) resource based on its canonical uri.
/// The source ensures that resolved instances have a snapshot component.
- public async Tasks.Task ResolveByCanonicalUriAsync(string uri) => await ensureSnapshot(await Resolver.ResolveByCanonicalUriAsync(uri).ConfigureAwait(false)).ConfigureAwait(false);
+ public async Tasks.Task ResolveByCanonicalUriAsync(string uri) => await ensureSnapshot(await _resolver.ResolveByCanonicalUriAsync(uri).ConfigureAwait(false)).ConfigureAwait(false);
///
[Obsolete("SnapshotSource now works best with asynchronous resolvers. Use ResolveByCanonicalUriAsync() instead.")]
@@ -98,17 +96,7 @@ private async Tasks.Task ensureSnapshot(Resource res)
{
if (res is StructureDefinition sd)
{
- var shouldGenerate = Generator.Settings.RegenerationBehaviour switch
- {
- RegenerationSettings.TRY_USE_EXISTING => !sd.HasSnapshot,
- RegenerationSettings.REGENERATE_ONCE => !sd.HasSnapshot || !sd.Snapshot.IsCreatedBySnapshotGenerator(),
-#pragma warning disable CS0618 // Type or member is obsolete
- RegenerationSettings.FORCE_REGENERATE => true,
-#pragma warning restore CS0618 // Type or member is obsolete
- _ => throw Error.NotSupported($"Unknown regeneration behaviour: {Generator.Settings.RegenerationBehaviour}")
- };
-
- if (shouldGenerate)
+ if (!sd.HasSnapshot || Generator.Settings.ForceRegenerateSnapshots || !sd.Snapshot.IsCreatedBySnapshotGenerator())
{
await Generator.UpdateAsync(sd).ConfigureAwait(false);
}
@@ -119,6 +107,6 @@ private async Tasks.Task ensureSnapshot(Resource res)
// Allow derived classes to override
// http://blogs.msdn.com/b/jaredpar/archive/2011/03/18/debuggerdisplay-attribute-best-practices.aspx
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
- internal protected virtual string DebuggerDisplay => $"{GetType().Name} for {Resolver.DebuggerDisplayString()}";
+ internal protected virtual string DebuggerDisplay => $"{GetType().Name} for {_resolver.DebuggerDisplayString()}";
}
}
\ No newline at end of file
diff --git a/src/Hl7.Fhir.Specification.R4.Tests/Hl7.Fhir.Specification.R4.Tests.csproj b/src/Hl7.Fhir.Specification.R4.Tests/Hl7.Fhir.Specification.R4.Tests.csproj
index 441cf6c52e..10af101d76 100644
--- a/src/Hl7.Fhir.Specification.R4.Tests/Hl7.Fhir.Specification.R4.Tests.csproj
+++ b/src/Hl7.Fhir.Specification.R4.Tests/Hl7.Fhir.Specification.R4.Tests.csproj
@@ -18,6 +18,7 @@
+
diff --git a/src/Hl7.Fhir.Specification.R4B.Tests/Hl7.Fhir.Specification.R4B.Tests.csproj b/src/Hl7.Fhir.Specification.R4B.Tests/Hl7.Fhir.Specification.R4B.Tests.csproj
index 15a5560e60..c97f090504 100644
--- a/src/Hl7.Fhir.Specification.R4B.Tests/Hl7.Fhir.Specification.R4B.Tests.csproj
+++ b/src/Hl7.Fhir.Specification.R4B.Tests/Hl7.Fhir.Specification.R4B.Tests.csproj
@@ -18,6 +18,7 @@
+
diff --git a/src/Hl7.Fhir.Specification.R5.Tests/Hl7.Fhir.Specification.R5.Tests.csproj b/src/Hl7.Fhir.Specification.R5.Tests/Hl7.Fhir.Specification.R5.Tests.csproj
index bead6db2d2..936e7fde38 100644
--- a/src/Hl7.Fhir.Specification.R5.Tests/Hl7.Fhir.Specification.R5.Tests.csproj
+++ b/src/Hl7.Fhir.Specification.R5.Tests/Hl7.Fhir.Specification.R5.Tests.csproj
@@ -23,6 +23,7 @@
+
diff --git a/src/Hl7.Fhir.Specification.STU3.Tests/Snapshot/SnapshotGeneratorTest.cs b/src/Hl7.Fhir.Specification.STU3.Tests/Snapshot/SnapshotGeneratorTest.cs
index 13814b8cfd..e85807f1a6 100644
--- a/src/Hl7.Fhir.Specification.STU3.Tests/Snapshot/SnapshotGeneratorTest.cs
+++ b/src/Hl7.Fhir.Specification.STU3.Tests/Snapshot/SnapshotGeneratorTest.cs
@@ -49,7 +49,7 @@ public class SnapshotGeneratorTest2
{
// Throw on unresolved profile references; must include in TestData folder
GenerateSnapshotForExternalProfiles = true,
- RegenerationBehaviour = RegenerationSettings.REGENERATE_ONCE,
+ ForceRegenerateSnapshots = true,
GenerateExtensionsOnConstraints = false,
GenerateAnnotationsOnConstraints = false,
GenerateElementIds = true // STU3
@@ -7979,6 +7979,7 @@ public async Tasks.Task TestConstraintSource()
var element = snapshot.Should().Contain(e => e.Path == "Observation.subject").Subject;
var constraint = element.Constraint.Where(c => c.Key == "ref-1").FirstOrDefault();
constraint.Source.Should().Be("http://hl7.org/fhir/StructureDefinition/Reference");
+
}
diff --git a/src/Hl7.Fhir.Specification.STU3.Tests/StructureDefinitionSummaryProviderTest.cs b/src/Hl7.Fhir.Specification.STU3.Tests/StructureDefinitionSummaryProviderTest.cs
index 8a058d5c35..f955d919f3 100644
--- a/src/Hl7.Fhir.Specification.STU3.Tests/StructureDefinitionSummaryProviderTest.cs
+++ b/src/Hl7.Fhir.Specification.STU3.Tests/StructureDefinitionSummaryProviderTest.cs
@@ -27,6 +27,18 @@ public void PocoAndSdSummaryProvidersShouldBeEqual()
AssertEqual(pocoSummary, sdSummary);
}
+
+ foreach (var item in ModelInfo.OpenTypes)
+ {
+ if (item == typeof(Canonical) //New datatype in R4, so this will fail for STU3
+ || item == typeof(FhirUrl)) //New datatype in R4, so this will fail for STU3
+ continue;
+ var canonicalResource = ModelInfo.CanonicalUriForFhirCoreType(item);
+ var pocoSummary = pocoSdProvider.Provide(canonicalResource);
+ var sdSummary = sdProvide.Provide(canonicalResource);
+
+ AssertEqual(pocoSummary, sdSummary);
+ }
}
@@ -52,7 +64,9 @@ private static void areEqual(IStructureDefinitionSummary left, IStructureDefinit
context = string.Join('.', workStack.Reverse());
try
{
- left.IsAbstract.Should().Be(right.IsAbstract, context + ": Abstract differs");
+ if (context != "DataRequirement.codeFilter.Element" && context != "DataRequirement.dateFilter.Element" && context != "Timing.repeat.Element") // Issue in the STU3 StructureDefinition for DataRequirement.codeFilter, DataRequirement.dateFilter, and Timing.repeat where the type is set to "Element" but not to "BackboneElement".
+ left.IsAbstract.Should().Be(right.IsAbstract, context + ": Abstract differs");
+
left.IsResource.Should().Be(right.IsResource, context + ": IsResource differs");
left.TypeName.Should().Be(right.TypeName, context + ": TypeName differs");
areEqual(left.GetElements(), right.GetElements(), workStack);
@@ -125,7 +139,10 @@ private static void areEqual(IElementDefinitionSummary left, IElementDefinitionS
left.IsChoiceElement.Should().Be(right.IsChoiceElement, context + ": IsChoiceElement differs");
left.IsCollection.Should().Be(right.IsCollection, context + ": IsCollection differs");
- if (context != "Binary.content") //because of issue #2821
+ if (context != "Binary.content" //because of issue #2821
+ && context != "Signature.type" //This was required in STU3, but not in R4+, so kept it optional when moving to base.
+ && context != "Signature.when" //This was required in STU3, but not in R4+, so kept it optional when moving to base.
+ && !context.StartsWith("Signature.who")) //This was required in STU3, but not in R4+, so kept it optional when moving to base.
left.IsRequired.Should().Be(right.IsRequired, context + ": IsRequired differs");
left.IsResource.Should().Be(right.IsResource, context + ": IsResource differs");
@@ -154,6 +171,10 @@ private static void areEqual(ITypeSerializationInfo[] left, ITypeSerializationIn
if (context == "Parameters.parameter.BackboneElement.value" || context == "Parameters.parameter.BackboneElement.part.BackboneElement.value")
return;
+ // This is an exception because from R4+ UsageContext.value doesn't have choice type of Reference anymore, but we still have it in Base to accomodate STU3 users.
+ if (context == "UsageContext.value")
+ return;
+
left.Length.Should().Be(right.Length, context + ": nr. of elements differs.");
foreach (var leftItem in left)
{
diff --git a/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorManifestTests.cs b/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorManifestTests.cs
index 1b1a5b46a5..25dc62195c 100644
--- a/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorManifestTests.cs
+++ b/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorManifestTests.cs
@@ -83,7 +83,7 @@ public class SnapshotGeneratorManifestTests
static readonly SnapshotGeneratorSettings _snapGenSettings = new SnapshotGeneratorSettings()
{
- RegenerationBehaviour = RegenerationSettings.REGENERATE_ONCE,
+ ForceRegenerateSnapshots = true,
GenerateSnapshotForExternalProfiles = true
};
diff --git a/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorTest.cs b/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorTest.cs
index fa5a0ae5f9..5dd81d8af5 100644
--- a/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorTest.cs
+++ b/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotGeneratorTest.cs
@@ -58,7 +58,7 @@ public partial class SnapshotGeneratorTest2
{
// Throw on unresolved profile references; must include in TestData folder
GenerateSnapshotForExternalProfiles = true,
- RegenerationBehaviour = RegenerationSettings.REGENERATE_ONCE,
+ ForceRegenerateSnapshots = true,
GenerateExtensionsOnConstraints = false,
GenerateAnnotationsOnConstraints = false,
GenerateElementIds = true // STU3
diff --git a/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotSourceTest.cs b/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotSourceTest.cs
index 0079317192..1d5646344f 100644
--- a/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotSourceTest.cs
+++ b/src/Hl7.Fhir.Specification.Shared.Tests/Snapshot/SnapshotSourceTest.cs
@@ -14,11 +14,11 @@ public class SnapshotSourceTest
[TestMethod]
public async Tasks.Task TestElementSnapshot()
{
- var zipSource = ZipSource.CreateValidationSource();
- var cachedSource = new CachedResolver(zipSource);
- var snapSource = new SnapshotSource(cachedSource, new SnapshotGeneratorSettings{RegenerationBehaviour = RegenerationSettings.REGENERATE_ONCE});
// Request core Element snapshot; verify recursion handling
+ var orgSource = ZipSource.CreateValidationSource();
+ var cachedSource = new CachedResolver(orgSource);
+
// Assumption: source provides Element structure
var sdCached = await cachedSource.FindStructureDefinitionForCoreTypeAsync(FHIRAllTypes.Element);
Assert.IsNotNull(sdCached);
@@ -28,9 +28,11 @@ public async Tasks.Task TestElementSnapshot()
// Generate snapshot by calling SnapshotSource
// Important! Specify flag to force re-generation (don't trust existing core snapshots...)
+ var snapSource = new SnapshotSource(cachedSource, true);
+
var sd = await snapSource.FindStructureDefinitionForCoreTypeAsync(FHIRAllTypes.Element);
Assert.IsNotNull(sd);
- Assert.AreEqual(sdCached, sd); // Expecting same (cached) object reference, with updated Snapshot component
+ Assert.AreEqual(sdCached, sd); // Expecting same (cached) object reference, with updated Snapshot component
Assert.IsTrue(sd.HasSnapshot);
Assert.IsTrue(sd.Snapshot.IsCreatedBySnapshotGenerator());
@@ -73,8 +75,7 @@ void assert_ele1(ElementDefinition eld)
// STU3: Element.id has type code "string"
// R4: Element.id has no type code, only special "compiler magic" extensions
// => Element.id no longer inherits constraints from "Element", e.g. "ele-1"
- if (elem.Type?.FirstOrDefault()?.Code is string typeName &&
- !typeName.StartsWith("http://hl7.org/fhirpath/System."))
+ if (elem.Type?.FirstOrDefault()?.Code is string typeName && !typeName.StartsWith("http://hl7.org/fhirpath/System."))
{
assert_ele1(elem);
}
@@ -84,54 +85,24 @@ void assert_ele1(ElementDefinition eld)
[TestMethod]
public void CannotCreateSnapshotGeneratorFromSnapshotSource()
{
- var zipSource = ZipSource.CreateValidationSource();
- var cachedSource = new CachedResolver(zipSource);
- var snapSource = new SnapshotSource(cachedSource, regenerate:true);
+ var orgSource = ZipSource.CreateValidationSource();
+ var cachedSource = new CachedResolver(orgSource);
+ var src = new SnapshotSource(cachedSource);
// Verify that SnapshotGenerator ctor rejects SnapshotSource arguments
- Assert.ThrowsException(() => new SnapshotGenerator(snapSource));
+ Assert.ThrowsException(() => new SnapshotGenerator(src));
}
[TestMethod]
public void CannotCreateNestedSnapshotSource()
{
- var zipSource = ZipSource.CreateValidationSource();
- var cachedSource = new CachedResolver(zipSource);
- var snapSource = new SnapshotSource(cachedSource, regenerate:true);
+ var orgSource = ZipSource.CreateValidationSource();
+ var cachedSource = new CachedResolver(orgSource);
+ var src = new SnapshotSource(cachedSource);
// Verify that SnapshotSource ctor rejects SnapshotSource arguments
- Assert.ThrowsException(() => new SnapshotSource(snapSource));
+ Assert.ThrowsException(() => new SnapshotSource(src));
}
- [TestMethod]
- public async Tasks.Task Generate_ForceRegenerate_DoesNotReuse_SnapshotCreatedByOthers()
- {
- var zipSource = ZipSource.CreateValidationSource();
- var cachedSource = new CachedResolver(zipSource);
- var snapSource = new SnapshotSource(cachedSource, regenerate:true);
-
- var original = await cachedSource.FindStructureDefinitionForCoreTypeAsync(FHIRAllTypes.Element);
- Assert.IsTrue(original.HasSnapshot);
- var originalSnapshot = original.Snapshot;
- var regenerated =
- await snapSource.FindStructureDefinitionForCoreTypeAsync(FHIRAllTypes.Element);
- Assert.IsTrue(regenerated.HasSnapshot);
- Assert.AreNotSame(originalSnapshot, regenerated.Snapshot);
- }
-
- [TestMethod]
- public async Tasks.Task Generate_ForceRegenerate_Reuses_SelfCreatedSnapshot()
- {
- var zipSource = ZipSource.CreateValidationSource();
- var cachedSource = new CachedResolver(zipSource);
- var snapSource = new SnapshotSource(cachedSource, new SnapshotGeneratorSettings{RegenerationBehaviour = RegenerationSettings.REGENERATE_ONCE});
-
- var first =
- await snapSource.FindStructureDefinitionForCoreTypeAsync(FHIRAllTypes.Element);
- var firstSnapshot = first.Snapshot;
- var second =
- await snapSource.FindStructureDefinitionForCoreTypeAsync(FHIRAllTypes.Element);
- Assert.AreSame(firstSnapshot, second.Snapshot);
- }
}
}
\ No newline at end of file
diff --git a/src/Hl7.Fhir.Specification.Shared.Tests/Source/TerminologyTests.cs b/src/Hl7.Fhir.Specification.Shared.Tests/Source/TerminologyTests.cs
index f6d41e5958..327ceefc19 100644
--- a/src/Hl7.Fhir.Specification.Shared.Tests/Source/TerminologyTests.cs
+++ b/src/Hl7.Fhir.Specification.Shared.Tests/Source/TerminologyTests.cs
@@ -757,6 +757,52 @@ void expandAction(string url)
}
}
+ [Fact]
+ public void TestValidateCodeParametersCode()
+ {
+ var parameters = new ValidateCodeParameters()
+ .WithCode("bar", "http://foo.com", "1.0.4", "barDisplay", "nl-NL", "Patient.gender", true);
+
+ parameters.Code.Value.Should().Be("bar");
+ parameters.System.Value.Should().Be("http://foo.com");
+ parameters.SystemVersion.Value.Should().Be("1.0.4");
+ parameters.DisplayLanguage.Value.Should().Be("nl-NL");
+ parameters.Display.Value.Should().Be("barDisplay");
+ parameters.Context.Value.Should().Be("Patient.gender");
+ parameters.InferSystem.Value.Should().Be(true);
+
+ var paramResource = parameters.Build();
+
+ paramResource.Parameter.Should().HaveCount(7);
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "code" && ((Code)p.Value).Value == "bar");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "system" && ((FhirUri)p.Value).Value == "http://foo.com");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "systemVersion" && ((FhirString)p.Value).Value == "1.0.4");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "display" && ((FhirString)p.Value).Value == "barDisplay");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "displayLanguage" && ((Code)p.Value).Value == "nl-NL");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "context" && ((FhirUri)p.Value).Value == "Patient.gender");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "inferSystem" && ((FhirBoolean)p.Value).Value == true);
+ }
+
+ [Fact]
+ public void TestValidateCodeParametersValueSet()
+ {
+ var parameters = new ValidateCodeParameters()
+ .WithValueSet("http://foo.bar", "Patient.gender", new ValueSet(), "1.0.4");
+
+ parameters.Url.Value.Should().Be("http://foo.bar");
+ parameters.Context.Value.Should().Be("Patient.gender");
+ parameters.ValueSet.Should().NotBeNull();
+ parameters.ValueSetVersion.Value.Should().Be("1.0.4");
+
+ var paramResource = parameters.Build();
+
+ paramResource.Parameter.Should().HaveCount(4);
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "url" && ((FhirUri)p.Value).Value == "http://foo.bar");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "context" && ((FhirUri)p.Value).Value == "Patient.gender");
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "valueSet" && ((ValueSet)p.Resource) != null);
+ paramResource.Parameter.Should().ContainSingle(p => p.Name == "valueSetVersion" && ((FhirString)p.Value).Value == "1.0.4");
+ }
+
#region helper functions
private static Tasks.Task validateCodedValue(ITerminologyService service, string url = null, string context = null, string code = null,
diff --git a/src/Hl7.Fhir.Support.Tests/Hl7.Fhir.Support.Tests.csproj b/src/Hl7.Fhir.Support.Tests/Hl7.Fhir.Support.Tests.csproj
index 02d5df44cc..2ad432048c 100644
--- a/src/Hl7.Fhir.Support.Tests/Hl7.Fhir.Support.Tests.csproj
+++ b/src/Hl7.Fhir.Support.Tests/Hl7.Fhir.Support.Tests.csproj
@@ -10,6 +10,7 @@
+
diff --git a/src/Hl7.Fhir.Support.Tests/Specification/LanguageTerminologyServiceTests.cs b/src/Hl7.Fhir.Support.Tests/Specification/LanguageTerminologyServiceTests.cs
index 281efa1bdc..d13f3f52b7 100644
--- a/src/Hl7.Fhir.Support.Tests/Specification/LanguageTerminologyServiceTests.cs
+++ b/src/Hl7.Fhir.Support.Tests/Specification/LanguageTerminologyServiceTests.cs
@@ -62,7 +62,7 @@ public async Task LanguageValidationTest()
.Build();
validateCode = async () => await _service.ValueSetValidateCode(parameters);
- await validateCode.Should().ThrowAsync().WithMessage("If a code is provided, a system or a context must be provided");
+ await validateCode.Should().ThrowAsync().WithMessage("If a code is provided, a url or a context must be provided");
parameters = new ValidateCodeParameters()
.WithValueSet(LANGUAGE_VS)
diff --git a/src/Hl7.Fhir.Support.Tests/Specification/MimeTypeTerminologyServiceTests.cs b/src/Hl7.Fhir.Support.Tests/Specification/MimeTypeTerminologyServiceTests.cs
index de74116530..af04c8bb9a 100644
--- a/src/Hl7.Fhir.Support.Tests/Specification/MimeTypeTerminologyServiceTests.cs
+++ b/src/Hl7.Fhir.Support.Tests/Specification/MimeTypeTerminologyServiceTests.cs
@@ -54,7 +54,7 @@ public async Task MimeTypeValidationTest()
.Build();
validateCode = async () => await _service.ValueSetValidateCode(parameters);
- await validateCode.Should().ThrowAsync().WithMessage("If a code is provided, a system or a context must be provided");
+ await validateCode.Should().ThrowAsync().WithMessage("If a code is provided, a url or a context must be provided");
parameters = new ValidateCodeParameters()
.WithValueSet(MIMETYPEVS)
diff --git a/src/Hl7.FhirPath.R4.Tests/Hl7.FhirPath.R4.Tests.csproj b/src/Hl7.FhirPath.R4.Tests/Hl7.FhirPath.R4.Tests.csproj
index 0669f24c7d..8481eb7517 100644
--- a/src/Hl7.FhirPath.R4.Tests/Hl7.FhirPath.R4.Tests.csproj
+++ b/src/Hl7.FhirPath.R4.Tests/Hl7.FhirPath.R4.Tests.csproj
@@ -23,6 +23,7 @@
+
\ No newline at end of file
diff --git a/src/Hl7.FhirPath.R4.Tests/PocoTests/FhirPathTest.cs b/src/Hl7.FhirPath.R4.Tests/PocoTests/FhirPathTest.cs
index 6827cd0f39..2bac05306d 100644
--- a/src/Hl7.FhirPath.R4.Tests/PocoTests/FhirPathTest.cs
+++ b/src/Hl7.FhirPath.R4.Tests/PocoTests/FhirPathTest.cs
@@ -22,7 +22,9 @@
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading.Tasks.Dataflow;
+using Vonk.FhirPath.R4.Tests;
using P = Hl7.Fhir.ElementModel.Types;
+using ScopedNode = Hl7.Fhir.ElementModel.ScopedNode;
namespace Hl7.Fhir.FhirPath.R4.Tests
{
diff --git a/src/Hl7.FhirPath.Tests/HL7.FhirPath.Tests.csproj b/src/Hl7.FhirPath.Tests/HL7.FhirPath.Tests.csproj
index 467b97eebb..2c0d93b49f 100644
--- a/src/Hl7.FhirPath.Tests/HL7.FhirPath.Tests.csproj
+++ b/src/Hl7.FhirPath.Tests/HL7.FhirPath.Tests.csproj
@@ -11,6 +11,7 @@
+
diff --git a/src/firely-net-sdk-tests.props b/src/firely-net-sdk-tests.props
index 744772f8e8..da69005e57 100644
--- a/src/firely-net-sdk-tests.props
+++ b/src/firely-net-sdk-tests.props
@@ -20,16 +20,17 @@
-
-
-
-
+
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/src/firely-net-sdk.props b/src/firely-net-sdk.props
index c69da04df1..ae9158b7a7 100644
--- a/src/firely-net-sdk.props
+++ b/src/firely-net-sdk.props
@@ -44,7 +44,7 @@
Debug;Release;FullDebug
true
- 5.10.3
+ 5.11.1