経験.NETコアコマンドラインアプリケーションの-CommandLineUtils

序文

我々の開発では、これらのユーティリティは、元のソースコードに近いの利点を活用することができ、ワンタイムアプリケーションを設計する必要があるかもしれませんが、あなたは、セキュリティコンテキストの完全に独立したメインのWebアプリケーションを起動することができます。具体的に【管理処理](https://12factor.net/admin-processes)それはまた、理由を記載されています。

コンソールアプリケーションを作成します。

プロンプトコマンドを開き、作成作成ConsoleDemoのフォルダを、次のスニペットを入力

dotnet new console

dotnet run

dotnet run

Hello World!

それとも私たちもできるDOTNETビルドが生成されたコンソールアプリケーション、DLLファイル生成としてコンパイルされたプロジェクトのアプリケーション名に基づいて、この時間を実行せずにコードをコンパイルします。この場合、作成されたファイルの名前はConsoleDemo.dllこの時点では、Windows上のDOTNETのbin \デバッグ\ netcoreapp3.1 \ ConsoleDemo.dll実行を(Windows以外のシステムでは、/を使用)を使用することができます。

dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dll

Hello World!

あなたがアプリケーションをコンパイルすると、それは異なりますConsoleDemo.dllが一緒に、オペレーティング・システムに実行ファイルの特定を作成します。Windowsでは、それはなりますConsoleDemo.exe、LinuxやMacOSの上で、それはなりますConsoleDemo。で、上記の例ではConsoleDemo.exeまたはConsoleDemoファイルに名前を付けます。あなたは直接実行可能ファイルを実行することができます。


.\bin\Debug\netcoreapp3.1\ConsoleDemo.exe

Hello World!

HelloWord

まず、次のパッケージでコンソールアプリケーションに私たちを聞かせて


Install-Package  McMaster.Extensions.CommandLineUtils

属性API


using System;
using McMaster.Extensions.CommandLineUtils;

public class Program
{
    public static int Main(string[] args)
        => CommandLineApplication.Execute<Program>(args);

    [Option(Description = "The subject")]
    public string Subject { get; }

    [Option(ShortName = "n")]
    public int Count { get; }

    private void OnExecute()
    {
        var subject = Subject ?? "world";
        for (var i = 0; i < Count; i++)
        {
            Console.WriteLine($"Hello {subject}!");
        }
    }
}

ビルダーAPI

using System;
using McMaster.Extensions.CommandLineUtils;

public class Program
{
    public static int Main(string[] args)
    {
        var app = new CommandLineApplication();

        app.HelpOption();
        var optionSubject = app.Option("-s|--subject <SUBJECT>", "The subject", CommandOptionType.SingleValue);
        var optionRepeat = app.Option<int>("-n|--count <N>", "Repeat", CommandOptionType.SingleValue);

        app.OnExecute(() =>
        {
            var subject = optionSubject.HasValue()
                ? optionSubject.Value()
                : "world";

            var count = optionRepeat.HasValue() ? optionRepeat.ParsedValue : 1;
            for (var i = 0; i < count; i++)
            {
                Console.WriteLine($"Hello {subject}!");
            }
            return 0;
        });

        return app.Execute(args);
    }
}

直接公式サイドからのコードが...私は怠惰な書き込みを所有していません。

我々のテスト


dotnet run -help
Usage:  [options]

Options:
  -?|-h|--help            Show help information
  -s|--subject <SUBJECT>  The subject
  -n|--count <N>          Repeat

dotnet run -s Fh
Hello Fh!

【コマンド】
これらの特性は、すべての実際のコマンドラインパーサを生成するために、CommandLineUtilsによって提供されます。コマンド代表は、「オプション」と「コマンド」(ゴー・フィギュア)の「パラメータ」を持っています。[コマンド]装飾された任意のクラスは、OnExecuteイベントOnExecuteAsync(と呼ばれる方法)または実装する必要があります()。戻り値の型必須コンテナから無効にし、注入パラメータ(非同期変数タスクまたはタスクの場合)、またはあなたの依存関係をint型(この場合はMicrosoft.Extensions.Dependency.Injection中)を注入。

[helpOptionは]は
単語「オプション」と多くの属性があります。これらは、コマンドラインオプションコマンドが受け入れる増加しています。この場合、我々は助けにデフォルトのトップレベルのコマンドの-hまたは-helpオプションを使用します。これが完了すると、サブコマンドも同様にヘルプを提供します。

[サブコマンド]
[サブコマンド]子コマンド現在のコマンドの属性を示すコマンドが必要です。あなたはすでに非常にコンパイル時に成熟された合意の最適化に基づいて、すべてのサブコマンドコードを知っています。組織の現在の方法を選択し、各コマンドの間にサブコマンドを再利用することを可能にします。

参照

https://natemcmaster.github.io/CommandLineUtils/v2.5/api/McMaster.Extensions.CommandLineUtils.OptionAttribute.html

https://github.com/hueifeng/BlogSample/tree/master/src/ConsoleDemo

发布了50 篇原创文章 · 获赞 52 · 访问量 1485

おすすめ

転載: blog.csdn.net/qq_27843785/article/details/103965036