NSwag
NSwag copied to clipboard
'Schema reference path has not been resolved' in path referenced yaml file
When generating C# client code with the NSwag command line toolchain 13.9.2 Netcore31 from
root.yaml:
openapi: 3.0.2
paths:
/test:
$ref: './path.yaml#/paths/test'
path.yaml:
paths:
test:
get:
requestBody:
content:
application/json:
schema:
$ref: './object.yaml#/components/schemas/TestRequest'
responses:
'200':
content:
application/json:
schema:
$ref: './object.yaml#/components/schemas/TestResponse'
object.yaml
components:
schemas:
TestRequest:
type: object
properties:
version:
type: integer
TestResponse:
type: object
properties:
version:
type: integer
I get the following error:
System.InvalidOperationException: The schema reference path './object.yaml#/components/schemas/TestResponse' has not been resolved.
at NJsonSchema.JsonSchema.GetActualSchema(IList`1 checkedSchemas)
at NJsonSchema.JsonSchema.get_ActualSchema()
at NSwag.CodeGeneration.Models.ResponseModelBase..ctor(IOperationModel operationModel, OpenApiOperation operation, String statusCode, OpenApiResponse response, Boolean isPrimarySuccessResponse, JsonSchema exceptionSchema, TypeResolverBase resolver, CodeGeneratorSettingsBase settings, IClientGenerator generator) in C:\projects\nswag\src\NSwag.CodeGeneration\Models\ResponseModelBase.cs:line 52
at NSwag.CodeGeneration.CSharp.Models.CSharpResponseModel..ctor(IOperationModel operationModel, OpenApiOperation operation, String statusCode, OpenApiResponse response, Boolean isPrimarySuccessResponse, JsonSchema exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, CodeGeneratorSettingsBase settings) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\Models\CSharpResponseModel.cs:line 32
at NSwag.CodeGeneration.CSharp.Models.CSharpOperationModel.CreateResponseModel(OpenApiOperation operation, String statusCode, OpenApiResponse response, JsonSchema exceptionSchema, IClientGenerator generator, TypeResolverBase resolver, ClientGeneratorBaseSettings settings) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\Models\CSharpOperationModel.cs:line 291
at NSwag.CodeGeneration.Models.OperationModelBase`2.<>c__DisplayClass4_0.<.ctor>b__0(KeyValuePair`2 response) in C:\projects\nswag\src\NSwag.CodeGeneration\Models\OperationModelBase.cs:line 41
at System.Linq.Enumerable.SelectEnumerableIterator`2.ToList()
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at NSwag.CodeGeneration.Models.OperationModelBase`2..ctor(JsonSchema exceptionSchema, OpenApiOperation operation, TypeResolverBase resolver, IClientGenerator generator, ClientGeneratorBaseSettings settings) in C:\projects\nswag\src\NSwag.CodeGeneration\Models\OperationModelBase.cs:line 40
at NSwag.CodeGeneration.CSharp.Models.CSharpOperationModel..ctor(OpenApiOperation operation, CSharpGeneratorBaseSettings settings, CSharpGeneratorBase generator, CSharpTypeResolver resolver) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\Models\CSharpOperationModel.cs:line 46
at NSwag.CodeGeneration.CSharp.CSharpClientGenerator.CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings) in C:\projects\nswag\src\NSwag.CodeGeneration.CSharp\CSharpClientGenerator.cs:line 78
at NSwag.CodeGeneration.ClientGeneratorBase`3.<>c__DisplayClass16_0.<GetOperations>b__1(<>f__AnonymousType0`3 tuple) in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 163
at System.Linq.Enumerable.SelectEnumerableIterator`2.ToList()
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at NSwag.CodeGeneration.ClientGeneratorBase`3.GetOperations(OpenApiDocument document) in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 152
at NSwag.CodeGeneration.ClientGeneratorBase`3.GenerateAllClientTypes() in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 106
at NSwag.CodeGeneration.ClientGeneratorBase`3.GenerateFile(ClientGeneratorOutputType outputType) in C:\projects\nswag\src\NSwag.CodeGeneration\ClientGeneratorBase.cs:line 73
at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.GenerateContracts(Dictionary`2 result, CSharpClientGenerator clientGenerator) in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 286
at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.<RunAsync>b__92_0() in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 260
at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.RunAsync() in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 251
at NSwag.Commands.CodeGeneration.SwaggerToCSharpClientCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in C:\projects\nswag\src\NSwag.Commands\Commands\CodeGeneration\OpenApiToCSharpClientCommand.cs:line 240
at NSwag.Commands.NSwagDocument.ExecuteAsync() in C:\projects\nswag\src\NSwag.Commands\NSwagDocument.cs:line 85
at NSwag.Commands.Document.ExecuteDocumentCommand.ExecuteDocumentAsync(IConsoleHost host, String filePath) in C:\projects\nswag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.cs:line 86
at NSwag.Commands.Document.ExecuteDocumentCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in C:\projects\nswag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.cs:line 32
at NConsole.CommandLineProcessor.ProcessSingleAsync(String[] args, Object input)
at NConsole.CommandLineProcessor.ProcessAsync(String[] args, Object input)
at NConsole.CommandLineProcessor.Process(String[] args, Object input)
at NSwag.Commands.NSwagCommandProcessor.Process(String[] args) in C:\projects\nswag\src\NSwag.Commands\NSwagCommandProcessor.cs:line 56
I saw that path reference support was added recently (#1953). When recreating the same case in ExternalReferenceTests.cs / path-reference.json no error is given. When generating from the same files with the 13.6.0 toolchain no error is given and the code is correctly generated.