环境

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

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

以及测试代码:

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}\n"); var myEnvironmentValue = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", EnvironmentVariableTarget.Machine); await context.Response.WriteAsync($"操作系统环境变量 ASPNETCORE_ENVIRONMENT={myEnvironmentValue ?? "没有找到"}\n"); var connectionString = Configuration["ConnectionStrings:RicoDbContext"]; await context.Response.WriteAsync($"数据库库连接字符串:{connectionString}\n"); var appId = Configuration["AppId"]; await context.Response.WriteAsync($"appId={appId ?? "没找到"}\n");
});
}

dotnet命令和环境变量

dotnet run

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

>dotnet run
Hosting environment: Development
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.

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

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

>dotnet run
Hosting environment: Staging
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-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\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.

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

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

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

>dotnet run --launch-profile Staging
Hosting environment: Staging
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.

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

设置当前会话环境变量

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

set ASPNETCORE_ENVIRONMENT=Development

操作结果如下:

>set ASPNETCORE_ENVIRONMENT=Development

>dotnet run
Hosting environment: Staging
Content root path: D:\02-github\rocklee2015\RicoNetCore\000-NetCoreBaseSample\S01-MultiEnviromentConfig
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down.

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

部署在IIS上

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

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

发布配置文件与环境变量

官方说可以使用以下配置IIS的环境变量:

对于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这三个取值优先级是怎样的?

NetCore中的环境变量的值取自于哪里?的更多相关文章

  1. Windows系统中path环境变量详解

    在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ...

  2. bootargs中的环境变量说明和一些常用的uboot命令

    bootargs中的环境变量说明和一些常用的uboot命令 一些常见的uboot命令:Help [command]在屏幕上打印命令的说明Boom [addr]启动在内存储器的内核Tftpboot通过t ...

  3. 怎样在Ubuntu中设置环境变量

    首先启动终端. 单击屏幕左上角的Ubuntu图标,在弹出的窗口中点击搜索栏,输入"terminal", 稍等片刻,终端就会赫然在目!二话不说,直接点击!     然后打开环境设置文 ...

  4. 在PHP中管理环境变量

    在PHP中管理环境变量 现在我们都能用很多个编程语言开发,当我开始熟悉PHP时,我会忽略其它语言的特点.我用过其他语言(比如Node.js),但在PHP中没有看到一种轻松控制设置环境变量的方法,特别是 ...

  5. 深入理解Java中配置环境变量

    深入理解Java中配置环境变量 配置的目的: 本来只在安装JDK的bin目下能运行java.exe,javac.exe,jar.exe,javadoc.exe等Java开发工具包命令,我们现在想让在所 ...

  6. “使用IDEA,配置文件是yml,无法获取[环境变量],值是null”的问题处理

    为了便于隐藏用户名和密码,我们有时会用到“环境变量”. Spring Boot提供了很好的机制,可以在配置文件中,如application.yml书写以下格式,然后在代码中@Value就可以获取“环境 ...

  7. Linux中PATH环境变量的作用和使用方法

    关于PATH的作用:PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根 ...

  8. Laravel 学习 .env文件 getenv 获得环境变量的值

    Laravel 学习 .env文件 getenv 获得环境变量的值  我们还需要对应用的 .env 文件进行设置,为应用指定数据库名称 sample. .env . . . DB_DATABASE=s ...

  9. 在docker镜像中加入环境变量

    原文链接 前言 reference:https://vsupalov.com/docker-build-time-env-values/ 很多时候,我们需要在docker镜像中加入环境变量,本人了解的 ...

随机推荐

  1. 学习笔记11 EF查询相当于sql 中的 where in

    两种写法 1. int[] Ids={1,2,3} DBContainer db=new DBContainer(); var list=db.表明.where(a=>Ids.Contains( ...

  2. margin/padding百分比值的计算

    1.百分比介绍 一般元素的宽度用百分比值表示时,元素的总宽度包括外边距取决于父元素的width,这样可能得到"流式"页面,即元素的外边距会扩大或缩小以适应父元素的实际大小.如果对这 ...

  3. php heredoc的用法详解

    Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术.但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实 ...

  4. ThreadPoolExecutor实现异步多线程

    import time from concurrent.futures import ThreadPoolExecutor executor = ThreadPoolExecutor(max_work ...

  5. DbWrench002--建模以及数据正向工程和反向工程的具体操作

    DbWrench--建模以及数据正向工程和反向工程 参考博客:https://my.oschina.net/u/3459265/blog/1611999 一.数据正向工程 在建模工作中画好的表与表之间 ...

  6. IDF-CTF-图片里的英语 writeup

    题目链接:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=34 一恒河沙中有三千世界,一张图里也可以有很多东西. ...

  7. html5_websql

    var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);  var msg;  db.transaction(function ...

  8. Struts2之上传

    单文件上传 上传页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  9. 中标麒麟V6.0安装 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

    在中标麒麟6.0上安装mysql, 1.先从官网(https://dev.mysql.com/downloads/mysql/5.7.html#downloads)下载 . 我的选择如上图. 2.下载 ...

  10. redis缓存架构-03-redis下的replication以及master+slave

    1.master和slave的读写分离(水平扩容支持读高并发) 2.master主从复制流程 master开始复制给slave前的认证流程 master向slave复制流程 2.1 无磁盘化复制配置 ...