.NET Core 环境变量详解

.NET Core 环境变量详解

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

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”文件夹中找到该文件:

image-20210318145513843

此文件设置了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的开始调试按钮的下拉选项:

Visual Stuido的开始调试按钮的下拉选项

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,才能检测到对其环境所做的更改。

image-20210318151112999

要取得系统变量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. }

launchSettings.json

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

launchSettings.json

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

appsettings.Development.json

appsettings.Production.json

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

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

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

image-20210318161838544

以开发环境运行:

以开发环境运行

以生产环境运行:

以生产环境运行

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

 

参考文章:

在 ASP.NET Core 中使用多个环境

原文链接:https://www.cnblogs.com/88223100/p/Detailed-explanation-of-NET-Core-environment-variables.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET Core 环境变量详解 - Python技术站

(0)
上一篇 2023年4月25日
下一篇 2023年4月25日

相关文章

  • 利用Arduino制作音乐播放+随节奏闪光仪器实现

    1.实验器材 Arduino开发板,面包板一块,杜邦线若干,LED灯若干,220欧电阻若干,蜂鸣器一个。 2.实验操作 将六个led灯的正极依次接到arduino板I/O接口的2-7口, 电源负极依分别接一个220欧的电阻 。 整体负极接arduino板的GND接口。 蜂鸣器正极接arduino板I/O接口的8口,负极接GND。 3.代码实现 int buz…

    C# 2023年4月25日
    00
  • 探讨如何配置SQL2008,让其允许C#远程外部连接的方法详解

    探讨如何配置SQL2008,让其允许C#远程外部连接的方法: 配置SQL2008的网络设置 打开”SQL Server Configuration Manager”,选择 “SQL Server Network Configuration”,然后选择SQL Server服务的名称。 选择 “TCP/IP” 选项卡。 若TCP/IP未启用,则右键选择 “TCP…

    C# 2023年6月2日
    00
  • ASP.NET Core Mvc中空返回值的处理方法详解

    让我来详细讲解一下关于ASP.NET Core Mvc中空返回值的处理方法。 问题描述 在ASP.NET Core Mvc中,我们在控制器方法中通常使用返回类型为ActionResult或者是ActionResult。但是在某些情况下,我们希望不返回任何数据,或者只返回HTTP状态码。这时候就需要处理空返回值的情况了。 解决方案 在ASP.NET Core …

    C# 2023年5月31日
    00
  • C# 进制转换的实现(二进制、十六进制、十进制互转)

    下面我将为大家详细讲解 C# 中的进制转换实现,内容包括二进制、十六进制、十进制互转的方法。 前置知识 在进行进制转换之前,我们需要了解以下几个概念: 二进制:以 0、1 为基础的计数系统。 十进制:以 0-9 为基础的计数系统。 十六进制:以 0-9 和 A-F 为基础的计数系统。 进位:某一位达到基数时,进位到前一位并加 1。 借位:某一位借位时,向前一…

    C# 2023年6月7日
    00
  • ASP.net(c#)用类的思想实现插入数据到ACCESS例子

    让我们来详细讲解一下如何用类的思想实现插入数据到 ACCESS 数据库。这里我们使用 ASP.NET (C#)编写代码。 1. 创建与数据库连接的类 在 ASP.NET 中,我们使用 System.Data.OleDb 命名空间来操作 ACCESS 数据库。首先,我们需要创建一个类来封装与数据连接相关的操作。 using System.Data.OleDb;…

    C# 2023年6月3日
    00
  • C# DateTime.AddSeconds()方法: 将指定的秒数加到指定的日期上

    DateTime.AddSeconds()方法简介 在 C# 中,DateTime 类型的实例代表了日期和时间值。AddSeconds() 是 DateTime 类型提供的一个方法,它的作用是向 DateTime 对象添加指定的秒数。它会返回一个新的 DateTime 对象,表示当前对象加上指定秒数后的日期和时间。 方法定义如下: public DateTi…

    C# 2023年4月19日
    00
  • C#中Write()和WriteLine()的区别分析

    C#中Write()和WriteLine()的区别分析 在C#编程中,我们常常会用到Write()和WriteLine()两个方法来输出文本内容。它们的使用方式和输出结果都有些不同,下面我们对它们进行区别分析。 Write()方法 Write()方法是用来输出文本的,它会将输出的文本放在同一行上。 使用方法 我们来看一个基本的输出示例: Console.Wr…

    C# 2023年6月1日
    00
  • c#委托与事件(详解)

    C#委托与事件(详解) 什么是委托? 在C#中,委托是一个类,用于指向和调用一个或多个方法。可以将委托看做是方法的类型。通过委托,我们可以在运行时确定要调用哪个方法,而无需提前确定调用哪个方法。 如何定义委托? 在C#中,委托的定义非常简单,只需使用delegate关键字即可。 delegate 返回类型 委托名称(参数列表); 其中, 返回类型:委托指向方…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部