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

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

项目简介

这是基于.NetCore 开发的C#库,一个用于与外部命令行界面交互的库,功能强大、使用简单的库。

技术架构

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

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

项目结构

2cccbd47028f4f8c55815cad777ff69c.png

项目特点

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

- End -

加入知识星球,一起学习编程:

f234523b5ec71eabbe83e647395f4a57.png

分享一套.NetCore从入门到精通视频教程

点击下方公众号卡片,关注我

回复“888”,免费领取

推荐阅读

一个简单、功能完整的WMS仓库管理系统

推荐一个.Net分布式微服务开发框架

一款统计摸鱼时长的开源项目

一个基于.Net开发齐全的加密库

用C#自己动手写个操作系统,爽!

觉得好看 点个在看👇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值