Не могу прочитать значения из файла Json после публикации

Я могу читать значения (value1,Value2) во время разработки, не могу прочитать их после публикации, что может быть проблема?

public  IConfigurationRoot Configuration { get; set; }

public Startup(IHostingEnvironment env)
    {
        Configuration = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json")
        .Build();
    }

public void readValues()
    {
        var val1 = ($"{Configuration["Value1"]}");
        var val2 = ($"{Configuration["Value2"]}");
    }

Json:

    {
       "Value1": "Hello",
       "Value2": "World"
    }

2 ответа

Решение

Измените свой конструктор, который вы добавили к этому:

public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json");

            Configuration = builder.Build();
        }

public IConfiguration Configuration { get; }

Это будет работать просто отлично.

Возможно, ваша публикация не копирует appsettings.json в папку публикации?

Вы можете подтвердить это, проверив содержимое каталога, в котором опубликовано ваше приложение. Вы публикуете с помощью.NET Core CLI? Подобно: dotnet publish -c Release?

На какую версию вы ориентируетесь? В случае, если это netcoreapp2.0, например: путь публикации проходит bin\Release\netcoreapp2.0\publish, Вы должны быть в состоянии найти appsettings.json там.

Если его там нет, вы можете установить его, изменив файл проекта (csproj):

  </PropertyGroup>
  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </None>
  </ItemGroup>

Если это не проблема, и файл фактически находится в каталоге публикации, это может быть каталог, в котором вы вызываете программу, а не каталог публикации, и во время выполнения код не находит appsettings.json

Если ни один из них не поможет вам, предоставьте больше контекста, например, поделиться проектом и подробностями о том, как вы используете опубликованную версию.

Другие вопросы по тегам