部署asp.net核心应用程序时如何处理环境差异?

Som*_*dda 9 asp.net-core-mvc asp.net-core asp.net-core-1.0

有没有办法在部署ASP.NET Core应用程序时更改环境设置(比如使用调试/发布版本进行配置文件转换)?

在.NET Core应用程序中维护多个环境设置的最佳方法是什么(类似于<appSettings file="local.config">本地,登台和生产)?

Tse*_*eng 22

中央配置文件是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();
Run Code Online (Sandbox Code Playgroud)

所有你需要的工作是用于设置环境类型的环境变量(参见此处的文档).

如果添加AddEnvironmentVariables()到配置构建器,还可以使用覆盖的环境变量.所以如果你有一个appsettings.json

{
    "Data"  {
         "Default" {
              "ConnectionString" : "..."
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且想要通过环境变量覆盖它,你要设置一个名为"Data:Default:ConnectionString"的环境变量,它的值将覆盖appsettings.config和appsettings.Production.config中的设置(假设你.AddEnvironmentalVariables()的名字是- 之后 调用的.AddJsonFile()-使用匹配键的最后一次注册获胜,并使用环境变量中的值.

您可以在此处的官方文档中找到更多信息.

更新

由于在评论中有些人认为这是设置环境的唯一方法,因此有许多方法可以设置环境变量(大部分内容都记录在ASP.NET Core使用多个环境中),所有这些最终都归结为环境变量,只是在不同的范围内:

  1. 环境变量(全局,Windows cmd.exe set 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
    
    Run Code Online (Sandbox Code Playgroud)
  4. Docker容器通过命令行 docker run -e ASPNETCORE_ENVIRONMENT=Debugging
  5. 在IIS中通过web.config.

    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="true" >
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
    </aspNetCore>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 在IIS上为每个AppPool设置它(见这里)
  7. 在Linux上通过服务定义文件(参见文档)
  8. Azure App Service via Environment变量,可以按插槽设置,并具有不同的插槽,用于分段,开发,生产,即部署到分段,进行预热和交换生产
  9. 每次执行通过 dotnet run --launch-profile Development

它们都在特定范围内更改/设置环境变量(全局,本地到容器,在应用程序池内,每次执行等).选择一个适合您需求的产品.

  • 阅读链接的文章,它在那里说!__此文件包含特定于每个配置文件的设置Visual Studio配置为用于启动应用程序,包括应该使用的任何环境变量.__当您按F5启动/调试应用程序时,它仅在Visual Studio中使用.对于生产,您使用真实的环境变量 (3认同)