09 | 命令行配置提供程序:最简单快捷的配置注入方法

这一节讲解如何使用命令行参数来作为配置数据源

命令行配置(提供程序的)支持三种格式的命令

1、无前缀的 key=value 模式

2、双中横线模式 --key=value 或 --key value

3、正横杠模式 /key=value 或 /key value

备注:等号分隔符和空格分隔符不能混用

命令替换模式:为命令参数提供别名

1、必须以单横杠(-)或双横杠(--)开头

2、 映射字典不能包含重复 Key

首先引入三个包

  • Microsoft.Extensions.Configuration.Abstractions
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.CommandLine

主程序

namespace ConfigurationCommandLineDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder(); // 把入参传递给命令行参提供程序
builder.AddCommandLine(args); var configurationRoot = builder.Build(); Console.WriteLine($"CommandLineKey1:{configurationRoot["CommandLineKey1"]}");
Console.WriteLine($"CommandLineKey2:{configurationRoot["CommandLineKey2"]}");
Console.ReadKey();
}
}
}

项目右键属性,设置调试模式启动时的命令参数

CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3 --k1=k3

也可以通过文件编辑,launchSettings.json

{
"profiles": {
"ConfigurationCommandLineDemo": {
"commandName": "Project",
"commandLineArgs": "CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3 --k1=k3"
}
}
}

启动程序,输出如下:

CommandLineKey1:value1
CommandLineKey2:value2

接着是命令替换

namespace ConfigurationCommandLineDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder(); //// 把入参传递给命令行参提供程序
//builder.AddCommandLine(args); #region 命令替换
var mapper = new Dictionary<string, string> { { "-k1", "CommandLineKey1" } };
builder.AddCommandLine(args, mapper);
#endregion var configurationRoot = builder.Build(); Console.WriteLine($"CommandLineKey1:{configurationRoot["CommandLineKey1"]}");
Console.WriteLine($"CommandLineKey2:{configurationRoot["CommandLineKey2"]}");
Console.ReadKey();
}
}
}

将双横杠 --k1=k3 改为 单横杠 -k1=k3

{
"profiles": {
"ConfigurationCommandLineDemo": {
"commandName": "Project",
"commandLineArgs": "CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3 -k1=k3"
}
}
}

启动程序,输出如下:

CommandLineKey1:k3
CommandLineKey2:value2

可以看出,-k1 替换了 CommandLineKey1 里面的值

这个场景是用来做什么的?

实际上可以看一下 .NET 自己的命令行工具

打开控制台,输入 dotnet --help

sdk-options:
-d|--diagnostics 启用诊断输出。
-h|--help 显示命令行帮助。
--info 显示 .NET Core 信息。
--list-runtimes 显示安装的运行时。
--list-sdks 显示安装的 SDK。
--version 显示使用中的 .NET Core SDK 版本。

这里可以看到 options 支持双横杠长命名和单横杠的短命名

实际上最典型的场景就是给应用的命令行参数提供了一个短命名快捷命名的方式,比如说 -h 就可以替换 --help

GitHub源码链接:

https://github.com/MingsonZheng/DotNetCoreDevelopmentActualCombat/tree/main/ConfigurationCommandLineDemo

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

.NET Core开发实战(第9课:命令行配置提供程序)--学习笔记的更多相关文章

  1. [编程基础] Python命令行解析库argparse学习笔记

    Python argparse教程展示了如何使用argparse模块解析Python中的命令行参数. 文章目录 1 使用说明 1.1 Python argparse可选参数 1.2 Python ar ...

  2. .NET Core开发实战(第11课:文件配置提供程序)--学习笔记

    11 | 文件配置提供程序:自由选择配置的格式 文件配置提供程序 Microsoft.Extensions.Configuration.Ini Microsoft.Extensions.Configu ...

  3. 《Flask Web开发实战:入门、进阶与原理解析》 学习笔记

    一个视图函数可以绑定多个 URL 为了让互联网上的人都可以访问,需要安装程序的服务器有公网ip 如果过度使用扩展,在不需要 的地方引人,那么相应也会导致代码不容易维护 ,应该尽量从实际需求出发,只在需 ...

  4. ASP.NET Core - 配置系统之配置提供程序

    3. 配置提供程序 上面提到,通过 IConfigurationBuilder 的实现类对象,我们可以自由地往配置系统中添加不同的配置提供程序,从而获取不同来源的配置信息..NET Core 中,微软 ...

  5. 2月送书福利:ASP.NET Core开发实战

    大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...

  6. [ASP.NET Core开发实战]基础篇06 配置

    配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...

  7. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

    命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...

  8. 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

      命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...

  9. PHP的命令行扩展Readline相关函数学习

    PHP 作为一个 Web 开发语言,相对来说,命令行程序并不是它的主战场.所以很多年轻的 PHP 开发者可能连命令行脚本都没有写过,更别提交互式的命令操作了.而今天,我们带来的这个扩展就是针对 PHP ...

  10. windos命令行下的程序编写

    1.命令行下写程序. 写程序一定要用IDE?不,我还可以用记事本呢.呵呵,写程序一定要用记事本?? ———————————————— 命令行下输入copy con test.txt后回车可在相应目录下 ...

随机推荐

  1. S3C2440移植uboot之支持NANDFLASH操作

      上一节我们移植了uboot,S3C2440移植uboot之支持NORFLASH.这节我们继续移植,支持NANDFLASH. 目录 编译报错 拷贝s3c2410_nand.c,修改宏定义支持SC32 ...

  2. 新手学习VUE——环境搭建及创建项目

    第一种方式: 1.     下载安装node.js 检查是否成功:node-v或npm-v 2..搭建项目: 第一种方法:用iview脚手架建项目 打开iview官网==>生态 ===>i ...

  3. nohup 与 >/dev/null 与 2>&1 作用与区别

    转载请注明出处: 在 Linux 中,>/dev/null 和 2>&1 是两个常用的重定向操作,它们用于控制命令的输出和错误信息.而且这两个参数经常 与 nohup 命令一起使用 ...

  4. Postman 接口测试配置 Pre-request Script

    本文为博主原创,转载请注明出处:  Pre-request Script 为Postman预置脚本,用于在postman 发送请求之前执行,封装计算或获取某些请求参数. 1. postman 脚本提供 ...

  5. 数字IC设计全流程介绍

    数字IC设计全流程设计 掌握数字集成电路设计的流程 数字设计流程中每个阶段主要做哪些工作? 数字设计流程中每个阶段使用的主要EDA工具? 数字电路常用软件公司Mentor(questasim),Syn ...

  6. 使用requests爬虫遇到的一个奇葩的问题:UnicodeEncodeError: 'latin-1' codec can't encode character

    每一位成功的程序员,背后也许都站着无数的秃头的男人--为其提供各种开发工具&代码库,当然也包括-- 各种玄学bug-- 玄学的开端 最近在用Python做一个爬虫项目的时候遇到一个很奇怪的问题 ...

  7. [转帖]一份完整的阿里云 Redis 开发规范,值得收藏!

    https://blog.csdn.net/NicolasLearner/article/details/117449847 作者:付磊-起扬 http://yq.aliyun.com/article ...

  8. [转帖]TiDB 使用 dumpling 导出数据,并使用 lightning 导入到另一个 TiDB 库

    本文介绍从 TiDB-A 库导出数据到 TiDB-B 库: 导出 Dumpling 包含在 tidb-toolkit 安装包中,可在此下载. 从 TiDB/MySQL 导出数据 需要的权限 SELEC ...

  9. [转帖]KingbaseES wal(xlog) 日志清理故障恢复案例

    https://www.cnblogs.com/kingbase/p/16266365.html 案例说明:在通过sys_archivecleanup工具手工清理wal日志时,在control文件中查 ...

  10. Jmeter学习之五_跟踪被测试服务器的performance

    Jmeter学习之五_跟踪被测试服务器的performance 背景 这几天简单学习了一些基本的测试过程. 可以实现一些简单基本的功能了. 今天晚上继续进行了jmeter的一些学习. 想着可以在测试人 ...