Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么NSwag在我的电脑上失败,而不是在我的同事身上失败?_C#_Asp.net Core_Asp.net Core 3.1_Openapi_Nswag - Fatal编程技术网

C# 为什么NSwag在我的电脑上失败,而不是在我的同事身上失败?

C# 为什么NSwag在我的电脑上失败,而不是在我的同事身上失败?,c#,asp.net-core,asp.net-core-3.1,openapi,nswag,C#,Asp.net Core,Asp.net Core 3.1,Openapi,Nswag,我正在从事一个大型的C#Asp.NetCore 3.1项目,我们使用Nswag为API生成swagger.json和一个C#ProxyClient。 突然,我无法再为这个项目生成任何这些文件,因为NSwag失败,出现了如下所示的“类型无服务” 我曾尝试用Git将解决方案的新版本克隆到我机器上的新文件夹中,但问题仍然存在。 当我的同事在他们的机器上做同样的事情时,他们没有问题,因此我们得出结论,这与我们的代码无关 我创建了一个小的Asp.NetCore 3.1 API,并添加了我们在原始项目中使用

我正在从事一个大型的C#Asp.NetCore 3.1项目,我们使用Nswag为API生成swagger.json和一个C#ProxyClient。 突然,我无法再为这个项目生成任何这些文件,因为NSwag失败,出现了如下所示的“类型无服务”

我曾尝试用Git将解决方案的新版本克隆到我机器上的新文件夹中,但问题仍然存在。 当我的同事在他们的机器上做同样的事情时,他们没有问题,因此我们得出结论,这与我们的代码无关

我创建了一个小的Asp.NetCore 3.1 API,并添加了我们在原始项目中使用的“openapi.nswag”文件。我没有遇到此解决方案的问题,因此无法重现错误

我已经尝试了我脑海中出现的一切: 将NSwag更新为最新版本,重新启动我的计算机,删除并重新安装NSwag,清理注册表中与NSwag相关的任何内容,尝试使用NSwagStudio创建文件

我的想法真的快用完了,所以任何帮助都将不胜感激

.\nswag run ..\..\openapi.nswag /runtime:NetCore31

NSwag command line tool for .NET Core NetCore31, toolchain v13.7.0.0 (NJsonSchema v10.1.24.0 (Newtonsoft.Json v12.0.0.0))
Visit http://NSwag.org for more information.
NSwag bin directory: C:\Source\MyProgram\src\B2B\B2B.API\node_modules\nswag\bin\binaries\NetCore31

Executing file '..\..\openapi.nswag' with variables ''...
System.InvalidOperationException:未注册类型为“Microsoft.Extensions.DependencyInjection.IServiceProviderFactory[Autofac.ContainerBuilder]”的服务。 位于Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider提供程序,键入serviceType) 位于Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider提供程序) 在Microsoft.AspNetCore.Hosting.StartupLoader.ConfigureServicesDelegateBuilder.c_uuDisplayClass14_0.g_u中,配置了带有ContainerConfiguration | 0的服务(IServiceCollection服务) 位于Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(iSeries收集服务) 在Microsoft.AspNetCore.Hosting.WebHost.EnsureApplicationServices()上 在Microsoft.AspNetCore.Hosting.WebHost.Initialize()中 在Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()上 在C:\projects\NSwag\src\NSwag.Commands\Generation\OpenApiGeneratorCommandBase.cs中的NSwag.Commands.Generation.OpenApiGeneratorCommandBase.CreateWebHostAsync(AssemblyLoader AssemblyLoader)处:第342行 在C:\projects\NSwag\src\NSwag.Commands\Commands\Generation\AspNetCore\AspNetCoreToSwaggerCommand.cs中的NSwag.Commands.Generation.AspNetCore.AspNetCoreToSwaggerCommand.RunIsolatedAsync(AssemblyLoader AssemblyLoader):第310行 在C:\projects\NSwag\src\NSwag.Commands\Commands\IsolatedCommandAssemblyLoader.Run中的NSwag.Commands.IsolatedCommandBase.IsolatedCommandAssemblyLoader.Run(String commandType,String commandData,String[]assemblypath,String[]referencePaths):第76行 在c:\projects\NSwag\src\NSwag.Commands\Commands\IsolatedCommandBase.c\uu中的NSwag.Commands.IsolatedCommandBase.c\uu显示Class17\u 0.b\u0():第61行 在System.Threading.Tasks.Task.InnerInvoke()中 at System.Threading.Tasks.Task.c.b_u274_0(对象obj) 位于System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(线程threadPoolThread,ExecutionContext ExecutionContext,ContextCallback回调,对象状态) ---来自引发异常的上一个位置的堆栈结束跟踪--- 位于System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(线程threadPoolThread,ExecutionContext ExecutionContext,ContextCallback回调,对象状态) 位于System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task¤tTaskSlot,threadPoolThread) ---来自引发异常的上一个位置的堆栈结束跟踪--- 在C:\projects\NSwag\src\NSwag.Commands\Commands\IsolatedCommandBase.cs中的NSwag.Commands.IsolatedCommandBase.RunIsolatedAsync(字符串配置文件):第61行 在C:\projects\NSwag\src\NSwag.Commands\Commands\IsolatedSwaggerOutputCommandBase.RunAsync(CommandLineProcessor处理器,IConsoleHost主机)中的NSwag.Commands.IsolatedSwaggerOutputCommandBase.RunAsync处:第51行 在C:\projects\NSwag\src\NSwag.Commands\Commands\Generation\AspNetCore\AspNetCoreToSwaggerCommand.RunAsync(CommandLineProcessor处理器,IConsoleHost主机)中的NSwag.Commands.AspNetCore.AspNetCoreToSwaggerCommand.RunAsync(Commands\src\NSwag.Commands\Generation\AspNetCore\aspnetcor 在C:\projects\NSwag\src\NSwag.Commands\NSwagDocumentBase.cs中的NSwag.Commands.NSwagDocumentBase.generateswaggerdocumentsync()处:第280行 在C:\projects\NSwag\src\NSwag.Commands\NSwagDocument.cs中的NSwag.Commands.NSwagDocument.ExecuteAsync()处:第81行 在C:\projects\NSwag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.ExecuteDocumentAsync(IConsoleHost主机,字符串文件路径)中的NSwag.Commands.Document.ExecuteDocumentCommand.ExecuteDocumentAsync处:第86行 在C:\projects\NSwag\src\NSwag.Commands\Commands\Document\ExecuteDocumentCommand.RunAsync(CommandLineProcessor处理器,IConsoleHost主机)中的NSwag.Commands.Document.ExecuteDocumentCommand.RunAsync处:第32行 位于NConsole.CommandLineProcessor.ProcessSingleAsync(字符串[]参数,对象输入) 位于NConsole.CommandLineProcessor.ProcessAsync(字符串[]参数,对象输入) 在NConsole.CommandLineProcessor.Process(字符串[]参数,对象输入) 在C:\projects\NSwag\src\NSwag.Commands\NSwagCommandProcessor.cs中的NSwag.Commands.NSwagCommandProcessor.Process(字符串[]args)处:第56行child_Process.js:669 犯错误


最后,在克隆NSwag并调试它之后,我发现了问题

NSwag正在程序集中查找要为其创建代理客户端的程序类。它通过refelction实现,然后NSwag调用它。 第四,如果程序抛出异常,NSwag会支持它,然后它会运行“回退路由”,使用程序集中的启动类创建Webhost本身。执行此操作时,Webhost不是使用AutofacServiceProviderFactory作为ServiceProviderFactory创建的,因此会引发上面的异常而不是初始验证

在我的例子中,问题是没有设置ASPNETCORE_环境变量,因此它无法读取正确的设置。 我的同事有这样的环境