首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ASP.NET Core3.1 launchSettings.json环境变量在使用IISExpress时不会在本地开发机器上设置

ASP.NET Core3.1 launchSettings.json环境变量在使用IISExpress时不会在本地开发机器上设置
EN

Stack Overflow用户
提问于 2021-01-02 04:07:37
回答 2查看 4.5K关注 0票数 3

对于ASP.NET Core3.1应用程序,我偶然发现了一个奇怪的情况: launchSettings.json中定义的environmentVariables没有设置(例如,Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")null)。

launchsettings.json看起来如下所示:

代码语言:javascript
运行
AI代码解释
复制
{
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:60907",
      "sslPort": 44364
    }
  },
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger/index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "MyApp.WebApi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "swagger/index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "https://localhost:5001;http://localhost:5000"
    }
  }
}

我正在使用IIS Express

我调查或尝试过的事情:

  1. 在另一台机器上拉下该项目,它按预期工作:Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT""Development"
  2. 在同一台机器上运行一个非常相似的项目(几乎相同的配置),并且按预期工作。
  3. 删除了除launchsettings.json以外的所有IIS Express内容,但问题仍然相同。
  4. 使用另一个配置文件启动,并按预期工作。
  5. 关闭Visual ->删除了.vs文件夹->,重新打开VS +重新运行项目。这个问题仍然存在。
  6. 重新启动机器,问题仍然存在。
  7. 在配置文件中添加了其他环境变量,它们也会被忽略。
  8. 将工作项目与非工作项目IISExpress applicationhost.config文件进行比较,没有注意到任何差异(项目路径除外)。

我现在唯一的解决办法是在Program.cs中进行本地更改,并确保从未提交过它,但我正在寻找一个真正的解决方案:

代码语言:javascript
运行
AI代码解释
复制
string originalEnv = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", originalEnv ?? "Development");

我没有什么办法去尝试了。我假设它与IIS配置有关,但我无法在%userprofile%\My Documents\IISExpress\config\applicationhost.config中找到与环境变量有关的任何内容

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-05 03:49:05

要添加@CodeCaster,请回答为什么不能实际检索它,以及幕后发生了什么。是的,您可以使用IWebHostEnvironment检索所需的内容,但是环境名称不是asp.net核心设置的环境变量,如果您的lauchsettings.json中没有环境变量,它只是简单地读取。

环境有三个阶段:

  • 机器
  • 用户
  • 流程

现在,这里的区别是,Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")总是在进程级别,而并不是,而是在操作系统级别。当然,您可以通过使用GetEnvironmentVariable(String, EnvironmentVariableTarget)来改变这种情况,但正如@CodeCaster所提到的那样,这不会对您有所帮助。因此,使用IWebHostEnvironment获取环境名称对您的情况来说应该足够了,但是您可能已经在机器级别设置了DOTNET_ENVIROMENT,所以一定要知道您特别需要什么。

但是IWebHostEnviroment如何检索它呢?

这是因为那些“环境名称”不是环境变量。ASP.Net内核确实设置了任何类型的环境变量。相反,它将其定义为一种方式,您可以这样说,这是一个开发环境,这是一个生产环境。它可以从机器或用户环境变量中读取,但是它不会创建任何类型的变量。

所以,在使用IIS时不能读取这些环境变量的原因,首先是因为这些环境变量根本不存在。

而且,IWebHostEnvironment也不会以某种方式神奇地读取环境变量。他们只是从lauchsettings.json加载它,所以同样没有环境变量设置。

更具体地说,在源代码中:

代码语言:javascript
运行
AI代码解释
复制
            hostingEnvironment.EnvironmentName =
            options.Environment ??
            hostingEnvironment.EnvironmentName;

它要么是通过您定义的选项检索的,如果您没有定义它,那么它将保持不变。

此外,进程环境变量在终止进程后不会持续存在,因此不需要机器重新启动或清除这些变量。(一般性意见)

票数 4
EN

Stack Overflow用户

发布于 2021-01-05 01:21:06

您混淆了操作系统的环境变量和.NET核心运行时环境。他们有相同的名字,其中一个可以晋升到另一个,但他们是不一样的。

launchSettings.json中的环境变量(“运行时环境”“主机配置值”)不会被提升为操作系统的实际环境变量,后者可以通过Environment.GetEnvironmentVariable()读取。

您可以通过IHostingEnvironment.EnvironmentIWebHostEnvironment.EnvironmentName读取应用程序的IWebHostEnvironment.EnvironmentName

回顾一下:您不应该使用Environment.GetEnvironmentVariable()从操作系统的环境变量读取ASPNETCORE_ENVIRONMENT,因为.NET核心环境可以以不同的方式设置。

相反,在主机初始化期间,ASPNETCORE_ENVIRONMENT环境变量是从操作系统读取的,但是这个值可以通过不同的方式提供,即通过launchSettings.json、..vscode/unch.json或甚至可以通过AddCommandLine(args)提供,然后:

代码语言:javascript
运行
AI代码解释
复制
dotnet run --environment "Staging"

如果有的话,您的Environment.GetEnvironmentVariable()会报告错误的值。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65538919

复制
相关文章
表格:table、tr、td 标签
表格:table、tr、td的使用 一、表格语法 表格标签 <table></table> 类似于 Excel 中的表格,是一个行、列组成的二维表格。 其中 <thead> 表示表格头,<tbody> 表示表格的主体 <tr> 表示一行 <th> 表示表格头 <thead>中的一列 <td> 表示表格中<tbody>的一列 <table> <thead> <tr> <th></th> <th></th> </tr>
鹤川
2023/03/21
2.4K0
Cypress 获取table内容动态tr和td
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家的支持。
wencheng
2020/07/27
4.1K0
Cypress 获取table内容动态tr和td
javascript当中创建table的TD和创建TR的方法
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
马克java社区
2021/01/27
2K0
javascript当中创建table的TD和创建TR的方法
jQuery的基本操作
jQuery就是一个js的库· 主要分为两部分:            1·寻找元素         (选择器,筛选器)            2·操作元素          (CSS的操作,属性的操作,文本的处理) 选择器 基本  #id    #id //用于搜索的,通过元素的id属性中给定的值 描述:(查找ID为myDiv的元素) HTML代码: <div id="notMe"><p>id = "notMe"</p></div> <div id="myDiv">id="m
Wyc
2018/09/11
7.6K0
Jquery简介选择的
Jquery一个js相框(程序代码相结合)这是一个程序开发过程中的半成品;分类似该框架EXTJS。
全栈程序员站长
2022/07/06
1.6K0
Web前端JQuery面试题(一)
匹配包含给定文本的元素 匹配所有不包含子元素或者文本的空元素 匹配含有选择器所匹配的元素的元素 匹配含有子元素或者文本的元素
达达前端
2019/07/03
2.9K0
Web前端学习笔记之jQuery选择器
经过一晚上的查找整理,终于整理出一套应该算最全面的JQuery选择过滤器的方法了。所有代码均经过测试。 首先HTML代码
Jetpropelledsnake21
2018/08/01
1.4K0
jQuery对象的查找
在jQuery中,我们可以使用各种方法来查找和选择特定的元素或元素集合。这些查找方法使我们能够根据不同的选择器、属性、关系等条件来定位和操作元素。
堕落飞鸟
2023/05/18
7570
高质量jQuery代码的十二条经验
1、正确引用jQuery 尽量在body结束前才引入jQuery,而不是在head中。 借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。 如果在</body>前引入script文件的话,就不用写document.ready了,因为这时执行js代码时DOM已经加载完毕了。 <body> <script src="http://lib.sinaapp.com/js/jquery11/1.8/jquery.min.js"></script>
JKXQJ
2018/04/18
1.2K0
学习jQuery这一篇就够了
jQuery 是一个高效精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作事件处理动画和 Ajax 操作更加简单。目前超过 90% 的网站都使用了 jQuery 库,jQuery 的宗旨:写的更少,做得更多!
程序员Leo
2023/08/07
1.1K0
学习jQuery这一篇就够了
Web前端开发JQuery框架笔记
ID选择器: 通过使用简单的$(#id)标识前缀,实现快速匹配指定ID的元素对象,具体用法如下.
王瑞MVP
2022/12/28
11.9K0
与Ajax同样重要的jQuery(1)
jQuery框架 jQuery 1.4 是企业主流版本,从jQuery1.6 开始引入大量新特性。最新版本 2.1.1,这里讲解以1.8.3为主(新版本主要是浏览器兼容问题以及新特性) jQuery 提供 jquery-1.8.3.js 和 jquery-1.8.3.min.js jquery-1.8.3.js jQuery框架源码,没有被精简,体积较大 (主要用来研究 jQuery源码),企业开发时,需要导入 jquery-1.8.3.min.js (精简过) 1.jQuery程序快速入门 window.
Java帮帮
2018/03/19
10K0
与Ajax同样重要的jQuery(1)
jQuery
jQuery基础 1、    jQuery其实就是一个类库,集成了DOM/BOM/JavaScript的类库 http://jquery.cuishifeng.cn/这个网站里有所有的jQuery
coders
2018/01/04
4.6K0
jQuery
01-老马jQuery教程-jQuery入口函数及选择器
1.什么是jQuery? 1.1 jQuery介绍 jQuery是一个轻型、快速的、小巧的功能丰富的JavaScript类库。本质就是一堆js的函数的组合。对原生DOM操作做了一些非常有用的封装,可以
老马
2018/01/05
2.6K0
01-老马jQuery教程-jQuery入口函数及选择器
Web阶段:第五章:JQuery库
点击:API文档下载 Jquery介绍 1.什么是JQuery ? jQuery,顾名思义,也就是JavaScript和查询(Query),它就是辅助JavaScript开发的js类库。 2.JQue
Java廖志伟
2022/09/28
26.4K0
Web阶段:第五章:JQuery库
01-老马jQuery教程-jQuery入口函数及选择器
前言 这套jQuery教程是老马专门为寒门子弟而录制,希望大家看到后能转发给更多的寒门子弟。视频都是免费,请参考课程地址:https://chuanke.baidu.com/s5508922.html
老马
2017/12/20
2.4K0
【PTA】查找满足条件的最后一个整数 (15分)
本题要求编写程序,将输入的n个整数存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出满足条件的最后一个元素的下标(下标从0开始);如果没有找到,输出“Not Found”。
Regan Yue
2021/09/16
1K0
重学SpringBoot系列之整合静态资源与模板引擎
当然,可以通过spring.resources.static-locations配置指定静态文件的位置。但是要特别注意,一旦自己指定了静态资源目录,系统默认的静态资源目录就会失效。所以系统默认的就已经足够使用了,尽量不要自定义。
大忽悠爱学习
2021/12/07
5.2K0
重学SpringBoot系列之整合静态资源与模板引擎
在静态页面内实现关键字搜索并高亮显示
在静态页面内实现关键字搜索并高亮显示,效果如图: 示例代码如下,可以直接保存为一个html文件使用。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>页面内实现搜索并高亮</title> <style type="text/css"> .tb { width: 540px; margin:10px auto;
编程随笔
2022/09/08
1.1K0
在静态页面内实现关键字搜索并高亮显示
JQuery 入门学习(完结)
伴随着我的假期即将完结的时间,这几篇Jquery文档也算带领大家熟悉了Jquery的代码编写。最后一篇是对Jquery的实际应用,以及一些平时我注意到的细节。最后对Jquery进行总结。
phith0n
2020/10/15
9590

相似问题

在python中对2dnumpy数组进行反向排序

10

对wav录制python进行下采样

123

在Python中绘制之前对numpy向量进行下采样

216

对一维numpy数组进行下采样

3536

用平均法对Python中的numpy图像数组进行下采样

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文