RicoSuter / NSwag

The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript.
http://NSwag.org
MIT License
6.75k stars 1.29k forks source link

WorkingDirectory ignored with assembly #3733

Open zbynek001 opened 2 years ago

zbynek001 commented 2 years ago

nswag v13.14.4 is ignoring workingDirectory, when used with assembly reference. Version v13.14.3 doesn't have this issue, but have other issues with ignoring json attributes.

Here is the error:

7>NSwag command line tool for .NET Core Net60, toolchain v13.14.4.0 (NJsonSchema v10.5.2.0 (Newtonsoft.Json v13.0.0.0))
7>Visit http://NSwag.org for more information.
7>NSwag bin directory: C:\Users\xxxxx\.nuget\packages\nswag.msbuild\13.14.4\tools\Net60
7>
7>Executing file 'src/api/api.nswag' with variables 'Configuration=Debug,RuntimeIdentifier=win10-x64,OutDir=xxx,MSBuildProjectDirectory=xxx'...
7>System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional. The expected physical path was 'C:\Users\xxxxx\.nuget\packages\nswag.msbuild\13.14.4\tools\Net60\appsettings.json'.
7>   at Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
7>   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
7>   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
7>   at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
7>   at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
7>   at SDS.SmartSignals.API.Web.Program.Main(String[] args) in C:\Projects\SmartDigitalSolutions\SmaSi_2\src\SDS.SmartSignals.API.Web\Program.cs:line 81
7>--- End of stack trace from previous location ---
7>   at Microsoft.Extensions.Hosting.HostFactoryResolver.HostingListener.CreateHost() in C:\projects\nswag\src\NSwag.Commands\HostFactoryResolver.cs:line 271
7>   at Microsoft.Extensions.Hosting.HostFactoryResolver.<>c__DisplayClass8_0.<ResolveHostFactory>b__0(String[] args) in C:\projects\nswag\src\NSwag.Commands\HostFactoryResolver.cs:line 75
7>   at NSwag.Commands.ServiceProviderResolver.GetServiceProviderWithHostFactoryResolver(Assembly assembly) in C:\projects\nswag\src\NSwag.Commands\HostApplication.cs:line 143
7>   at NSwag.Commands.ServiceProviderResolver.GetServiceProvider(Assembly assembly) in C:\projects\nswag\src\NSwag.Commands\HostApplication.cs:line 70
7>   at NSwag.Commands.Generation.OpenApiGeneratorCommandBase`1.GetServiceProvider(AssemblyLoader assemblyLoader) in C:\projects\nswag\src\NSwag.Commands\Commands\Generation\OpenApiGeneratorCommandBase.cs:line 298
7>   at NSwag.Commands.Generation.AspNetCore.AspNetCoreToSwaggerCommand.RunIsolatedAsync(AssemblyLoader assemblyLoader) in C:\projects\nswag\src\NSwag.Commands\Commands\Generation\AspNetCore\AspNetCoreToOpenApiCommand.cs:line 323
7>   at NSwag.Commands.IsolatedCommandBase`1.IsolatedCommandAssemblyLoader`1.Run(String commandType, String commandData, String[] assemblyPaths, String[] referencePaths) in C:\projects\nswag\src\NSwag.Commands\Commands\IsolatedCommandBase.cs:line 76
7>   at NSwag.Commands.IsolatedCommandBase`1.<>c__DisplayClass17_0.<RunIsolatedAsync>b__0() in C:\projects\nswag\src\NSwag.Commands\Commands\IsolatedCommandBase.cs:line 61
7>   at System.Threading.Tasks.Task`1.InnerInvoke()
7>   at System.Threading.Tasks.Task.<>c.<.cctor>b__271_0(Object obj)
7>   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
7>--- End of stack trace from previous location ---
7>   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
7>   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
7>--- End of stack trace from previous location ---
7>   at NSwag.Commands.IsolatedCommandBase`1.RunIsolatedAsync(String configurationFile) in C:\projects\nswag\src\NSwag.Commands\Commands\IsolatedCommandBase.cs:line 61
7>   at NSwag.Commands.IsolatedSwaggerOutputCommandBase`1.RunAsync(CommandLineProcessor processor, IConsoleHost host) in C:\projects\nswag\src\NSwag.Commands\Commands\IsolatedSwaggerOutputCommandBase.cs:line 51
7>   at NSwag.Commands.Generation.AspNetCore.AspNetCoreToSwaggerCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in C:\projects\nswag\src\NSwag.Commands\Commands\Generation\AspNetCore\AspNetCoreToOpenApiCommand.cs:line 98
7>   at NSwag.Commands.NSwagDocumentBase.GenerateSwaggerDocumentAsync() in C:\projects\nswag\src\NSwag.Commands\NSwagDocumentBase.cs:line 280
7>   at NSwag.Commands.NSwagDocument.ExecuteAsync() in C:\projects\nswag\src\NSwag.Commands\NSwagDocument.cs:line 81
7>   at NSwag.Commands.Document.ExecuteDocumentCommand.ExecuteDocumentAsync(IConsoleHost host, String filePath) in C:\projects\nswag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.cs:line 85
7>   at NSwag.Commands.Document.ExecuteDocumentCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in C:\projects\nswag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.cs:line 32
7>   at NConsole.CommandLineProcessor.ProcessSingleAsync(String[] args, Object input)
7>   at NConsole.CommandLineProcessor.ProcessAsync(String[] args, Object input)
7>   at NConsole.CommandLineProcessor.Process(String[] args, Object input)
7>   at NSwag.Commands.NSwagCommandProcessor.Process(String[] args) in C:\projects\nswag\src\NSwag.Commands\NSwagCommandProcessor.cs:line 55

integrated via:

    <Exec WorkingDirectory="$(ProjectDir)" EnvironmentVariables="ASPNETCORE_ENVIRONMENT=Development" Command="$(NSwagExe_Net60) run src/api/api.nswag /variables:Configuration=$(Configuration),RuntimeIdentifier=$(RuntimeIdentifier),OutDir=$(OutDir),MSBuildProjectDirectory=$(MSBuildProjectDirectory)" />

with following api.nswag:

    "runtime": "Net60",
    "defaultVariables": "",
    "documentGenerator": {
        "aspNetCoreToOpenApi": {
            "project": "",
            "msBuildProjectExtensionsPath": null,
            "configuration": "$(Configuration)",
            "runtime": "$(RuntimeIdentifier)",
            "targetFramework": "net6.0",
            "noBuild": false,
            "msBuildOutputPath": null,
            "verbose": true,
            "workingDirectory": "$(MSBuildProjectDirectory)/$(OutDir)/",
            "requireParametersWithoutDefault": false,
            "apiGroupNames": null,
            "defaultPropertyNameHandling": "Default",
            "defaultReferenceTypeNullHandling": "Null",
            "defaultDictionaryValueReferenceTypeNullHandling": "NotNull",
            "defaultResponseReferenceTypeNullHandling": "NotNull",
            "generateOriginalParameterNames": true,
            "defaultEnumHandling": "Integer",
            "flattenInheritanceHierarchy": false,
            "generateKnownTypes": true,
            "generateEnumMappingDescription": false,
            "generateXmlObjects": false,
            "generateAbstractProperties": false,
            "generateAbstractSchemas": true,
            "ignoreObsoleteProperties": false,
            "allowReferencesWithProperties": false,
            "excludedTypeNames": [],
            "serviceHost": null,
            "serviceBasePath": null,
            "serviceSchemes": [],
            "infoTitle": "My Title",
            "infoDescription": null,
            "infoVersion": "1.0.0",
            "documentTemplate": null,
            "documentProcessorTypes": [],
            "operationProcessorTypes": [],
            "typeNameGeneratorType": null,
            "schemaNameGeneratorType": null,
            "contractResolverType": null,
            "serializerSettingsType": null,
            "useDocumentProvider": true,
            "documentName": "client",
            "aspNetCoreEnvironment": null,
            "createWebHostBuilderMethod": null,
            "startupType": null,
            "allowNullableBodyParameters": true,
            "useHttpAttributeNameAsOperationId": false,
            "output": null,
            "outputType": "Swagger2",
            "newLineBehavior": "Auto",
            "assemblyPaths": [
                "$(MSBuildProjectDirectory)/$(OutDir)/project.dll"
            ],
            "assemblyConfig": null,
            "referencePaths": [],
            "useNuGetCache": false
        }
    },
    "codeGenerators": ...
RicoSuter commented 2 years ago

You should use "project" instead of "assembly" as the "assembly" option will probably dropped soon.