При запуске приложения .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.InvalidOperationException' в System.Private.CoreLib.dll
ОБНОВЛЕНИЕ 2
После запуска dotnet run
я вижу много порожденных процессов dotnet: ![enter image description here](https://i.stack.imgur.com/3HOCg.png)
Я могу убить их всех, но когдаЯ убиваю последний (выделенный красным), он немедленно перезагружается с другим PID. И если я попытаюсь сделать dotnet run
после того, как я убил столько, сколько смогу, по-прежнему возникает та же ошибка.
Если подождать около 5 минут, то я могу убить даже последний процесс, но все равно не могуdotnet run
ОБНОВЛЕНИЕ 3
Попытка
dotnet build-server shutdown
dotnet run
Результат тот же
ОБНОВЛЕНИЕ 4
Пробовал dotnet <build-result-name>.dll
По-прежнему имеет ту же ошибку, но знаю, что только один dotnet.exe
процесс был порожден. Этот процесс, который можно убить за 5 минут из 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";
});
}