在.net core razor页面(appsettings.Production.json)中配置生产应用程序设置.&



我的。net core razor pages web应用程序在调试模式下运行良好(托管在localhost上),一旦我将其发布到IIS就失败了。

问题来自我的应用程序设置,特别是我的生产应用程序设置。作为我调试过程的一部分,我将json从appsettings.Development.json复制到appsettings.Production.json(发布后),这允许我的web应用程序运行没有问题。这种解决方法并不令人满意,因为我必须在每次发布时手动替换它。

appsettings.Production。Json不存储在文件目录/解决方案资源管理器中。相反,它是在发布期间创建的。我相信这是发生在Program.cs:

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
//I believe that the configuration happens below:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
这是我当前的json文件。注意设置的优先级是用户秘密——>appsettings。{EnvironmentName}。json——比;appsettings.json。这意味着任何重复的键都将从优先级更高的文件中获取值。在我的例子中是appsettings。json被开发和生产使用作为基本设置集,并且添加了连接字符串(来自Dev/Prod)。

appsettings.json:

{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
}
}

appsettings.Development.json

{
"ConnectionStrings": {
"Identity": "Server=server1;Database=Identity;MultipleActiveResultSets=true; user id=uName; password=12345678",
"Logistics": "Server=server1;Database=Logistics;MultipleActiveResultSets=true; user id=uName; password=12345678"
}}
下面是创建的appsettings.production.json文件:appsettings.Production.json
{
"ConnectionStrings": {
"Identity": "Server=server1;Database=Identity;Trusted_Connection=True;MultipleActiveResultSets=true",
"Logistics": "Server=server1;Database=Logistics;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}

我如何控制/手动配置appsettings.production.json?

我已经找到了一个解决方案,将工作为我的目的。

我已经创建了另一个名为appsettings.Custom的文件。

然后我做了以下修改:

  1. In Properties—>发布个人资料——>launchSettings。我将ASPNETCORE_ENVIRONMENT更改为"Custom">

  2. 在Program.cs中,我添加了以下代码以将新创建的appsettings.Custom.json文件包含到项目中。注意我不能手动添加appsettings.production.json——它会在发布时被覆盖。

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    //Begin added code for proper app config:
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
    config.AddJsonFile($"appsettings.Custom.json");
    })
    //End 
    .ConfigureWebHostDefaults(webBuilder =>
    {
    webBuilder.UseStartup<Startup>();
    });
    

在调试期间,我得到自定义环境和自定义配置,发布版本得到生产版本自定义配置。注意,我添加了一个键("TestValues")值("…从appsettings.Custom…"对我的json进行调试。

本地主机版本(从VS 2019调试)

IWebHostEnvironment.EnvironmentName = "Custom"
IConfiguration.GetValue<string>("TestValues") = "Test Values from AppSettings.Custom.json"
<<p>发布版本/strong>
IWebHostEnvironment.EnvironmentName = "Production"
IConfiguration.GetValue<string>("TestValues") = "Test Values from AppSettings.Custom.json"

最新更新