Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
System.CommandLine
saat ini dalam PRATINJAU, dan dokumentasi ini untuk versi 2.0 beta 5.
Beberapa informasi berkaitan dengan produk prarilis yang mungkin dimodifikasi secara substansial sebelum dirilis. Microsoft tidak memberikan jaminan, tersurat maupun tersirat, sehubungan dengan informasi yang diberikan di sini.
Artikel ini menjelaskan sintaks baris perintah yang System.CommandLine
mengenali. Informasi ini berguna untuk pengguna dan pengembang aplikasi baris perintah .NET, termasuk .NET CLI.
Beberapa Token
System.CommandLine
mengurai input baris perintah ke dalam token, yang merupakan string yang dibatasi oleh spasi. Misalnya, pertimbangkan baris perintah berikut:
dotnet tool install dotnet-suggest --global --verbosity quiet
Input ini diurai oleh dotnet
aplikasi ke dalam token tool
, , install
, dotnet-suggest
--global
, --verbosity
, dan quiet
.
Token ditafsirkan sebagai perintah, opsi, atau argumen. Aplikasi baris perintah yang sedang dipanggil menentukan bagaimana token-token setelah token pertama ditafsirkan. Tabel berikut ini memperlihatkan cara System.CommandLine
menginterpretasikan contoh sebelumnya:
Tanda | Diartikan sebagai |
---|---|
tool |
Perintah tambahan |
install |
Perintah tambahan |
dotnet-suggest |
Argumen untuk perintah instal |
--global |
Opsi untuk perintah penginstalan |
--verbosity |
Opsi untuk perintah penginstalan |
quiet |
Argumen untuk --verbosity opsi |
Token dapat berisi spasi jika diapit dalam tanda kutip ("
). Berikut adalah contohnya:
dotnet tool search "ef migrations add"
Perintah
Perintah dalam input baris perintah adalah token yang menentukan tindakan atau menentukan sekelompok tindakan terkait. Contohnya:
- Dalam
dotnet run
,run
adalah perintah yang menentukan tindakan. - Dalam
dotnet tool install
,install
adalah perintah yang menentukan tindakan, dantool
merupakan perintah yang menentukan sekelompok perintah terkait. Ada perintah terkait alat lainnya, sepertitool uninstall
, ,tool list
dantool update
.
Perintah root
Perintah root adalah perintah yang menentukan nama aplikasi yang dapat dieksekusi. Misalnya, dotnet
perintah menentukan dotnet.exe dapat dieksekusi.
System.CommandLine.Command
adalah kelas tujuan umum untuk perintah atau subperintah apa pun, sementara System.CommandLine.RootCommand
merupakan versi khusus yang ditujukan untuk titik entri akar aplikasi, mewarisi semua fitur System.CommandLine.Command
tetapi menambahkan perilaku dan default khusus akar, seperti opsi Bantuan, Opsi versi , dan Direktif Sarankan.
perintah tambahan
Sebagian besar aplikasi baris perintah mendukung subkomando, atau yang dikenal sebagai kata kerja. Misalnya, dotnet
perintah memiliki run
subperintah yang Anda panggil dengan memasukkan dotnet run
.
Sub-perintah dapat memiliki sub-perintah mereka sendiri. Dalam dotnet tool install
, install
adalah sub perintah dari tool
.
Anda dapat menambahkan sub perintah seperti yang ditunjukkan dalam contoh berikut:
RootCommand rootCommand = new();
Command sub1Command = new("sub1", "First-level subcommand");
rootCommand.Subcommands.Add(sub1Command);
Command sub1aCommand = new("sub1a", "Second level subcommand");
sub1Command.Subcommands.Add(sub1aCommand);
Sub perintah terdalam dalam contoh ini dapat dipanggil seperti ini:
myapp sub1 sub1a
Opsi
Opsi adalah parameter bernama yang dapat diteruskan ke perintah.
POSIX CLI biasanya mengawali nama opsi dengan dua tanda hubung (--
). Contoh berikut menunjukkan dua opsi:
dotnet tool update dotnet-suggest --verbosity quiet --global
^---------^ ^------^
Seperti yang diilustrasikan contoh ini, nilai dari opsi mungkin eksplisit (quiet
untuk --verbosity
) atau implisit (tidak ada apapun yang mengikutinya --global
). Opsi yang tidak memiliki nilai yang ditentukan biasanya adalah parameter Boolean yang akan default ke true
jika opsi tersebut ditentukan pada baris perintah.
Untuk beberapa aplikasi baris perintah Windows, Anda mengidentifikasi opsi dengan menggunakan tanda garis miring (/
) dengan nama opsi. Contohnya:
msbuild /version
^------^
System.CommandLine
mendukung konvensi awalan POSIX dan Windows.
Saat mengonfigurasi opsi, Anda menentukan nama opsi termasuk awalan:
Option<int> delayOption = new("--delay", "-d")
{
Description = "An option whose argument is parsed as an int.",
DefaultValueFactory = parseResult => 42,
};
Option<string> messageOption = new("--message", "-m")
{
Description = "An option whose argument is parsed as a string."
};
RootCommand rootCommand = new();
rootCommand.Options.Add(delayOption);
rootCommand.Options.Add(messageOption);
Untuk menambahkan opsi ke perintah dan secara rekursif ke semua sub-perintahnya, gunakan System.CommandLine.Symbol.Recursive
properti .
Opsi yang Diperlukan
Beberapa opsi memiliki argumen yang diperlukan. Misalnya di .NET CLI, --output
memerlukan argumen nama folder. Jika argumen tidak disediakan, perintah gagal. Untuk membuat opsi diperlukan, atur propertinya System.CommandLine.Symbol.Required
ke true
, seperti yang ditunjukkan dalam contoh berikut:
Option<FileInfo> fileOption = new("--output")
{
Required = true
};
Jika opsi yang diperlukan memiliki nilai default (ditentukan melalui DefaultValueFactory
properti), opsi tidak harus ditentukan pada baris perintah. Dalam hal ini, nilai default menyediakan nilai opsi yang diperlukan.
Argumen
Argumen adalah parameter yang tidak disebutkan namanya yang dapat diteruskan ke perintah. Contoh berikut menunjukkan argumen untuk build
perintah .
dotnet build myapp.csproj
^----------^
Saat Mengonfigurasi argumen, Anda menentukan nama argumen (tidak digunakan untuk penguraian, tetapi dapat digunakan untuk mendapatkan nilai yang diurai berdasarkan nama atau menampilkan bantuan) dan mengetik:
Argument<int> delayArgument = new("delay")
{
Description = "An argument that is parsed as an int.",
DefaultValueFactory = parseResult => 42
};
Argument<string> messageArgument = new("message")
{
Description = "An argument that is parsed as a string."
};
RootCommand rootCommand = new();
rootCommand.Arguments.Add(delayArgument);
rootCommand.Arguments.Add(messageArgument);
Nilai Default
Argumen dan opsi dapat memiliki nilai default yang berlaku jika tidak ada argumen yang disediakan secara eksplisit. Misalnya, banyak opsi secara implisit parameter Boolean dengan default true
ketika nama opsi berada di baris perintah. Contoh baris perintah berikut ini setara:
dotnet tool update dotnet-suggest --global
^------^
dotnet tool update dotnet-suggest --global true
^-----------^
Argumen yang didefinisikan tanpa nilai default diperlakukan sebagai argumen yang diperlukan.
Kesalahan penguraian
Opsi dan argumen memiliki jenis yang diharapkan, dan kesalahan dihasilkan ketika nilai tidak dapat diurai. Misalnya, kesalahan perintah berikut karena "diam" bukan salah satu nilai yang valid untuk --verbosity
:
dotnet build --verbosity silent
Option<string> verbosityOption = new("--verbosity", "-v")
{
Description = "Set the verbosity level.",
};
verbosityOption.AcceptOnlyFromAmong("quiet", "minimal", "normal", "detailed", "diagnostic");
RootCommand rootCommand = new() { verbosityOption };
ParseResult parseResult = rootCommand.Parse(args);
foreach (ParseError parseError in parseResult.Errors)
{
Console.WriteLine(parseError.Message);
}
Argument 'silent' not recognized. Must be one of:
'quiet'
'minimal'
'normal'
'detailed'
'diagnostic'
Argumen juga memiliki harapan tentang berapa banyak nilai yang dapat disediakan. Contoh disediakan di bagian tentang aritas argumen.
Urutan opsi dan argumen
Anda dapat menyediakan opsi sebelum argumen atau argumen sebelum opsi pada baris perintah. Perintah berikut ini setara:
dotnet add package System.CommandLine --prerelease
dotnet add package --prerelease System.CommandLine
Opsi dapat ditentukan dalam urutan apa pun. Perintah berikut ini setara:
dotnet add package System.CommandLine --prerelease --no-restore --source https://api.nuget.org/v3/index.json
dotnet add package System.CommandLine --source https://api.nuget.org/v3/index.json --no-restore --prerelease
Ketika ada beberapa argumen, urutannya penting. Perintah berikut tidak setara; mereka berbeda dalam urutan nilai, yang dapat menyebabkan hasil yang berbeda:
myapp argument1 argument2
myapp argument2 argument1
Nama Lain
Di POSIX dan Windows, umum bagi beberapa perintah dan opsi untuk memiliki alias. Ini biasanya adalah bentuk pendek yang lebih mudah di ketik. Alias juga dapat digunakan untuk tujuan lain, seperti untuk mensimulasikan ketidakpekaan huruf besar/kecil dan untuk mendukung ejaan alternatif kata.
Bentuk pendek POSIX biasanya memiliki satu tanda hubung di depannya diikuti oleh satu karakter. Perintah berikut ini setara:
dotnet build --verbosity quiet
dotnet build -v quiet
Standar GNU merekomendasikan alias otomatis. Artinya, Anda dapat memasukkan bagian mana pun dari perintah bentuk panjang atau nama opsi dan itu akan diterima. Perilaku ini akan membuat baris perintah berikut setara:
dotnet publish --output ./publish
dotnet publish --outpu ./publish
dotnet publish --outp ./publish
dotnet publish --out ./publish
dotnet publish --ou ./publish
dotnet publish --o ./publish
System.CommandLine
tidak mendukung alias otomatis. Setiap alias harus ditentukan secara eksplisit. Perintah dan opsi memperlihatkan Aliases
properti.
Option
memiliki konstruktor yang menerima alias sebagai parameter, sehingga Anda dapat menentukan opsi dengan beberapa alias dalam satu baris:
Option<bool> helpOption = new("--help", ["-h", "/h", "-?", "/?"]);
Command command = new("serialize") { helpOption };
command.Aliases.Add("serialise");
Sebaiknya Anda meminimalkan jumlah alias opsi yang Anda tentukan, dan hindari menentukan alias tertentu secara khusus. Untuk informasi selengkapnya, lihat Alias bentuk pendek.
Sensitivitas huruf besar/kecil
Nama dan alias perintah serta opsi peka terhadap huruf besar/kecil secara bawaan sesuai dengan konvensi POSIX; System.CommandLine
mengikuti konvensi POSIX ini. Jika Anda ingin CLI Anda tidak sensitif terhadap huruf besar/kecil, tetapkan alias untuk berbagai alternatif penggunaan huruf besar/kecil. Misalnya, --additional-probing-path
bisa memiliki alias --Additional-Probing-Path
dan --ADDITIONAL-PROBING-PATH
.
Dalam beberapa alat baris perintah, perbedaan dalam casing menentukan perbedaan fungsi. Misalnya, git clean -X
berulah berbeda dari git clean -x
. CLI di .NET ditulis dengan huruf kecil semua.
Sensitivitas kasus tidak berlaku untuk nilai argumen untuk opsi yang didasarkan pada enum. Nama enum dicocokkan terlepas dari casing.
Token --
Konvensi POSIX menafsirkan token tanda hubung ganda (--
) sebagai mekanisme pelolosan. Semua yang mengikuti token tanda hubung ganda ditafsirkan sebagai argumen untuk perintah . Fungsionalitas ini dapat digunakan untuk mengirimkan argumen yang terlihat seperti opsi, karena mencegahnya ditafsirkan sebagai opsi.
Misalkan myapp menerima message
sebagai argumen, dan Anda ingin agar nilai message
menjadi --interactive
. Baris perintah berikut mungkin memberikan hasil yang tidak terduga.
myapp --interactive
Jika myapp
tidak memiliki --interactive
opsi, token ditafsirkan --interactive
sebagai argumen. Tetapi jika aplikasi memang memiliki --interactive
opsi, input ini akan ditafsirkan sebagai mengacu pada opsi tersebut.
Baris perintah berikut menggunakan tanda hubung ganda untuk mengatur nilai message
argumen ke "--interactive":
myapp -- --interactive
^^
System.CommandLine
mendukung fungsionalitas garis hubung ganda ini.
Pemisah untuk argumen opsi
System.CommandLine
memungkinkan Anda menggunakan spasi, '=', atau ':' sebagai pemisah antara nama opsi dan argumennya. Misalnya, perintah berikut setara:
dotnet build -v quiet
dotnet build -v=quiet
dotnet build -v:quiet
Konvensi POSIX memungkinkan Anda menghilangkan pemisah saat Anda menentukan alias opsi karakter tunggal. Misalnya, perintah berikut setara:
myapp -vquiet
myapp -v quiet
System.CommandLine mendukung sintaksis ini secara default.
Aritas argumen
Aritas opsi atau argumen perintah adalah jumlah nilai yang dapat diteruskan jika opsi atau perintah tersebut ditentukan.
Aritas dinyatakan dengan nilai minimum dan nilai maksimum, seperti yang diilustrasikan tabel berikut:
Menit | Maks | Contoh validitas | Contoh |
---|---|---|---|
0 | 0 | Sah: | --arsip |
Tidak Sah: | --file a.json | ||
Tidak Sah: | --file a.json --file b.json | ||
0 | 1 | Sah: | --bendera |
Sah: | --flag true | ||
Sah: | --flag false | ||
Tidak Sah: | --flag false --flag false | ||
1 | 1 | Sah: | --file a.json |
Tidak Sah: | --arsip | ||
Tidak Sah: | --file a.json --file b.json | ||
0 | n | Sah: | --arsip |
Sah: | --file a.json | ||
Sah: | --file a.json --file b.json | ||
1 | n | Sah: | --file a.json |
Sah: | --file a.json b.json | ||
Tidak Sah: | --arsip |
System.CommandLine
memiliki System.CommandLine.ArgumentArity
struktur untuk menentukan aritas, dengan nilai berikut:
-
System.CommandLine.ArgumentArity.Zero
- Tidak ada nilai yang diizinkan. -
System.CommandLine.ArgumentArity.ZeroOrOne
- Mungkin memiliki satu nilai, mungkin tidak memiliki nilai. -
System.CommandLine.ArgumentArity.ExactlyOne
- Harus memiliki satu nilai. -
System.CommandLine.ArgumentArity.ZeroOrMore
- Mungkin memiliki satu nilai, beberapa nilai, atau tidak ada nilai. -
System.CommandLine.ArgumentArity.OneOrMore
- Mungkin memiliki beberapa nilai, harus memiliki setidaknya satu nilai.
Anda dapat secara eksplisit mengatur aritas dengan menggunakan properti Arity
, tetapi dalam banyak kasus hal itu tidak diperlukan.
System.CommandLine
secara otomatis menentukan aritas argumen berdasarkan jenis argumen:
Jenis argumen | Arity bawaan |
---|---|
Boolean |
ArgumentArity.ZeroOrOne |
Tipe koleksi | ArgumentArity.ZeroOrMore |
Segala sesuatu yang lain | ArgumentArity.ExactlyOne |
Penimpaan opsi
Jika aritas maksimum adalah 1, System.CommandLine
masih dapat dikonfigurasi untuk menerima banyak instance dari sebuah opsi. Dalam hal ini, kemunculan terakhir dari opsi yang berulang akan menimpa kemunculan sebelumnya. Dalam contoh berikut, nilai 2 akan diteruskan ke myapp
perintah .
myapp --delay 3 --message example --delay 2
Beberapa argumen
Secara default, saat Anda memanggil perintah, Anda dapat mengulangi nama opsi untuk menentukan beberapa argumen untuk opsi yang memiliki aritas maksimum lebih besar dari satu.
myapp --items one --items two --items three
Untuk mengizinkan beberapa argumen tanpa mengulangi nama opsi, atur System.CommandLine.Option.AllowMultipleArgumentsPerToken
ke true
. Pengaturan ini memungkinkan Anda memasukkan baris perintah berikut.
myapp --items one two three
Pengaturan yang sama memiliki efek yang berbeda jika aritas argumen maksimum adalah 1. Ini memungkinkan Anda untuk mengulangi opsi tetapi hanya mengambil nilai terakhir pada baris. Dalam contoh berikut, nilai three
akan diteruskan ke aplikasi.
myapp --item one --item two --item three
Pembundelan opsi
POSIX merekomendasikan agar Anda mendukung penggabungan opsi karakter tunggal, juga dikenal sebagai penumpukan. Opsi yang dibundel adalah alias opsi karakter tunggal yang ditentukan bersama-sama setelah satu awalan tanda hubung. Hanya opsi terakhir yang dapat menentukan argumen. Misalnya, baris perintah berikut ini setara:
git clean -f -d -x
git clean -fdx
Jika argumen disediakan setelah bundel opsi, argumen tersebut berlaku untuk opsi terakhir dalam bundel. Baris perintah berikut ini setara:
myapp -a -b -c arg
myapp -abc arg
Dalam kedua varian dalam contoh ini, argumen arg
hanya akan berlaku untuk opsi -c
.
Opsi Boolean (penanda)
Jika true
atau false
diteruskan untuk opsi yang memiliki bool
argumen, opsi akan diurai seperti yang diharapkan. Tetapi opsi yang jenis argumennya bool
biasanya tidak memerlukan argumen untuk ditentukan. Opsi Boolean, kadang-kadang disebut "flag", biasanya memiliki aritasSystem.CommandLine.ArgumentArity.ZeroOrOne
. Kehadiran nama opsi pada baris perintah, tanpa argumen yang mengikutinya, menghasilkan nilai true
default . Tidak adanya nama opsi dalam input baris perintah menghasilkan nilai false
.
myapp
Jika perintah mencetak nilai opsi Boolean bernama --interactive
, input berikut membuat output berikut:
myapp
myapp --interactive
myapp --interactive false
myapp --interactive true
False
True
False
True
Opsi versi perangkat lunak
Aplikasi yang dibangun di atas System.CommandLine
secara otomatis menyediakan nomor versi menanggapi opsi --version
yang digunakan dengan perintah root. Contohnya:
dotnet --version
6.0.100
File tanggapan
File respons adalah file yang berisi sekumpulan token untuk aplikasi baris perintah. File respons adalah fitur System.CommandLine
yang berguna dalam dua skenario:
- Untuk memanggil aplikasi baris perintah dengan menentukan input yang lebih panjang dari batas karakter terminal.
- Untuk memanggil perintah yang sama berulang kali tanpa mengetik ulang seluruh baris.
Untuk menggunakan file respons, masukkan nama file yang diawali dengan tanda @
di mana pun di dalam baris yang ingin Anda sisipkan perintah, opsi, dan argumen. Ekstensi file .rsp adalah konvensi umum, tetapi Anda dapat menggunakan ekstensi file apa pun.
Baris berikut setara:
dotnet build --no-restore --output ./build-output/
dotnet @sample1.rsp
dotnet build @sample2.rsp --output ./build-output/
Isi dari sample1.rsp:
build
--no-restore
--output
./build-output/
Konten dari sample2.rsp:
--no-restore
Berikut adalah aturan sintaksis yang menentukan bagaimana teks dalam file respons ditafsirkan:
- Token dibatasi oleh spasi. Baris yang berisi Selamat pagi! diperlakukan sebagai dua token, Baik dan pagi!.
- Beberapa token yang diapit dalam tanda kutip ditafsirkan sebagai token tunggal. Baris yang berisi "Selamat pagi!" diperlakukan sebagai satu token, Selamat pagi!.
- Teks apa pun antara
#
simbol dan akhir baris diperlakukan sebagai komentar dan diabaikan. - Token yang diawali dengan
@
dapat mereferensikan file respons tambahan. - File respons dapat memiliki beberapa baris teks. Garis digabungkan dan ditafsirkan sebagai urutan token.
Petunjuk
System.CommandLine
memperkenalkan elemen sintaksis yang disebut direktif yang diwakili oleh jenis System.CommandLine.Directive
. Direktif [diagram]
adalah contoh. Saat Anda menyertakan [diagram]
setelah nama aplikasi, System.CommandLine
menampilkan diagram hasil penguraian alih-alih memanggil aplikasi baris perintah:
dotnet [diagram] build --no-restore --output ./build-output/
^-----^
[ dotnet [ build [ --no-restore <True> ] [ --output <./build-output/> ] ] ]
Tujuan direktif adalah untuk menyediakan fungsionalitas lintas fitur yang dapat berlaku untuk semua aplikasi baris perintah. Karena direktif secara sintetis berbeda dari sintaks aplikasi sendiri, mereka dapat menyediakan fungsionalitas yang berlaku di seluruh aplikasi.
Arahan harus sesuai dengan aturan sintaks berikut:
- Ini adalah token pada baris perintah yang muncul setelah nama aplikasi tetapi sebelum sub-perintah atau opsi apa pun.
- Ini dikelilingi dalam tanda kurung siku.
- Ini tidak berisi spasi.
Perintah yang tidak dikenali diabaikan tanpa menyebabkan kesalahan penguraian.
Direktif dapat menyertakan argumen, dipisahkan dari nama direktif dengan titik dua.
Direktif berikut sudah terpasang:
Petunjuk [diagram]
Pengguna dan pengembang mungkin merasa berguna untuk melihat bagaimana aplikasi akan menginterpretasikan input tertentu. Salah satu fitur bawaan aplikasi System.CommandLine
adalah instruksi [diagram]
, yang memungkinkan Anda melihat pratinjau hasil penguraian input perintah. Contohnya:
myapp [diagram] --delay not-an-int --interactive --file filename.txt extra
![ myapp [ --delay !<not-an-int> ] [ --interactive <True> ] [ --file <filename.txt> ] *[ --fgcolor <White> ] ] ???--> extra
Dalam contoh sebelumnya:
- Perintah (
myapp
), opsi turunannya, dan argumen untuk opsi tersebut dikelompokkan menggunakan tanda kurung siku. - Untuk hasil opsi
[ --delay !<not-an-int> ]
,!
menunjukkan kesalahan penguraian. Nilainot-an-int
untukint
opsi tidak dapat diurai ke jenis yang diharapkan. Kesalahan juga ditandai oleh!
di depan perintah yang berisi opsi yang salah:![ myapp...
. - Untuk hasil opsi
*[ --fgcolor <White> ]
, opsi tidak ditentukan pada baris perintah, sehingga default yang dikonfigurasi digunakan.White
adalah nilai efektif untuk opsi ini. Tanda bintang menunjukkan bahwa nilainya adalah default. -
???-->
menunjuk ke input yang tidak cocok dengan perintah atau opsi aplikasi mana pun.
Sarankan direktif
Direktif [suggest]
memungkinkan Anda mencari perintah saat Anda tidak mengetahui perintah yang tepat.
dotnet [suggest] buil
build
build-server
msbuild