部署ASP.NET Core应用程序时是否可以更改环境设置(例如使用调试/发布版本的配置文件转换)?
在.NET Core应用程序中维护多种环境设置的最佳方法是什么(类似于<appSettings file="local.config">
的本地,暂存和生产方式)?
最佳答案
中央配置文件是appsettings.json
,您可以有多个文件,例如appsettings.Production.json
等,这些文件将被加载并覆盖appsettings.json
中的设置。
例如
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(hostEnv.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostEnv.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
您需要做的就是设置环境类型的环境变量(请参阅文档here)。
如果将
AddEnvironmentVariables()
添加到配置构建器,则还可以具有覆盖的环境变量。因此,如果您有一个appsettings.json{
"Data" {
"Default" {
"ConnectionString" : "..."
}
}
}
并想通过环境变量覆盖它,您将设置一个名为“Data:Default:ConnectionString”的环境变量,其值将覆盖appsettings.config和appsettings.Production.config中的设置(假设
.AddEnvironmentalVariables()
称为在 .AddJsonFile()
之后-使用匹配关键字的最后一次注册获胜),并带有环境变量中的值。您可以在官方文档here中找到更多信息。
更新
由于在评论中有人将其理解为设置环境的唯一方法,因此设置环境变量的方法有很多(大部分记录在Use multiple environments in ASP.NET Core中),所有这些最终都归结为一个环境变量,只是在不同的范围内:
set ASPNETCORE_ENVIRONMENT=Development
或$Env:ASPNETCORE_ENVIRONMENT = "Development"
,在Linux上为export ASPNETCORE_ENVIRONMENT = Development
)ASPNETCORE_ENVIRONMENT=Production dotnet MyApp.dll
)web:
environment:
- ASPNETCORE_ENVIRONMENT=Debugging
docker run -e ASPNETCORE_ENVIRONMENT=Debugging
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="true" >
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
dotnet run --launch-profile Development
每次执行它们都在特定范围内(全局,容器本地,应用程序池内部,每次执行等)更改/设置环境变量。选择一种适合您的需求。
关于asp.net-core - 部署asp.net核心应用程序时如何处理环境差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37873964/