服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

一个跨平台执行外部命令的 C# 开源库

日期: 来源:微软开发者MSDN收集编辑:编程乐趣

点击上方蓝字

关注我们

(本文阅读时间:5分钟)


转载自编程乐趣

对于我们程序员来说,在日常开发项目中,调用外部的命令是非常常见的,比如调用批处理命令、调用其他应用,这里面就涉及到进程的通讯、管理、启动、取消等一些操作,今天给大家推荐一个 C# 库,就可以满足这些日常的需求,避免重复造轮子。
这是基于 .NetCore 开发的 C# 库,一个用于与外部命令行界面交互的库,功能强大、使用简单的库。


技术架构

1、跨平台:这是基于 .NetCore 开发的系统,可以部署在 Docker、Windows、Linux、Mac;

2、支持 .NET Standard 2.0+、.NET Core 3.0+、.NET Framework 4.6.2+。




项目结构




项目特点

1、流畅的配置界面;
2、灵活的管道支持;
3、完全异步且支持取消的 API;
4、针对死锁提供解决方案;

5、支持中断信号支持取消。




使用方法

单个命令配置

var cmd = Cli.Wrap("git")    .WithArguments("commit -m \"my commit\"");

▍多命令配置

var cmd = Cli.Wrap("git") .WithArguments(new[] {"commit", "-m", "my commit"});

命令配置

var cmd = Cli.Wrap("git") .WithArguments(args => args .Add("clone") .Add("https://github.com/Tyrrrz/CliWrap") .Add("--depth") .Add(20) );

工作目录使用

var cmd = Cli.Wrap("git") .WithWorkingDirectory("c:/projects/my project/");

设置环境变量

var cmd = Cli.Wrap("git") .WithEnvironmentVariables(new Dictionary<string, string?> { ["GIT_AUTHOR_NAME"] = "John", ["GIT_AUTHOR_EMAIL"] = "john@email.com" });

设置环境变量

var cmd = Cli.Wrap("git") .WithEnvironmentVariables(env => env .Set("GIT_AUTHOR_NAME", "John") .Set("GIT_AUTHOR_EMAIL", "john@email.com") );

设置启动子进程的用户的域、名称和密码

var cmd = Cli.Wrap("git") .WithCredentials(new Credentials( domain: "some_workspace", userName: "johndoe", password: "securepassword123", loadUserProfile: true ));

设置启动子进程的用户的域、名称和密码

var cmd = Cli.Wrap("git") .WithCredentials(creds => creds .SetDomain("some_workspace") .SetUserName("johndoe") .SetPassword("securepassword123") .LoadUserProfile() );

设置验证执行结果的策略

var cmd = Cli.Wrap("git") .WithValidation(CommandResultValidation.ZeroExitCode);

管道流的使用

await using var input = File.OpenRead("input.txt");await using var output = File.Create("output.txt");
await Cli.Wrap("foo") .WithStandardInputPipe(PipeSource.FromStream(input)) .WithStandardOutputPipe(PipeTarget.ToStream(output)) .ExecuteAsync();

Http 流

using var httpClient = new HttpClient();await using var input = await httpClient.GetStreamAsync("https://example.com/image.png");
var cmd = input | Cli.Wrap("foo");await cmd.ExecuteAsync();

  • 项目地址

    https://github.com/Tyrrrz/CliWrap

*未经授权请勿私自转载此文章及图片。

谢谢你读完了本文!欢迎在评论区留言分享你的想法,并且转发到朋友圈

长按识别二维码

关注微软开发者MSDN


喜欢记得分享哦~

相关阅读

  • 一文读懂函数编程及其工作原理

  • 点击上方蓝字关注我们(本文阅读时间:8分钟)微软MVP实验室研究员马洪喜-微软 MVP19年研发经验云计算咨询顾问专家容器云及基础架构云技术专家DevOps 及微服务咨询专家什么是函数
  • 比特熊故事汇2.0 | 迎风起,去看新风景

  • 点击上方蓝字关注我们(本文阅读时间:10分钟)文末有惊喜大家好!我是爱吃、爱玩、更爱学习技术,IT界新晋小红人,开发者的好朋友——比特熊!本期比特熊请到了两位“新面孔”,他们刚刚成
  • 用 .NET 启动你的 DJI Ryze Tello 无人机

  • 点击上方蓝字关注我们(本文阅读时间:15分钟)大疆的 DJI Ryze Tello 是入门级的无人机,不仅在 STEM 教育中有非常广泛的应用,也可以作为编程入门的首选。通过 UDP 协议调用 DJI R
  • 微软徐明强:谈谈ChatGPT及对技术的重新思考

  • 点击上方蓝字关注我们(本文阅读时间:6分钟)是2023 Microsoft Azure中国区年度技术峰会启幕之际,Azure 云科技推出的专栏。我们邀请了业界富有前瞻视野的技术、业务专家,畅谈行业
  • 正式发布Linux 6.2,支持龙芯 LoongArch 架构

  • 点击上方蓝字 ● 关注Linux公社 这是一个短暂的分支,将仅在几个月内得到错误和安全修复的支持。Linus Torvalds 今天宣布发布 Linux 6.2,这是一个主要的新内核系列,带有新
  • Linux 只是一个内核:这意味着什么?

  • 点击上方蓝字 ● 关注Linux公社 这是困扰 Linux 用户的一个常见问题。这也是考试和面试中经常问的问题。以下是您需要了解的所有信息。您可能已经在互联网上看到和听到
  • Linux 中使用 Tee 和 Xargs 从标准输入运行命令

  • 点击上方蓝字 ● 关注Linux公社 使用命令行时,您可以直接将一个程序(例如生成某些系统信息或统计信息的工具)的输出作为另一个程序(例如文本过滤或模式搜索工具,如grep、sed

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 承前启“新”:2022年女性长篇小说创作回顾

  • 读提示 近年来女性写作广受关注,这既得益于图书市场和舆论空间对女性议题的持续关注,也离不开女性作家孜孜不倦的创作。2022年尤其是女性长篇小说的丰收之年,在这一年里,不同
  • 一个跨平台执行外部命令的 C# 开源库

  • 点击上方蓝字关注我们(本文阅读时间:5分钟)转载自编程乐趣对于我们程序员来说,在日常开发项目中,调用外部的命令是非常常见的,比如调用批处理命令、调用其他应用,这里面就涉及到进
  • 一文读懂函数编程及其工作原理

  • 点击上方蓝字关注我们(本文阅读时间:8分钟)微软MVP实验室研究员马洪喜-微软 MVP19年研发经验云计算咨询顾问专家容器云及基础架构云技术专家DevOps 及微服务咨询专家什么是函数
  • 比特熊故事汇2.0 | 迎风起,去看新风景

  • 点击上方蓝字关注我们(本文阅读时间:10分钟)文末有惊喜大家好!我是爱吃、爱玩、更爱学习技术,IT界新晋小红人,开发者的好朋友——比特熊!本期比特熊请到了两位“新面孔”,他们刚刚成
  • 用 .NET 启动你的 DJI Ryze Tello 无人机

  • 点击上方蓝字关注我们(本文阅读时间:15分钟)大疆的 DJI Ryze Tello 是入门级的无人机,不仅在 STEM 教育中有非常广泛的应用,也可以作为编程入门的首选。通过 UDP 协议调用 DJI R
  • 用 Visual Studio 升级 .NET 项目

  • 点击上方蓝字关注我们(本文阅读时间:10分钟)现在,你已可以使用 Visual Studio 将所有 .NET 应用程序升级到最新版本的 .NET!这一功能可以从 Visual Studio 扩展包中获取,它会升级