环境

  • 操作系统 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. 20180911-Java实例01

    Java 实例 – 如何编译 Java 文件 本文我们演示如何编译 HelloWorld.java 文件,其中 Java 代码如下: public class HelloWorld { public ...

  2. [CSP-S模拟测试]:嘟嘟噜(约瑟夫问题)

    题目描述 由于众所周知的原因,冈部一直欠真由理一串香蕉.为了封上真由理的嘴,冈部承诺只要真由理回答出这个问题,就给她买一车的香蕉:一开始有$n$个人围成一个圈,从$1$开始顺时针报数,报出$m$的人被 ...

  3. [CSP-S模拟测试97]题解

    A.小盆友的游戏 感觉题解解释的很牵强啊……还是打表找规律比较靠谱 对于每个人,它构造了一个期望函数$f(x)$,设它的跟班个数为$cnt[x]$,那么令$f(x)=2^{cnt[x]}-1$(??鬼 ...

  4. 在服务器上给tomcat指定jdk版本

    export JAVA_HOME=/usr/local/jdk1.8 --路径是:Jdk8所在的目录 export CATALINA_OPTS="-Djava.awt.headless=tr ...

  5. iOS打印各种类型数据

    整型占位符说明 : %d : 十进制整数, 正数无符号, 负数有 “-” 符号; %o : 八进制无符号整数, 没有 0 前缀; %x : 十六进制无符号整数, 没有 0x 前缀; %u : 十进制无 ...

  6. Spring Boot学习第一部分(Spring 4.x)第一章(Spring 基础)

    1.spring概述 1.1.spring的简史 第一阶段:XML配置spring 1.x时代, 第二阶段:注解配置spring 2.x时代, @Controller @Service @Compon ...

  7. java 虚方法。 后面new 那个类, 就调用哪个类的方法 ,而非定义类的方案。 关于父子 类的 呵呵

    java   虚方法.     后面new  那个类, 就调用哪个类的方法 ,而非定义类的方案.  关于父子 类的   呵呵 在多态的情况下,声明为父类类型的引用变量只能调用父类中的方法,但如果此变量 ...

  8. python web自动化测试框架搭建(功能&接口)——接口用例实现

    测试用例基类: # coding=utf-8 import unittest import Logger log = Logger.Loger() class BaseCase(unittest.Te ...

  9. Dapper(一) 简介和性能

    Dapper的简介 Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的.Dapper只有一个代码文件,完全开源,你 ...

  10. redis 集群新增节点,slots槽分配,删除节点, [ERR] Calling MIGRATE ERR Syntax error, try CLIENT (LIST | KILL | GET...

    redis reshard 重新分槽(slots) https://github.com/antirez/redis/issues/5029 redis 官方已确认该bug redis 集群重新(re ...