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


    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:02-github
    ocklee2015RicoNetCore000-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:02-github
    ocklee2015RicoNetCore000-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:02-github
    ocklee2015RicoNetCore000-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:02-github
    ocklee2015RicoNetCore000-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:02-github
    ocklee2015RicoNetCore000-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这三个取值优先级是怎样的?

    本文来自博客园,作者:.net&new,转载请注明原文链接:https://www.cnblogs.com/wugh8726254/p/15192287.html

  • 相关阅读:
    C# 实现list=list.OrderBy(q=>q.字段名).ToList(); 按多个字段排序
    c# dev gridcontrol 焦点行失去焦点有背景颜色
    c# dev gridcontrol format rule的使用
    鼠标模拟左键单击
    IDEA快捷键/本文仅供自己参考使用如有侵权立删
    Git学习笔记
    bootstrap帮助文档
    bootstrap笔记
    关于Action模型驱动无法获取属性的问题
    SSH整合hibernate无法正常自动生成表
  • 原文地址:https://www.cnblogs.com/wugh8726254/p/15192287.html
Copyright © 2020-2023  润新知