繁体   English   中英

添加链接的 appsettings.json

[英]Add a linked appsettings.json

我有几个项目共享相同的 appsettings.json 文件。

当我将 appsettings.json 文件单独添加到每个项目时,我的项目启动并从这些文件加载配置。

我想要一个文件,我链接它(添加 -> 现有 -> 添加为链接),这样我就可以维护一个文件。

这样做会更改 my.proj 文件以包含以下文件:

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

当我进行构建时,我可以在 bin\Debug.netcoreapp3.1 目录中看到这两个应用程序设置。

我的启动:

public static void Main(string[] args)
{
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
    CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                var lConfiguration = hostContext.Configuration;

                ServiceConfiguration lOptions = lConfiguration.GetSection(nameof(ServiceConfiguration)).Get<ServiceConfiguration>();
                services.AddSingleton(lOptions);

            })
            .UseSerilog((hostingContext, loggerConfiguration) =>
                    loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration)
                );

但是,当我调试我的项目并检查配置 object 时,我可以看到所有配置源,但 appsettings 源是空的。

我很困惑,因为正在构建 appsettings 文件,但配置没有选择它。

我错过了什么?

还有一种方法可以控制应用程序的启动位置。 您可以修改launchSettings.json文件以将workingDirectory设置添加到您的启动配置文件。 只需将它指向您的 bin output 文件夹:

{
  "profiles": {
    "Project1": {
      "commandName": "Project",
      "workingDirectory": "bin/Debug/net6.0",
      "dotnetRunMessages": true,
      "environmentVariables": {
        "DOTNET_ENVIRONMENT": "Development"
      }
    }
  }
}

问题是 .NET Core 中的工作目录默认为源文件夹,而不是二进制文件夹。 这意味着它正在我的源文件夹中寻找 appsettings.json 文件,如果我手动添加了一个 appsettings 文件,它就会在那里,但是当我链接它时,它不在源文件夹中。

通过执行以下操作将默认工作目录更改为二进制文件夹解决了该问题:

Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM