• NetCore中的环境变量的值取自于哪里?


    环境

    • 操作系统 win10
    • IIS 10
    • net core 2.2 ,net core 3.0

    分别生成了三个环境变量的配置文件:

    20191118-evn-vs-file.png

    以及测试代码:

    20191118-evn-console-code.png

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.Run(async (context) =>
        {
    
            context.Response.ContentType = "text/plain; charset=utf-8";
    
            await context.Response.WriteAsync($"进程内环境变量:env.EnvironmentName={env.EnvironmentName}
    ");
    
            var myEnvironmentValue = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", EnvironmentVariableTarget.Machine);
    
            await context.Response.WriteAsync($"操作系统环境变量 ASPNETCORE_ENVIRONMENT={myEnvironmentValue ?? "没有找到"}
    ");
    
            var connectionString = Configuration["ConnectionStrings:RicoDbContext"];
    
            await context.Response.WriteAsync($"数据库库连接字符串:{connectionString}
    ");
    
            var appId = Configuration["AppId"];
    
            await context.Response.WriteAsync($"appId={appId ?? "没找到"}
    ");
        });
    }
    

    dotnet命令和环境变量

    dotnet run

    首先来使用dotnet run命令运行一下,命令运行在如下目录:

    20191119103308-diretory.png

    >dotnet run
    Hosting environment: Development
    Content root path: D:2-github
    ocklee2015RicoNetCore00-NetCoreBaseSampleS01-MultiEnviromentConfig
    Now listening on: http://localhost:5001
    Application started. Press Ctrl+C to shut down.
    

    为啥环境是Development呢?,因为是按顺序读取launchSettings第一个值,如果将Staging放第一个就不一样了。

    20191119-launchsettings.png

    可以看到结果,环境变量变更了:

    >dotnet run
    Hosting environment: Staging
    Content root path: D:2-github
    ocklee2015RicoNetCore00-NetCoreBaseSampleS01-MultiEnviromentConfig
    Now listening on: http://localhost:5001
    Application started. Press Ctrl+C to shut down.
    

    dotnet run --launch-profile

    也可以使用dotnet run --launch-profile <name>自定义启动配置文件:

    >dotnet run --launch-profile Production
    Hosting environment: Production
    Content root path: D:2-github
    ocklee2015RicoNetCore00-NetCoreBaseSampleS01-MultiEnviromentConfig
    Now listening on: http://localhost:5001
    Application started. Press Ctrl+C to shut down.
    

    浏览器打开http://localhost:5001,可以看到效果:

    20191119-result.png

    env.EnvironmentName的值是Production刚才自定义的环境,操作系统的全局环境变量ASPNETCORE_ENVIRONMENT值是Production也是对的,因为我设置的就是这个:

    20191119-system-env.png

    切换一下当前窗口的启动配置文件:

    >dotnet run --launch-profile Staging
    Hosting environment: Staging
    Content root path: D:2-github
    ocklee2015RicoNetCore00-NetCoreBaseSampleS01-MultiEnviromentConfig
    Now listening on: http://localhost:5001
    Application started. Press Ctrl+C to shut down.
    

    20191119-result2.png

    可以看到读取的配置文件只受当前窗口的启动配置文件影响,即launchSettings文件。不受全局环境变量影响。

    设置当前会话环境变量

    在官方文档在 ASP.NET Core 中使用多个环境介绍中,可以在当前会话窗口的设置环境变量,使用以下命令:

    set ASPNETCORE_ENVIRONMENT=Development
    

    操作结果如下:

    >set ASPNETCORE_ENVIRONMENT=Development
    
    >dotnet run
    Hosting environment: Staging
    Content root path: D:2-github
    ocklee2015RicoNetCore00-NetCoreBaseSampleS01-MultiEnviromentConfig
    Now listening on: http://localhost:5001
    Application started. Press Ctrl+C to shut down.
    

    **当前窗口的全局环境变量似乎没有起作用!! **

    部署在IIS上

    我将以上的项目发布成IIS部署包,结果如下:

    20191119-iis-result.png

    可以看到使用的环境变量是Development而不是默认的Production,全局环境变量是Production也没起什么作用?

    发布配置文件与环境变量

    官方说可以使用以下配置IIS的环境变量:
    20191119--mic-pubxml.png

    对于net core 2.2版本来说一直报错HTTP Error 502.5 - Process Failure(详见HTTP Error 500.30 - ANCM In-Process Start Failure)

    疑问

    1. 可以确定dotnet run命令环境变量加载的是启动配置文件。
    2. iis 的部署环境环境变量加载于哪里?
    3. 全局环境变量,web.config环境量,启动配置文件launchSettings这三个取值优先级是怎样的?
  • 相关阅读:
    Unity3D-ScrollRect 各参数的代码引用以及作用
    Unity3D-坐标转换笔记
    angularJS中XHR与promise
    angularJS中的事件
    angularJS中如何写服务
    angularJS中如何写自定义指令
    angularJS内置指令一览
    angularJS中如何写控制器
    理解angularJS中作用域$scope
    如何写angularJS模块
  • 原文地址:https://www.cnblogs.com/ricolee/p/where-env-come-from.html
Copyright © 2020-2023  润新知