ASP.Net Core Web 项目未找到引用的应用程序设置

问题描述 投票:0回答:1

我们有一个微服务架构,其中大多数服务都使用

Microsoft.NET.Sdk
。由于我们有许多共享配置,因此我们有一个库,可以使用
global-appsettings.json
预先配置每个服务。由于我们将该全局配置文件复制到输出目录,因此该配置效果很好。但是,现在我们有一项需要
Microsoft.NET.Sdk.Web
SDK 的服务。由于某种原因,此服务不会在输出目录中查找应用程序设置;相反,它只在源目录中查找它们。我尝试了各种方法来尝试找出问题所在,但我还没有找到解决方案:

  1. 将新服务的SDK更改为

    Microsoft.NET.Sdk.Web
    时,发现
    global-appsettings.json
    没有任何其他更改。 (这只是为了测试这一点,并不是一个可行的解决方案)

  2. global-appsettings.json
    复制到新服务的源时,它也可以工作,但这也是次优的,因为我们不想维护两个相同的文件并破坏它们的好处

  3. 通过以下属性添加链接不起作用,这意味着服务未找到该文件:

    <Content Include="..\..\..\shared\Rapidata.Shared.Configuration\global-appsettings.Development.json">
      <Link>global-appsettings.Development.json</Link>
    </Content>
    

那么,在使用 Web SDK 时如何引用共享库中的设置文件?

c# asp.net-core razor configuration
1个回答
0
投票

根据你的描述,我建议你可以使用

builder.Configuration.AddJsonFile
方法使用global-appsettings.json设置正确的路径,然后它就可以得到它。

根据您共享的配置,

global-appsettings.Development.json
文件似乎位于Microsoft.NET.Sdk.Web项目的父文件夹内。

我建议你可以使用

Directory.GetParent(builder.Environment.ContentRootPath).FullName
获取当前应用程序的父路径,然后使用
Path.Combine
方法构建完整路径。最后使用正确的路径设置配置文件。

更多详情,您可以参考下面的例子:

请注意:我的测试文件就在应用程序的根父路径中,您可以再次调用

Directory.GetParent
来获取父路径的父路径。

var sharedConfigPath = Path.Combine(Directory.GetParent(builder.Environment.ContentRootPath).FullName, "Rapidata.Shared.Configuration");
builder.Configuration.AddJsonFile(Path.Combine(sharedConfigPath, "appsettings.json"), optional: true, reloadOnChange: true);
var test = builder.Configuration["test"];

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.