Values from linked appsettings.json file in dotnet core cannot be read

谁都会走 提交于 2019-12-22 09:48:08

问题


In an aspnetcore 2.0 project I'm trying to setup a single, shared appsettings.json file throughout my web application and several of my xunit test projects.

First off, everything works fine when I add the appsettings.json "regularly" to my projects individually. However, when I attempt to add a single reference/linked file from a different path, the values aren't read out during runtime.

To set this up, for each project I add the linked file to the .csproj:

<ItemGroup>
    <Content Include="..\Shared\appsettings.json">
        <Link>appsettings.json</Link>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>

And on each build, I can verify it is output nicely to the /bin/Debug/netcoreapp2.0 directory:

The problem is that when reading it out, either through the default Startup of my webapi or in the tests, the settings values are always null. I'm using a strong typed configuration. In the webapi project, I'm using the WebHost.CreateDefaultBuilder() with the aspnetcore 2.0 conventions (which under the hood looks at hostingEnvironment.EnvironmentName, dotPeek tells me).

But also in the case of the test projects, the same occurs. Which all can be explained by the following example in my global test fixture:

var builder = new ConfigurationBuilder()
    // .SetBasePath(???)
    .AddJsonFile("appsettings.json");

var configuration = builder.Build();

var settings = new FooSettings();
configuration.GetSection("FooSettings").Bind(settings);

if (settings == null) throw new Exception("Could not find or parse 'appsettings.json'");

// The problem: always fails on this check
if (string.IsNullOrEmpty(settings.Bar)) throw new Exception("Could not find or parse 'FooSettings'");

The problem is commented on the last line in the above sample. Again, it works perfect when I directly add the appsettings.json file to the project root, instead of adding it as a linked reference to a shared folder. I am assuming I have to either change the .csproj configuration differently OR use a different .SetBasePath(???). But for both I'm struggling on how to achieve it.

The question: What can I do to make the linked appsettings file to be read properly in all my projects?

N.B. I found several other posts, but couldn't find any with a matching answer, specifically for dotnetcore.

来源:https://stackoverflow.com/questions/49888073/values-from-linked-appsettings-json-file-in-dotnet-core-cannot-be-read

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!