firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.

Net core service start in temp directory, как побороть?

Обнаружил довольно странное и неприятное поведение приложения.
Приложение собирается в единый исполнимый файл, ниже настройки проекта.
<PublishSingleFile>True</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>


При запуске оно успешно распаковывается в

C:\WINDOWS\Temp\.net\Telemetry\dnmyz2wf.5xu

Где Telemetry - имя приложения
dnmyz2wf.5xu - случайное имя

В общем то плевать, но оно успешно не видит свои конфигурационные файлы.
appsettings.json

И это уже напрягает. Как собственно с этим счастьем бороться, кроме разве что передачи через окружение пути к папке с конфигами?
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
firedragon
@firedragon Автор вопроса
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Вот что собственно работает.

Host.CreateDefaultBuilder(args)
                .UseWindowsService()
                .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog())
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<ServiceTelemetry>();
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    var fileName = Process.GetCurrentProcess().MainModule.FileName;
                    var procDirectory = Directory.GetParent(fileName).FullName;
                    var appSettings = Path.Combine(procDirectory, "appsettings.json");
                    var config = new ConfigurationBuilder()
                        .SetBasePath(procDirectory)
                        .AddEnvironmentVariables()
                        .AddJsonFile(appSettings)         
                        .AddCommandLine(args)
                        .Build();

                    webBuilder
                        .UseConfiguration(config)
                        .UseStartup<Startup>();
                });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы