Asp.net-Core
部署asp.net核心應用時如何處理環境差異?
部署 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();完成這項工作所需要做的就是設置環境類型的環境變數(請參閱此處的文件)。
如果您添加
AddEnvironmentVariables()到配置生成器,您還可以擁有覆蓋的環境變數。所以如果你有一個 appsettings.json{ "Data" { "Default" { "ConnectionString" : "..." } } }並希望通過環境變數覆蓋它,您需要設置一個名為“Data:Default:ConnectionString”的環境變數,它的值將覆蓋 appsettings.config 和 appsettings.Production.config 中的設置(假設
.AddEnvironmentalVariables()您在.AddJsonFile()-使用匹配鍵的最後一次註冊獲勝)使用環境變數中的值。您可以在此處的官方文件中找到更多資訊。
更新
由於在評論中有些人認為這是設置環境的唯一方法,因此有很多方法可以設置環境變數(其中大部分都記錄在Use multiple environment in ASP.NET Core 中),最終都歸結為環境變數,只是在不同的範圍內:
- 環境變數(全域,Windows cmd.exe
set ASPNETCORE_ENVIRONMENT=Development或$Env:ASPNETCORE_ENVIRONMENT = "Development"在 powershell 上,export ASPNETCORE_ENVIRONMENT = Development在 linux 上)- 每個命令環境變數(即 linux:
ASPNETCORE_ENVIRONMENT=Production dotnet MyApp.dll)- Docker 容器,即通過 docker-compose.yaml
web: environment: - ASPNETCORE_ENVIRONMENT=Debugging
- 通過命令行的 Docker 容器
docker run -e ASPNETCORE_ENVIRONMENT=Debugging- 通過 web.config 在 IIS 中。
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="true" > <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables> </aspNetCore>
- 在 IIS 上為每個 AppPool 設置它(請參閱此處)
- 在 Linux 上通過服務定義文件(參見文件)
- 通過環境變數的 Azure 應用服務,可以為每個插槽設置,並具有用於暫存、開發、生產的不同插槽,即部署到暫存、預熱和與生產交換
- 每次執行通過
dotnet run --launch-profile Development它們都在特定範圍內更改/設置環境變數(全域、本地到容器、應用程序池內、每次執行等)。選擇一個適合您的需求。