From 458cabe6cd0fbdb192dbd17f2d6ab3b8162d1166 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:07:23 +0000 Subject: [PATCH 1/8] fix: wrap extension parser calls in try-catch to ensure correct error pointers When extension parsers throw OpenApiException, the exceptions are now caught in LoadExtension methods across all OpenAPI versions (V2, V3, V3.1, V3.2). This ensures the error pointer correctly includes all path segments (e.g., #/definitions/demo/x-tag instead of #/definitions/x-tag). Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> refactor: make V2 LoadExtension consistent with other versions Moved the return statement for JsonNodeExtension outside the catch block to match the pattern used in V3, V31, and V32 deserializers. Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> style: use raw string literals for JSON test data Changed from verbatim string literals (@"...") to raw string literals ("""...""") for consistency with existing test code. Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> chore: refactors test definition for better coverage Signed-off-by: Vincent Biret chore: removes extraneous version --- .../Reader/V2/OpenApiV2Deserializer.cs | 16 ++-- .../Reader/V3/OpenApiV3Deserializer.cs | 23 ++++-- .../Reader/V31/OpenApiV31Deserializer.cs | 17 ++++- .../TestCustomExtension.cs | 74 +++++++++++++++++++ 4 files changed, 115 insertions(+), 15 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs index c640b310c..80d079b5e 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs @@ -79,12 +79,18 @@ private static IOpenApiExtension LoadExtension(string name, ParseNode node) { if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)) { - return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0); - } - else - { - return new JsonNodeExtension(node.CreateAny()); + try + { + return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0); + } + catch (OpenApiException ex) + { + ex.Pointer = node.Context.GetLocation(); + node.Context.Diagnostic.Errors.Add(new(ex)); + } } + + return new JsonNodeExtension(node.CreateAny()); } private static string? LoadString(ParseNode node) diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs index 0b74cedc5..1a03268d6 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs @@ -130,15 +130,24 @@ public static JsonNodeExtension LoadAny(ParseNode node, OpenApiDocument hostDocu private static IOpenApiExtension LoadExtension(string name, ParseNode node) { - if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser) && parser( - node.CreateAny(), OpenApiSpecVersion.OpenApi3_0) is { } result) + if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)) { - return result; - } - else - { - return new JsonNodeExtension(node.CreateAny()); + try + { + var result = parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_0); + if (result is { }) + { + return result; + } + } + catch (OpenApiException ex) + { + ex.Pointer = node.Context.GetLocation(); + node.Context.Diagnostic.Errors.Add(new(ex)); + } } + + return new JsonNodeExtension(node.CreateAny()); } private static string? LoadString(ParseNode node) diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs index 08f2ec048..3608ad5f7 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs @@ -131,9 +131,20 @@ public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument) private static IOpenApiExtension LoadExtension(string name, ParseNode node) { - return node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser) - ? parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1) - : new JsonNodeExtension(node.CreateAny()); + if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)) + { + try + { + return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1); + } + catch (OpenApiException ex) + { + ex.Pointer = node.Context.GetLocation(); + node.Context.Diagnostic.Errors.Add(new(ex)); + } + } + + return new JsonNodeExtension(node.CreateAny()); } private static string? LoadString(ParseNode node) diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs index 57f55e95e..96de89cf9 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs @@ -44,6 +44,80 @@ public void ParseCustomExtension() Assert.Equal("hey", fooExtension.Bar); Assert.Equal("hi!", fooExtension.Baz); } + + [Fact] + public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer() + { + var json = """ +{ + "swagger": "2.0", + "info": { + "title": "Demo", + "version": "1" + }, + "paths": {}, + "definitions": { + "demo": { + "x-tag": null + } + } +} +"""; + var settings = new OpenApiReaderSettings + { + ExtensionParsers = + { + { "x-tag", (any, version) => throw new OpenApiException("Testing") } + } + }; + + var result = OpenApiDocument.Parse(json, "json", settings); + + Assert.NotNull(result.Diagnostic); + Assert.NotEmpty(result.Diagnostic.Errors); + var error = result.Diagnostic.Errors[0]; + Assert.Equal("Testing", error.Message); + Assert.Equal("#/definitions/demo/x-tag", error.Pointer); + } + + [Theory] + [InlineData("3.0.4")] + [InlineData("3.1.1")] + public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer(string version) + { + var json = $$""" +{ + "openapi": "{{version}}", + "info": { + "title": "Demo", + "version": "1" + }, + "paths": {}, + "components": { + "schemas": { + "demo": { + "x-tag": null + } + } + } +} +"""; + var settings = new OpenApiReaderSettings + { + ExtensionParsers = + { + { "x-tag", (any, version) => throw new OpenApiException("Testing") } + } + }; + + var result = OpenApiDocument.Parse(json, "json", settings); + + Assert.NotNull(result.Diagnostic); + Assert.NotEmpty(result.Diagnostic.Errors); + var error = result.Diagnostic.Errors[0]; + Assert.Equal("Testing", error.Message); + Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer); + } } internal class FooExtension : IOpenApiExtension, IOpenApiElement From aeffc9832f2aac1f1e65c0b6ae0a73fb10560900 Mon Sep 17 00:00:00 2001 From: "release-please-token-provider[bot]" <225477224+release-please-token-provider[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 20:20:29 +0000 Subject: [PATCH 2/8] chore(support/v2): release 2.4.2 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ Directory.Build.props | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index adf5fd769..bd1ba1cb3 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.4.1" + ".": "2.4.2" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 7414944db..b7d9b73f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2.4.2](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.1...v2.4.2) (2025-12-22) + + +### Bug Fixes + +* wrap extension parser calls in try-catch to ensure correct error pointers ([63cf4a3](https://github.com/microsoft/OpenAPI.NET/commit/63cf4a3029fe2d285a6fe2724e30ffcf3bdd2f9f)) +* wrap extension parser calls in try-catch to ensure correct error pointers ([458cabe](https://github.com/microsoft/OpenAPI.NET/commit/458cabe6cd0fbdb192dbd17f2d6ab3b8162d1166)) + ## [2.4.1](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.0...v2.4.1) (2025-12-18) diff --git a/Directory.Build.props b/Directory.Build.props index 2d0fc7255..a64e378aa 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ https://github.com/Microsoft/OpenAPI.NET © Microsoft Corporation. All rights reserved. OpenAPI .NET - 2.4.1 + 2.4.2 From aef319c3093837b8ebb03c77f08f18ac9ad1a85d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 21:25:18 +0000 Subject: [PATCH 3/8] chore(deps): bump dotnet-sdk from 8.0.416 to 8.0.417 Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 8.0.416 to 8.0.417. - [Release notes](https://github.com/dotnet/sdk/releases) - [Commits](https://github.com/dotnet/sdk/compare/v8.0.416...v8.0.417) --- updated-dependencies: - dependency-name: dotnet-sdk dependency-version: 8.0.417 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 3d946171e..4ca757b0e 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "8.0.416" + "version": "8.0.417" } } \ No newline at end of file From b05d54a75207f60e93592b9dc053db3ade5cbf75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 21:25:54 +0000 Subject: [PATCH 4/8] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging.Console from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging.Debug from 10.0.1 to 10.0.2 Bumps System.Text.Json from 10.0.1 to 10.0.2 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- performance/resultsComparer/resultsComparer.csproj | 10 +++++----- .../Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/performance/resultsComparer/resultsComparer.csproj b/performance/resultsComparer/resultsComparer.csproj index aab8f01bb..248caf5fa 100644 --- a/performance/resultsComparer/resultsComparer.csproj +++ b/performance/resultsComparer/resultsComparer.csproj @@ -8,12 +8,12 @@ - - - - + + + + - + diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 458972ef0..2e955f3a6 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From eb07dc202cb6c4a2478f3251ee8c149808997b9f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 14 Jan 2026 10:49:02 -0500 Subject: [PATCH 5/8] chore: aligns STJ package to avoid dependency downgrade --- .../Microsoft.OpenApi.Readers.Tests.csproj | 2 +- test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj index a49f77ebd..95365132f 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj +++ b/test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj @@ -19,7 +19,7 @@ - + diff --git a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj index 6913fdd97..8792e4404 100644 --- a/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj +++ b/test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj @@ -13,7 +13,7 @@ - + From 7610d07bd11a99a4ce1cc31338d180dbd764d952 Mon Sep 17 00:00:00 2001 From: Paul Spangler <7519484+spanglerco@users.noreply.github.com> Date: Thu, 15 Jan 2026 15:33:52 -0600 Subject: [PATCH 6/8] fix: Support custom tag ordering --- .../Models/OpenApiDocument.cs | 15 +++- .../Models/OpenApiDocumentTests.cs | 76 +++++++++++++++++++ 2 files changed, 88 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index 031eadb5d..3f12efef1 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -3,6 +3,9 @@ using System; using System.Collections.Generic; +#if NET +using System.Collections.Immutable; +#endif using System.IO; using System.Linq; using System.Security.Cryptography; @@ -83,9 +86,15 @@ public ISet? Tags { return; } - _tags = value is HashSet tags && tags.Comparer is OpenApiTagComparer ? - tags : - new HashSet(value, OpenApiTagComparer.Instance); + _tags = value switch + { + HashSet tags when tags.Comparer != EqualityComparer.Default => value, + SortedSet => value, +#if NET + ImmutableSortedSet => value, +#endif + _ => new HashSet(value, OpenApiTagComparer.Instance), + }; } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs index 5e3644f1b..8480269d2 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiDocumentTests.cs @@ -3,8 +3,11 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; +using System.Linq; using System.Net.Http; using System.Threading.Tasks; using VerifyXunit; @@ -2126,6 +2129,79 @@ public void DeduplicatesTags() Assert.Contains(document.Tags, t => t.Name == "tag2"); } + [Fact] + public void TagsSupportsCustomComparer() + { + var document = new OpenApiDocument + { + Tags = new HashSet(new CaseInsensitiveOpenApiTagEqualityComparer()), + }; + + Assert.True(document.Tags.Add(new OpenApiTag { Name = "Tag1" })); + Assert.False(document.Tags.Add(new OpenApiTag { Name = "tag1" })); + Assert.True(document.Tags.Add(new OpenApiTag { Name = "tag2" })); + Assert.False(document.Tags.Add(new OpenApiTag { Name = "TAG1" })); + Assert.Equal(2, document.Tags.Count); + } + + private sealed class CaseInsensitiveOpenApiTagEqualityComparer : IEqualityComparer + { + public bool Equals(OpenApiTag x, OpenApiTag y) + { + return string.Equals(x.Name, y.Name, StringComparison.OrdinalIgnoreCase); + } + + public int GetHashCode([DisallowNull] OpenApiTag obj) + { + return obj.Name.GetHashCode(StringComparison.OrdinalIgnoreCase); + } + } + + [Fact] + public void TagsSupportsSortedSets() + { + var document = new OpenApiDocument + { + Tags = new SortedSet(new DescendingOpenApiTagComparer()) + { + new OpenApiTag { Name = "tagB" }, + new OpenApiTag { Name = "tagA" }, + new OpenApiTag { Name = "tagC" }, + } + }; + + var names = document.Tags.Select(t => t.Name); + Assert.Equal(["tagC", "tagB", "tagA"], names); + Assert.IsType>(document.Tags); + } + + private sealed class DescendingOpenApiTagComparer : IComparer + { + public int Compare(OpenApiTag x, OpenApiTag y) + { + return string.Compare(y?.Name, x?.Name, StringComparison.Ordinal); + } + } + + [Fact] + public void TagsSupportsImmutableSortedSets() + { + var document = new OpenApiDocument + { + Tags = ImmutableSortedSet.Create( + new DescendingOpenApiTagComparer(), + [ + new OpenApiTag { Name = "tagB" }, + new OpenApiTag { Name = "tagA" }, + new OpenApiTag { Name = "tagC" }, + ]), + }; + + var names = document.Tags.Select(t => t.Name); + Assert.Equal(["tagC", "tagB", "tagA"], names); + Assert.IsType>(document.Tags); + } + public static TheoryData OpenApiSpecVersions() { var values = new TheoryData(); From 0def7871a31cb81488f55a3e62d11e86865c18d5 Mon Sep 17 00:00:00 2001 From: "release-please-token-provider[bot]" <225477224+release-please-token-provider[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 17:38:14 +0000 Subject: [PATCH 7/8] chore(support/v2): release 2.4.3 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ Directory.Build.props | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index bd1ba1cb3..2b7962cdd 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.4.2" + ".": "2.4.3" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index b7d9b73f6..457ff02e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2.4.3](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.2...v2.4.3) (2026-01-16) + + +### Bug Fixes + +* Support custom tag ordering ([008576c](https://github.com/microsoft/OpenAPI.NET/commit/008576c31f8dcecf59363c9c2f85d691601faa73)) +* Support custom tag ordering ([7610d07](https://github.com/microsoft/OpenAPI.NET/commit/7610d07bd11a99a4ce1cc31338d180dbd764d952)) + ## [2.4.2](https://github.com/microsoft/OpenAPI.NET/compare/v2.4.1...v2.4.2) (2025-12-22) diff --git a/Directory.Build.props b/Directory.Build.props index a64e378aa..7b6a763dc 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ https://github.com/Microsoft/OpenAPI.NET © Microsoft Corporation. All rights reserved. OpenAPI .NET - 2.4.2 + 2.4.3 From 3e44113d0f7e02382a635d22b6df10e03f20e985 Mon Sep 17 00:00:00 2001 From: "release-please-token-provider[bot]" <225477224+release-please-token-provider[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 17:58:17 +0000 Subject: [PATCH 8/8] chore(main): release 3.1.3 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ Directory.Build.props | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 9d7db69f9..534c8ff8b 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "3.1.2" + ".": "3.1.3" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fc036d34..44e6eba95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [3.1.3](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.2...v3.1.3) (2026-01-16) + + +### Bug Fixes + +* Support custom tag ordering ([008576c](https://github.com/microsoft/OpenAPI.NET/commit/008576c31f8dcecf59363c9c2f85d691601faa73)) +* Support custom tag ordering ([7610d07](https://github.com/microsoft/OpenAPI.NET/commit/7610d07bd11a99a4ce1cc31338d180dbd764d952)) + ## [3.1.2](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.1...v3.1.2) (2026-01-06) ### Bug Fixes diff --git a/Directory.Build.props b/Directory.Build.props index c1b6e63d1..b0681cf72 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ https://github.com/Microsoft/OpenAPI.NET © Microsoft Corporation. All rights reserved. OpenAPI .NET - 3.1.2 + 3.1.3