我的。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的文件。然后我做了以下修改:
In Properties—>发布个人资料——>launchSettings。我将ASPNETCORE_ENVIRONMENT更改为"Custom">
在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"