.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/archive/2023/04/21/Detailed-explanation-of-NET-Core-environment-variables.html

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

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

相关文章

  • C#三种方法获取文件的Content-Type(MIME Type)

    C#三种方法获取文件的Content-Type(MIME Type): 在进行文件上传或下载时,获取文件MIME类型是一项非常重要的任务,这有助于我们判断文件的类型和进行相应的处理。C#提供了三种方法获取文件的Content-Type(MIME Type),分别是使用WebClient类、使用HttpWebResponse类和使用Registry类。 方法一…

    C# 2023年6月3日
    00
  • C#中多线程Tread的使用(推荐)

    C#中多线程Thread的使用 在C#中,可以通过多线程来提升程序的性能。多线程使得程序可以同时执行多个任务,这样增加了程序的吞吐量,提高了程序的响应速度,让用户能够更好的体验使用。本文将详细介绍C#中多线程Thread的使用。 创建Thread对象 在开始使用Thread之前,需要首先创建Thread对象。创建对象有两种方式: 通过ThreadStart委…

    C# 2023年5月15日
    00
  • C#中的事务用法实例分析

    C#中的事务用法实例分析 事务(transaction)是指一组操作,这些操作要么全部成功,要么全部失败。C# 提供了一种机制来处理数据库的事务,即使用 TransactionScope 类。在本文中,我们将详细介绍 C# 中如何使用 TransactionScope 实现事务处理。 事务的定义 事务是指一组数据库操作语句,它们被一起执行,并且要么全部执行成…

    C# 2023年6月2日
    00
  • .NET Core实现企业微信消息推送

    企业微信是一种企业级即时通讯工具,它提供了消息推送功能。在.NET Core中,您可以使用企业微信API来实现消息推送。本攻略将深入探讨如何使用.NET Core实现企业微信消息推送,并提供两个示例说明。 实现企业微信消息推送 实现企业微信消息推送的步骤如下: 1. 注册企业微信 在使用企业微信API之前,您需要注册企业微信账号,并创建应用程序。您可以在企业…

    C# 2023年5月17日
    00
  • ASP.NET Core – 缓存之内存缓存(下)

    话接上篇 [ASP.NET Core – 缓存之内存缓存(上)],所以这里的目录从 2.4 开始。 2.4 MemoryCacheEntryOptions MemoryCacheEntryOptions 是内存缓存配置类,可以通过它配置缓存相关的策略。除了上面讲到的过期时间,我们还能够设置下面这些: 设置缓存优先级。 设置在从缓存中逐出条目后调用的 Post…

    C# 2023年4月18日
    00
  • c# .net 生成图片验证码的代码

    为了在C# .NET中生成图片验证码,我们可以遵循以下步骤: 步骤1:安装NuGet包 我们需要安装 ZXing 和 System.Drawing.Common 两个NuGet包,以便在C#代码中引用。 运行以下命令安装: Install-Package ZXing -Version 1.1.0 Install-Package System.Drawing.…

    C# 2023年5月31日
    00
  • 基于C#实现简单离线注册码生成与验证

    前言本篇攻略将介绍如何使用C#语言实现一个简单的离线注册码生成器与验证器,可适用于需要对软件进行授权的情形,如商业软件、企业内部软件等。首先我们将讲解注册码的生成方法,然后是注册码的验证方法,最后我们会给出完整的示例说明,希望这篇攻略对大家有所帮助。 一、注册码生成器的实现注册码生成器主要包括两个功能:生成唯一的机器码和根据机器码生成注册码。下面是代码实现:…

    C# 2023年6月6日
    00
  • C# 实例解释面向对象编程中的单一功能原则(示例代码)

    针对您的问题,以下是C# 实例解释面向对象编程中的单一功能原则的攻略及示例代码。 单一功能原则 单一功能原则(Single Responsibility Principle,SRP)是面向对象编程中的一项核心原则,其核心思想是一个类或模块只负责一项职责(也就是只有一个引起它变化的原因)。这样可以让代码更加易于维护、修改和测试。举例来说,如果一个类负责多项职责…

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