我们有.NET Core 2.2 Web API项目,我们使用以下代码基于appsettings.json
或DEBUG
构建标记来加载适当的RELEASE
文件。
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
#if DEBUG
.AddJsonFile("appsettings.Development.json")
#endif
#if RELEASE
.AddJsonFile("appsettings.Production.json")
#endif
.AddJsonFile("appsettings.json")
.Build()
)
.UseStartup<Startup>()
.Build();
我们创建了一个外部项目,该项目在Topshelf Windows Service项目中调用相同的方法。
奇怪的是,无论我们是调试还是发布项目,都始终加载appsettings.Production.json
文件。
答案 0 :(得分:1)
执行以下操作,然后在托管系统OS中设置环境变量:
mode | findstr /RC:"\C\O\M[0-9*]."
编辑:删除了CreateDefaultBuilder()
答案 1 :(得分:0)
备注
以下默认值应用于返回的WebHostBuilder:
- 将Kestrel用作Web服务器,并使用应用程序的配置提供程序对其进行配置,
将ContentRootPath设置为GetCurrentDirectory()的结果
- 加载IConfiguration
从
appsettings.json
和appsettings.[EnvironmentName].json
,- 在EnvironmentName为'Development'时从用户密钥加载IConfiguration。
使用入口程序集
- 加载IConfiguration
从环境变量
- 中加载IConfiguration
从提供的命令行参数
配置ILoggerFactory以登录到控制台并调试输出,
并启用IIS集成。
该列表中的数字3总是要查看ASPNETCORE_ENVIRONMENT
环境变量的值(如果未指定,则默认为“ Production”),并尝试加载具有该名称的appsettings文件。
只需更改该环境变量的值(例如更改为“ Development”),而不是更改代码或使用预处理程序指令。
您的launchSettings.json
文件的工作方式如下:
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
...
不要与CreateDefaultBuilder()
进行斗争-您发布的代码执行了许多步骤,因此该方法已经为您完成(加载文件,设置基本路径等)。
这是ASP.Net Core项目提供给您的默认Program.cs,它可以为您正常工作:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
另外,仅需注意,您要在主appsettings.json文件之前 加载环境特定的文件。通常,您会希望以其他顺序进行操作。