Asp.net-Core

部署asp.net核心應用時如何處理環境差異?

  • March 8, 2019

部署 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 中),最終都歸結為環境變數,只是在不同的範圍內:

  1. 環境變數(全域,Windows cmd.exeset ASPNETCORE_ENVIRONMENT=Development$Env:ASPNETCORE_ENVIRONMENT = "Development"在 powershell 上,export ASPNETCORE_ENVIRONMENT = Development在 linux 上)
  2. 每個命令環境變數(即 linux: ASPNETCORE_ENVIRONMENT=Production dotnet MyApp.dll
  3. Docker 容器,即通過 docker-compose.yaml
web:
   environment:
   - ASPNETCORE_ENVIRONMENT=Debugging
  1. 通過命令行的 Docker 容器docker run -e ASPNETCORE_ENVIRONMENT=Debugging
  2. 通過 web.config 在 IIS 中。
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="true" >
 <environmentVariables>
   <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
 </environmentVariables>
</aspNetCore>
  1. 在 IIS 上為每個 AppPool 設置它(請參閱此處
  2. 在 Linux 上通過服務定義文件(參見文件
  3. 通過環境變數的 Azure 應用服務,可以為每個插槽設置,並具有用於暫存、開發、生產的不同插槽,即部署到暫存、預熱和與生產交換
  4. 每次執行通過dotnet run --launch-profile Development

它們都在特定範圍內更改/設置環境變數(全域、本地到容器、應用程序池內、每次執行等)。選擇一個適合您的需求。

引用自:https://stackoverflow.com/questions/37873964