使用.net core 3.0.100
启动IIS Express
应用程序时:
我遇到下一个错误。
未处理的异常。 System.InvalidOperationException:服务器已经启动。
从命令行开始时也出现相同的错误:
dotnet run -w
此启动代码,用于创建hostBuilder并启动应用程序
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog();
});
public static void Main(string[] args) => CreateHostBuilder(args).Build().Run(); // errors throws here
我认为该错误表示服务器已启动:)但是我不知道何时启动服务器?
更新1
调查IIS日志时,接下来看到引发异常的库:
抛出异常:System.Private.CoreLib.dll中的'System.InvalidOperationException'
更新2
运行dotnet run
后,我看到了许多衍生的dotnet进程:
我可以杀死所有这些,但是当我杀死最后一个(红色突出显示)时,它将立即使用另一个PID重新启动。而且,如果我尽力杀死dotnet run
之后,仍然有同样的错误。
如果等待大约5分钟,那么我可以杀死最后一个进程,但仍然不能dotnet run
更新3
尝试过
dotnet build-server shutdown
dotnet run
结果相同
更新4
尝试过
dotnet <build-result-name>.dll
仍然有相同的错误,但是只产生了一个dotnet.exe
进程。此过程可以在 UPDATE 2
我的假设是,在从kestrel开始StartAsync
之前,kestrel服务器已经启动了,但是我不知道何时何地。
更新5
启动代码列表
public void ConfigureServices(IServiceCollection services)
{
services
.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "wwwroot";
});
services
.AddLocalizationOptions(Configuration)
.AddHttpContextAccessor()
.AddSingleton<IActionContextAccessor, ActionContextAccessor>()
.AddSecurityAuthentication(
this.Configuration,
options => options
.UseUserModel<User>()
.AddUserService<UserService>()
.AddSecurityJwtAuthentication())
.AddAuthorization()
.AddLogging(builder => builder
.AddConfiguration(Configuration)
.AddConsole()
.AddNLog())
.AddMvcCore()
.AddControllersAsServices()
.AddCustomJsonOptions(this.hostingEnvironment)
.AddCustomCors();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// If, for some reason, you need a reference to the built container, you
// can use the convenience extension method GetAutofacRoot.
this.AutofacContainer = app.ApplicationServices.GetAutofacRoot();
app
.UseRequestLocalization(
RequestLocalizationConfigurator.GetRequestLocalizationOptions(app.ApplicationServices))
.UseHttpsRedirection()
.UseMiddleware<SpaRoutingMiddleware>()
.UseStaticFiles()
.UseMiddleware<ExceptionHandlingMiddleware>()
.UseRouting()
.UseCors(CorsPolicyName.AllowAny)
.UseAuthentication()
.UseAuthorization()
.UseEndpoints(endpoints =>
{
endpoints.MapControllers().RequireAuthorization();
});
app.UseSpaStaticFiles();
app.UseSpa(spa =>
{
spa.Options.SourcePath = "../../../../client";
});
}