Автономное ядро ​​ASP.Net не читает файл appsettings.json - PullRequest
1 голос
/ 25 июня 2019

Я написал приложение ASP.Net Core 2.2. Все работает нормально, когда я запускаю его на своем компьютере разработчика.

Я опубликовал и развернул его на своем промежуточном компьютере как отдельное приложение.

TargetFramework - netcoreapp2.2. RuntimeIdentifier - это win-x64. И окружающая среда развивается.

При запуске приложения через командную строку для некоторого тестирования оно, похоже, не читает файл appsettings.staging.json или какой-либо из файлов appsettings.json.

Для целей тестирования я настроил метод настройки Startup.cs следующим образом:

public void Configure( IApplicationBuilder app , IHostingEnvironment env )
{
    if( env.IsDevelopment( ) )
    {
        app.UseDeveloperExceptionPage( );
    }
    else
    {
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts( );
    }

    app.UseHttpsRedirection( );

    Console.WriteLine( $"Chris Environment: {env.EnvironmentName}" );
    Console.WriteLine( $"Chris IsStaging: {env.IsStaging( )}" );
    Console.WriteLine( $"Chris ConnectionString: {Configuration.GetConnectionString( "DefaultConnection" )}" );
    Console.WriteLine( $"Chris LoggingAPI: {Configuration["LoggingAPIURL"]}" );

    foreach( var test in Configuration.AsEnumerable( ) )
    {
        var key = test.Key;
        var val = test.Value;
        Console.WriteLine( $"Chris Key: {key} - Value: {val}" );
    }

    app.UseMvc( b =>
    {
        b.Select( ).Expand( ).Filter( ).OrderBy( ).MaxTop( 100 ).Count( );
        b.MapODataServiceRoute( "default" , "api" , EdmModelBuilder.GetEdmModel( app.ApplicationServices ) );
    } );
}

Я запускаю приложение, набрав в командной строке: путь / To / My / App.exe - Постановка среды

Результаты выписаны: Крис Окружающая среда: постановка Chirs IsStaging: True Крис ConnectionString: Крис LoggingAPI:

Строка соединения и LoggingAPI оставлены пустыми. Цикл возвращает набор значений, но ничего из файлов appsettings.json отсутствует.

Мой файл appsettings.json выглядит так:

{
  "ConnectionStrings": {
    "DefaultConnection": "Some ConnectionString"
  },
 "Logging": {
   "LogLevel": {
     "Default": "Warning"
   }
  },
   "AllowedHosts": "*",
   "LoggingAPIURL": "SomeURL"
}

Я убедился, что файлы appsetting.json находятся на сервере.

Может кто-нибудь объяснить мне, что происходит?

1 Ответ

1 голос
/ 26 июня 2019

Базовый путь для конфигурации WebHostBuilder установлен на IHostingEvironment.ContentRootPath ( источник ):

var builder = new ConfigurationBuilder()            
    .SetBasePath(_hostingEnvironment.ContentRootPath)

При использовании WebHostBuilder.CreateDefaultBuilder, который является подходом по умолчанию, генерируемымДля шаблонов проектов IHostingEvironment.ContentRootPath устанавливается с использованием Directory.GetCurrentDirectory() ( source ):

builder.UseContentRoot(Directory.GetCurrentDirectory());

Это означает, что при попытке найти appsettings.json и appsettings.[Environment].json, рабочий каталог используется и не обязательно каталог приложения.В вашем примере вы запускаете приложение из-за пределов своего собственного каталога, что означает, что файлы .json не найдены.

Чтобы решить эту проблему, вы можете сначала cd в path/To/My изатем запустить App.exe оттуда.В качестве альтернативы, если бы вы запускали App.exe как службу, вы можете установить рабочий каталог для приложения таким же, как и само приложение.

...