.NET Core 环境变量详解

这篇具有很好参考价值的文章主要介绍了.NET Core 环境变量详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

.NET Core 环境变量详解

一、概述

软件从开发到正式上线,在这个过程中我们会分为多个阶段,通常会有开发、测试、以及上线等。每个阶段对应的环境参数配置我们会使用不同的参数。比如数据库的连接字符串,开发环境一般我们都是连接的测试库。以前这种情况通常是 COPY 两个同名的配置文件来进行处理,然后在本地就使用本地的配置,生产环境就使用生产环境的配置文件,十分麻烦。而 ASP .NET CORE 利用环境变量来动态配置 JSON 文件对类似这种需求提供了支持,方便我们更好的去做这些事情。

二、ASP.NET Core环境

ASP.NET Core使用ASPNETCORE_ENVIRONMENT来标识运行时环境。。

ASP.NET Core使用环境变量基于运行时环境配置应用程序行为。

软件开发环境在软件开发组织中,我们通常具有以下开发环境。

  • Development->开发环境
  • Staging->演示(模拟、临时)环境
  • Production->生产环境

为什么我们需要不同的开发环境,如开发,演示,生产等等环境。

开发环境:我们的软件开发人员通常将此环境用于我们的日常开发工作。我们希望在开发环境中加载非缩小的 JavaScript 和 CSS 文件,以便于调试。类似地,如果存在未处理的异常,我们需要开发人员异常页面,以便我们可以理解异常的根本原因并在需要时进行修复。

演示环境:许多组织或者公司尝试使其演示环境尽可能与实际生产环境保持一致。此环境的主要原因是识别任何与部署相关的问题。此外,如果您正在开发 B2B(企业对企业)应用程序,您可能正在与其他服务提供商系统连接。许多组织通常设置其临时环境以与服务提供商进行交互,以进行完整的端到端测试。 我们通常不会在演示环境中进行故障排除和调试,同时为了获得更好的性能,我们需要加载缩小的 JavaScript 和 CSS 文件。 如果存在未处理的异常,则显示用户友好的错误页面而不是开发人员异常页面。用户友好的错误页面不包含任何技术细节。它包含如下通用消息 :“出现问题,请使用下面的联系方式发送电子邮件,聊天或致电我们的应用程序支持”

生产环境:我们用于日常业务的实际环境。应配置生产环境以获得最大的安全性和性能。因此,加载缩小的 JavaScript 和 CSS 文件以提高性能。为了更好的安全性,请显示用户友好错误页面而不是开发人员异常页面。Developer Exception 页面上的技术细节对最终用户没有意义,恶意用户可以使用它们进入您的应用程序。

在Asp.NET Core项目中的Startup.cs文件,可以使用相应的方法来控制应用程序的行为。以下是创建示例程序时Startup.cs文件生成的默认代码:

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7. else
  8. {
  9. app.UseExceptionHandler("/Home/Error");
  10. }
  11. app.UseStaticFiles();
  12.  
  13. app.UseRouting();
  14.  
  15. app.UseAuthorization();
  16.  
  17. app.UseEndpoints(endpoints =>
  18. {
  19. endpoints.MapControllerRoute(
  20. name: "default",
  21. pattern: "{controller=Home}/{action=Index}/{id?}");
  22. });
  23. }

其中 IWebHostEnvironment类型的变量表示的是当前应用程序运行的环境,ASP.Net Core提供了四个扩展方法,用于检测 “ASPNETCORE_ENVIRONMENT”当前的值。

IsDevelopment()
IsStaging()
IsProduction()
IsEnvironment()

如果需要检查应用程序是否在特定环境中运行,可以使用 env.IsEnvironment(“environmentname”) ,该方法忽略大小写(请不要使用 env.EnvironmentName == “Development” 来检查环境)。

过上面的代码,我们可以知道,如果当前是开发环境,使用UseDeveloperExceptionPage()方法启用开发环境的错误页面处理,这样有利于我们在开发过程中调试程序;但是在生产环境中我们不希望启用这些功能,而是将出错页面指向路径“/Home/Error”,给用户显示友好的错误界面。

launchSettings.json文件

ASP.Net Core包含一个launchSettings.json的新文件,您可以在项目中“Properties”文件夹中找到该文件:

.NET Core 环境变量详解

此文件设置了Visual Studio可以启动的不同环境,以下是示例项目中launchSettings.json文件生成的默认代码: 

  1. {
  2. "iisSettings": {
  3. "windowsAuthentication": false,
  4. "anonymousAuthentication": true,
  5. "iisExpress": {
  6. "applicationUrl": "http://localhost:53445",
  7. "sslPort": 0
  8. }
  9. },
  10. "profiles": {
  11. "IIS Express": {
  12. "commandName": "IISExpress",
  13. "launchBrowser": true,
  14. "environmentVariables": {
  15. "ASPNETCORE_ENVIRONMENT": "Development"
  16. }
  17. },
  18. "WebApplication1": {
  19. "commandName": "Project",
  20. "dotnetRunMessages": "true",
  21. "launchBrowser": true,
  22. "applicationUrl": "http://localhost:5000",
  23. "environmentVariables": {
  24. "ASPNETCORE_ENVIRONMENT": "Development"
  25. }
  26. }
  27. }
  28. }

在这里,有两个配置节点:“IIS Express”、“WebApplication1”,这两个节点,分别对应Visual Stuido的开始调试按钮的下拉选项:

.NET Core 环境变量详解

aunchSettings.json 文件用于设置在 Visual Stuido 运行应用程序的环境。我们也可以添加节点,该节点名称会自动添加到 Visual Stuido 调试按钮的下拉选项中。

  1. {
  2. "iisSettings": {
  3. "windowsAuthentication": false,//是否启用Windows身份验证
  4. "anonymousAuthentication": true,//是否启用匿名身份验证
  5. "iisExpress": {
  6. "applicationUrl": "http://localhost:53445",//应用启动的Url路径。
  7. "sslPort": 0 //启用SSL的端口
  8. }
  9. },
  10. "profiles": {
  11. "IIS Express": {
  12. "commandName": "IISExpress",
  13. "launchBrowser": true, //是否在浏览器中启动
  14. "environmentVariables": { //将环境变量设置为键/值对
  15. "ASPNETCORE_ENVIRONMENT": "Development"
  16. }
  17. },
  18. "WebApplication1": {
  19. "commandName": "Project",
  20. "dotnetRunMessages": "true",
  21. "launchBrowser": true,
  22. "applicationUrl": "http://localhost:5000",
  23. "environmentVariables": {
  24. "ASPNETCORE_ENVIRONMENT": "Development"
  25. }
  26. }
  27. }
  28. }

其中commandName可以指定要启动的Web服务器。commandName可以是以下任意一项:

  • IISExpress
  • IIS
  • Project

更多属性的详细信息,可通过此链接了解:http://json.schemastore.org/launchsettings 。

在Visual Studio项目属性的“调试”选项卡提供了一个GUI,用于编辑launchSettings.json文件。在重新启动Web服务器之前,对项目配置文件所做的更改可能不会生效。必须重新启动Kestrel,才能检测到对其环境所做的更改。

.NET Core 环境变量详解

要取得系统变量ASPNETCORE_ENVIRONMENT,在3.0版本之前可以通过注入IHostingEnvironment来获取,3.x到5.0版本可以通过IWebHostEnvironment 来获取,请看如下代码片段:

  1. public class Startup
  2. {
  3. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  4. {
  5. if (env.IsDevelopment())
  6. {
  7. }
  8.  
  9. app.Run(async (context) =>
  10. {
  11. await context.Response.WriteAsync(
  12. $"EnvironmentName: {env.EnvironmentName},IsDevelopment: {env.IsDevelopment()}"
  13. );
  14. });
  15. }
  16. }

网站启动后IWebHostEnvironment会从ASPNETCORE_ENVIRONMENT中获取内容,该变量可以是我们需要的任何值,是可以自定义的。比如我们定义一个名为Test环境:

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  2. {
  3. env.EnvironmentName = "test";
  4.  
  5. if (env.IsDevelopment())
  6. {
  7. //TODO
  8. }else if (env.IsEnvironment("text"))
  9. {
  10. //TODO
  11. }
  12.  
  13. app.Run(async (context) =>
  14. {
  15. await context.Response.WriteAsync(
  16. $"EnvironmentName: {env.EnvironmentName},IsDevelopment: {env.IsDevelopment()}"
  17. );
  18. });
  19. }
  1. 注:在 Windows macOS 上,环境变量和值不区分大小写。 默认情况下,Linux 环境变量和值要区分大小写

三、应用事例

通过上面的讲解我们对.net core中环境变量已经有了比较深入的理解,现在我们就以一个比较常用例子:在不同环境下数据库连接串的获取进行实战演练。

首先在launchSettings.json定义不同的环境,如下所示:

  1. {
  2. "iisSettings": {
  3. "windowsAuthentication": false,
  4. "anonymousAuthentication": true,
  5. "iisExpress": {
  6. "applicationUrl": "http://localhost:53445",
  7. "sslPort": 0
  8. }
  9. },
  10.  
  11. "profiles": {
  12. "IIS Express": {
  13. "commandName": "IISExpress",
  14. "launchBrowser": true,
  15. "environmentVariables": {
  16. "ASPNETCORE_ENVIRONMENT": "Development"
  17. }
  18. },
  19. "WebApplication-Development": {
  20. "commandName": "Project",
  21. "dotnetRunMessages": "true",
  22. "launchBrowser": true,
  23. "applicationUrl": "http://localhost:5000",
  24. "environmentVariables": {
  25. "ASPNETCORE_ENVIRONMENT": "Development"
  26. }
  27. },
  28. "WebApplication-Production": {
  29. "commandName": "Project",
  30. "dotnetRunMessages": "true",
  31. "launchBrowser": true,
  32. "applicationUrl": "http://localhost:5000",
  33. "environmentVariables": {
  34. "ASPNETCORE_ENVIRONMENT": "Production"
  35. }
  36. }
  37. }
  38. }

.NET Core 环境变量详解

分别指定了不同的环境,每一种环境对应一个配置文件,如下图所示:

.NET Core 环境变量详解

在不同的配置文件中定义一个配置项,取值不同,如下图所示:

.NET Core 环境变量详解

.NET Core 环境变量详解

在Startup.cs代码中加入输出:得到不同下运行配置文件得到对应的值,如下:

  1. Console.WriteLine("当前环境下的连接:" + Configuration.GetSection("ConnectionString:Default").Value);

根据不同的环境运行,看下设置的效果:

.NET Core 环境变量详解

以开发环境运行:

.NET Core 环境变量详解

以生产环境运行:

.NET Core 环境变量详解

通过这个简单的事例,已经了解了环境的配置方式与使用过程,相信大家以此为基础,可以应用到实际的项目中。在ASP.NET Core中,开发者可以使用环境变量轻而易举控制应用程序在不同的环境中的行为。

 

参考文章:

在 ASP.NET Core 中使用多个环境文章来源地址https://www.toymoban.com/news/detail-420079.html

到了这里,关于.NET Core 环境变量详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【.NET Core】反射(Reflection)详解(三)

    反射提供了对已封装的程序集、模型和类型的对象一种动态访问方法。反射包含动态加载程序集的Assembly类、程序集中模块访问的Module类、对类信息Type类、构造函数信息ConstructorInfo类、方法信息MethodInfo类、字段信息FieldInfo类、事件信息EventInfo类、属性信息PropertyInfo类、参数信

    2024年02月03日
    浏览(31)
  • 【.NET Core】可为null类型详解

    null 是表示不引用任何对象的空引用的文字值。 null 是引用类型变量的默认值。普通值类型不能为 null ,可为 空的值类型 除外 可为 null 值类型 T? 表示其基础值类型T的所有值及额外的null值。基础值类型 T 本身不能是可为空的值类型。 任何可为空的值类型都是泛型 Syst

    2024年02月01日
    浏览(38)
  • Ubuntu 安装.net6.0+配置 .net环境变量

    wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh sudo chmod +x ./dotnet-install.sh 该脚本默认安装最新的 长期支持 (LTS) SDK 版本,即 .NET 6。 若要安装最新版本(可能不是 LTS) 版本的 (版本),请使用  --version latest  参数。 ./dotnet-install.sh --version latest 若要安装 .NET 运行时而非 SDK,

    2024年02月09日
    浏览(42)
  • 【.NET Core】 多线程之(Thread)详解

    线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及复杂且耗时的操作,那么设置不同的线程执行路径往往事半功倍,让每个线程执行特定的工作任务。 线程是一个 轻量级进程 。一个使用线程的常见实例是操作系统中并行编程的实现

    2024年01月20日
    浏览(38)
  • React + ASP.NET Core 项目笔记一:项目环境搭建(一)

    安装dotnet core sdk 安装Node.js + npm 选择喜欢的位置新建文件夹, 然后开始摸鱼 然后进行下一步 在终端或cmd中直接运行 VS Code 如下图 我们新初始化的项目并没有安装包,特别是前端部分,所以需要先安装 使用以下语句运行 顺利的话会出现这样的结果 之后点开跳转到网页看看

    2024年02月10日
    浏览(38)
  • 【c#,.NET】Entity Framework Core基础详解

    目录   一、EF Core概述 1.1 什么是ORM?  1.2 EF Core的性能怎么样  二、EF Core入门 2.1 什么是Migration数据库迁移: 2.2  EF Core数据的增删改查 2.2.1 增加数据 2.2.2 查询数据  2.2.3 修改和删除数据 三、EF Core的实体类配置 3.1 约定大于配置 3.2 EF Core两种配置方式 3.2.1 Data Annotation 3.2.2 

    2024年02月04日
    浏览(62)
  • 【.NET Core】Lazy<T> 实现延迟加载详解

    延迟初始化是一种将对象的创建延迟到第一次需要用时的技术。简而言之,就是对象的初始化发生在第一次需要调用的时候执行。通常所说的延迟初始化和延迟实例化的意思是相同。通过使用延迟基础,可以避免应用程序不必要的计算和内存消耗。 从.NET 4.0开始,可以使用

    2024年01月21日
    浏览(40)
  • 2.1 .net 8 ASP.NET Core Web API - Controller详解

    书接上回,上节我们留了几个问题,即: 1、接口Hello的名字究竟怎么来的? 2、我们如果想把接口改成其他的名称,应该怎么做? 3、我们继承ControllerBase,以及[Route(“[controller]”)]属性,又是分别起到什么作用? 需要解决以上几个问题,我们就要继续深入研究Controller相关的

    2024年02月20日
    浏览(47)
  • Azure + React + ASP.NET Core 项目笔记一:项目环境搭建(一)

    安装dotnet core sdk 安装Node.js + npm 选择喜欢的位置新建文件夹, 然后开始摸鱼 然后进行下一步 在终端或cmd中直接运行 VS Code 如下图 我们新初始化的项目并没有安装包,特别是前端部分,所以需要先安装 使用以下语句运行 顺利的话会出现这样的结果 之后点开跳转到网页看看

    2024年02月09日
    浏览(41)
  • Taurus .Net Core 微服务开源框架:Admin 插件【2】 - 系统环境信息管理

    继上篇:Taurus .Net Core 微服务开源框架:Admin 插件【1】 - 微服务节点管理 本篇继续介绍下一个内容:  基本信息如上图,重点的几个参数: 其它就不另外单独翻译了。 默认 NetCore 整体程序集加载的有点多,达100多个。 默认网关的应用程序的程序集是3个,其余全是公共运行

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包