发布后无法从Json文件中读取值

时间:2017-10-11 09:46:40

标签: json .net-core .net-core-configuration

我可以在开发时读取值(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 个答案:

答案 0 :(得分:0)

也许您的发布工作没有将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

如果这些都没有帮助您,请提供更多上下文,例如分享项目以及有关如何运行已发布版本的详细信息。

答案 1 :(得分:0)

更改您添加到此的构造函数:

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

            Configuration = builder.Build();
        }

public IConfiguration Configuration { get; }

这样可以正常使用。