.NET Core 程序实现 Windows 系统 Development、Staging、Production 三种环境的无感部署
2023/6/2 14:52:54
本文主要是介绍.NET Core 程序实现 Windows 系统 Development、Staging、Production 三种环境的无感部署,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
〇、前言
日常开发中,程序的环境切换是相当频繁的了,如果不同环境中的某些参数不同,那就需要每次编辑之前手动进行修改,比较麻烦,效率低下。
本文将以 .NET Core WebAPI 项目的配置方法为例,分步骤实现根据环境变量的配置参数,自动读取对应配置文件中的特殊参数值,从而达到 Development、Staging、Production 三种环境的无感部署。
一、配置文件
程序一般默认只有一个配置文件:appsettings.Development.json。
需要手动添加另外两个:appsettings.Staging.json、appsettings.Production.json。
原配置文件中,默认只有一个节点:Logging,如下:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } } }
需要手动添加一个与 Logging 同级的节点,名称自定义,如下示例:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "MyPara": { "myparavalue": "测试文本", "myparavalue2": [ { "key": "111", "value": "v111" }, { "key": "222", "value": "v222" }, { "key": "333", "value": "v333" } ] } }
注意,三个配置文件中需要加上完全一样的参数名称,然后根据环境不同配置不同的值。
二、程序读取配置
接下来就是在程序中配置读取了,在控制器的构造函数添加环境判断,然后取出配置文件中新增节点的值备用。
以下实例,包含了读取 字符值、列表值 两种:
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; [Route("api/[controller]/[action]")] [ApiController] public class SystemConfigController : ControllerBase // SystemConfig { public static IConfigurationRoot configurationRoot = null; // 示例只有两个字段,就用字典 Dictionary 来演示了,若字段较多时,可用实体对象 list public static Dictionary<string, string> keyValuePairs = new Dictionary<string, string>(); public SystemConfigController(IWebHostEnvironment env) { try { configurationRoot = AppConfigure.GetConfigurationRoot(env.ContentRootPath, env.EnvironmentName); if (keyValuePairs.Count == 0) // 仅首次加载时读取 { string flag = string.Empty; int i = 0; while (flag != null) { var keyinfo = configurationRoot[$"MyConfigPara:myparavalue2:{i}:key"]; var valueinfo = configurationRoot[$"MyConfigPara:myparavalue2:{i}:value"]; if (keyinfo != null && valueinfo != null) { keyValuePairs.Add(keyinfo, valueinfo); // 加入字典 i++; } else flag = null; } } } catch (Exception ex) { // 日志框架记录日志 } } public void TestAction() { // 读取配置文件具体值 string myparavalue = configurationRoot["MyPara:myparavalue"]; } }
配置文件读取帮助类:AppConfigure.cs。
using Microsoft.Extensions.Configuration; using System.Collections.Concurrent; public static class AppConfigure { // 缓存字典 private static readonly ConcurrentDictionary<string, IConfigurationRoot> _cacheDict; static AppConfigure() { _cacheDict = new ConcurrentDictionary<string, IConfigurationRoot>(); } // 传入 JSON 文件夹路径与当前的环境变量值 public static IConfigurationRoot GetConfigurationRoot(string jsonDir, string environmentName = null) { // 设置缓存的 KEY var cacheKey = $"{jsonDir}#{environmentName}"; // 添加默认的 JSON 配置 var builder = new ConfigurationBuilder().SetBasePath(jsonDir) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); // 根据环境变量添加相应的 JSON 配置文件 if (!string.IsNullOrEmpty(environmentName)) { builder = builder.AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true); } // 返回构建成功的 IConfigurationRoot 对象 return builder.Build(); } }
三、Windows 服务器配置
最后就是配置 Windows 服务器的环境变量了,用来标识程序运行的环境。
如下图,根据需要配置不同的环境变量:
- ASPNETCORE_ENVIRONMENT:Development
- ASPNETCORE_ENVIRONMENT:Staging
- ASPNETCORE_ENVIRONMENT:Production
至此,就配置完成了。
注意:如果设置完环境变量还是不能读取指定的配置,可以参考下这个:https://blog.csdn.net/lilinoscar/article/details/108362211
这篇关于.NET Core 程序实现 Windows 系统 Development、Staging、Production 三种环境的无感部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#