在 .NET 8 项目中,我尝试替代appsettings.development.json
开发和appsettings.production.json
生产,但始终选择生产 json。我正在使用 Azure Devops 并有一个经典的构建管道,其中我将ASPNETCORE_ENVIRONMENT
管道变量中的变量设置为'development'
。
这是我的 program.cs 文件中的代码。当我运行构建和发布时,该站点正在appsettings.production.json
我的开发环境中使用。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
根据您的描述,您正在管道中定义变量:
ASPNETCORE_ENVIRONMENT
。在这种情况下,此变量仅在管道中可用。部署项目后,托管站点不会设置此变量,因此它将默认使用生产环境。
为了解决这个问题,您可以在运行 dotnet publish 时设置环境变量。
例如:
管道任务:
在输出包中,我们可以在web.config文件中找到环境变量: ASPNETCORE_ENVIRONMENT 。
例如:
部署后,它将应用正确的 appsettings 文件。
另一方面,您也可以在托管站点中手动设置全局环境变量(例如ASPNETCORE_ENVIRONMENT:development )。
如果您正在使用 Azure Web App,您可以在应用程序设置 -> 添加/编辑应用程序设置中设置所需的变量。
如果您使用 IIS 网站,您可以在IIS -> 配置编辑器 -> system.webServer/aspNetCore -> environmentvariables中设置变量。
有关更多详细信息,您可以参考此文档:在 ASP.NET Core 中使用多个环境