Не могу прочитать значения из файла 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
Если ни один из них не поможет вам, предоставьте больше контекста, например, поделиться проектом и подробностями о том, как вы используете опубликованную версию.