ASP. NET core 3.1: UseWindowsService не устанавливает содержимое root, как ожидалось, при публикации приложения с «создать один файл» - PullRequest
0 голосов
/ 21 июня 2020

Создано приложение ASP. NET core 3.1, размещенное внутри службы windows, использующей HTTP.SYS, и все работает нормально. Мой метод CreateHostBuilder запускается следующим образом:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseWindowsService()
        .ConfigureAppConfiguration((context, config) =>
        {
            // configure the app here.
            config.AddJsonFile("TEST.json");
        })

, и файл «TEST. json» правильно найден и прочитан из папки содержимого root (папка, содержащая windows service exe и другие сборки). Однако, если я попытаюсь опубликовать приложение в виде одного файла (со всем остальным)

введите описание изображения здесь

загрузка файла «TEST. json» завершается неудачно со следующей ошибкой, как если бы содержимое root не было установлено там, где находится исполняемый файл службы windows (обратите внимание на полный путь к файлу ожидается 'C: \ Windows \ ServiceProfiles \ LocalService \ AppData \ Local \ Temp.net \ TestNetCore \ 544bgjpl.0mf \ TEST. json')

Application: TestNetCore.exe
CoreCLR Version: 4.700.20.26901
.NET Core Version: 3.1.5
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.FileNotFoundException: The configuration file 'TEST.json' was not found and is not optional. The physical path is 'C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\.net\TestNetCore\544bgjpl.0mf\TEST.json'.
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
   at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
   at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
   at Microsoft.Extensions.Hosting.HostBuilder.BuildAppConfiguration()
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at TestNetCore.Program.Main(String[] args)

Любая идея, почему это происходит?

Ответы [ 2 ]

0 голосов
/ 23 июня 2020

Кажется, это известная проблема, подробнее см. https://github.com/dotnet/runtime/issues/36065. Проблема в том, что AppContext.BaseDirectory не является исходным каталогом однофайлового exe, это каталог, в который извлекаются сборки в exe.

0 голосов
/ 22 июня 2020

Щелкните файл правой кнопкой мыши в Visual Studio, выберите параметр «Свойства» и в разделе «Копировать в выходной каталог» выберите либо «Копировать всегда».

...