UseContentRoot не использует значения - PullRequest
0 голосов
/ 27 июня 2018

Я работаю над проектом, который использует веб-сервер Kestrel и работает как сервис. Я следовал инструкциям о том, как создать такой сервис. В принципе все нормально, если я запускаю проект из командной строки.

Проблема возникает, когда она запускается как служба с панели services.msc или с помощью команды sc start. Я добавил некоторые записи, чтобы увидеть, что на самом деле происходит.

Выполняются следующие вызовы (так же, как в примере):

pathToContentRoot = Path.GetDirectoryName(pathToExe);

var host = WebHost.CreateDefaultBuilder(webHostArgs)
    .UseContentRoot(pathToContentRoot)
    .UseStartup<Startup>()
    .UseUrls("http://0.0.0.0:5000")
    .UseNLog()
    .Build();

Из журнала я вижу, что pathToContentRoot - это то, что я ожидаю (также там я могу найти файл appsettings.json)

Тем не менее, как только я открываю веб-страницу, в журнале появляется следующее сообщение об ошибке:

2018-06-27 13: 47: 55,8391 | 1 | ERROR | Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware | Произошло необработанное исключение при выполнении запроса. System.IO.FileNotFoundException: файл конфигурации 'appsettings.json' не найден и не является обязательным. Физическое путь - «C: \ WINDOWS \ system32 \ appsettings.json». в Microsoft.Extensions.Configuration.FileConfigurationProvider.Load (Boolean перезарядка) в Microsoft.Extensions.Configuration.ConfigurationRoot..ctor (IList`1 провайдеры) в Microsoft.Extensions.Configuration.ConfigurationBuilder.Build () в GrafWebsearch.Services.EmailSender..ctor () в A: \ engineering \ InterneTools \ GrafWebsearch \ GrafWebsearch \ Services \ EmailSender.cs: line 20 --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение --- в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCreateInstance (CreateInstanceCallSite createInstanceCallSite, область действия ServiceProviderEngineScope)

Это ясно указывает на то, что он ищет appconfig.json в обычном каталоге, в котором работают службы Windows, а не в каталоге, указанном с помощью UseContentRoot.

Я должен упомянуть, что я обновил .NET core 1.1 до 2.1 - может быть, там были какие-то изменения?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 27 июня 2018

Я нашел ответ.

В какой-то совершенно другой части моего кода (EmailSender.cs) я неправильно ввел конфигурацию, вместо этого я создал новую, включая строки

.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")

Похоже, это приводит к тому, что мое приложение перезаписывает фактическую конфигурацию. Как только я исправил инъекцию через конструктор, все заработало.

...