Översikt över kommandoradssyntax för System.CommandLine
Viktigt!
System.CommandLine
är för närvarande i förhandsversion och den här dokumentationen är för version 2.0 beta 4.
Viss information gäller förhandsversionsprodukt som kan ändras avsevärt innan den släpps. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
I den här artikeln beskrivs den kommandoradssyntax som System.CommandLine
identifierar. Informationen är användbar för både användare och utvecklare av .NET-kommandoradsappar, inklusive .NET CLI.
Token
System.CommandLine
parsar kommandoradsindata i token, som är strängar avgränsade med blanksteg. Tänk till exempel på följande kommandorad:
dotnet tool install dotnet-suggest --global --verbosity quiet
Indata parsas av dotnet
programmet i token , tool
, install
dotnet-suggest
, --global
, , --verbosity
och quiet
.
Token tolkas som kommandon, alternativ eller argument. Kommandoradsappen som anropas avgör hur token efter den första tolkas. I följande tabell visas hur System.CommandLine
du tolkar föregående exempel:
Token | Tolkad som |
---|---|
tool |
Underkommando |
install |
Underkommando |
dotnet-suggest |
Argument för installationskommando |
--global |
Alternativ för installationskommando |
--verbosity |
Alternativ för installationskommando |
quiet |
Argument för --verbosity alternativ |
En token kan innehålla blanksteg om den omges av citattecken ("
). Här är ett exempel:
dotnet tool search "ef migrations add"
Kommandon
Ett kommando i kommandoradsindata är en token som anger en åtgärd eller definierar en grupp relaterade åtgärder. Till exempel:
run
Idotnet run
är ett kommando som anger en åtgärd.install
Idotnet tool install
är ett kommando som anger en åtgärd ochtool
är ett kommando som anger en grupp relaterade kommandon. Det finns andra verktygsrelaterade kommandon, till exempeltool uninstall
,tool list
ochtool update
.
Rotkommandon
Rotkommandot är det som anger namnet på appens körbara fil. Kommandot anger till exempel dotnet
dotnet.exe körbar fil.
Underkommandon
De flesta kommandoradsappar stöder underkommandon, även kallade verb. Kommandot har till exempel dotnet
en run
underkommando som du anropar genom att ange dotnet run
.
Underkommandon kan ha egna underkommandon. install
I dotnet tool install
är en underkommando för tool
.
Alternativ
Ett alternativ är en namngiven parameter som kan skickas till ett kommando. POSIX-CLIs prefixar vanligtvis alternativnamnet med två bindestreck (--
). I följande exempel visas två alternativ:
dotnet tool update dotnet-suggest --verbosity quiet --global
^---------^ ^------^
Som det här exemplet visar kan värdet för alternativet vara explicit (quiet
för --verbosity
) eller implicit (ingenting följer --global
). Alternativ som inte har något angivet värde är vanligtvis booleska parametrar som standard om true
alternativet anges på kommandoraden.
För vissa Windows-kommandoradsappar identifierar du ett alternativ med hjälp av ett inledande snedstreck (/
) med alternativnamnet. Till exempel:
msbuild /version
^------^
System.CommandLine
stöder både POSIX- och Windows-prefixkonventioner. När du konfigurerar ett alternativ anger du alternativnamnet inklusive prefixet.
Argument
Ett argument är ett värde som skickas till ett alternativ eller ett kommando. I följande exempel visas ett argument för verbosity
alternativet och ett argument för build
kommandot.
dotnet tool update dotnet-suggest --verbosity quiet --global
^---^
dotnet build myapp.csproj
^----------^
Argument kan ha standardvärden som gäller om inget argument uttryckligen anges. Många alternativ är till exempel implicit booleska parametrar med standardvärdet true
när alternativnamnet finns på kommandoraden. Följande kommandoradsexempel är likvärdiga:
dotnet tool update dotnet-suggest --global
^------^
dotnet tool update dotnet-suggest --global true
^-----------^
Vissa alternativ har obligatoriska argument. I .NET CLI --output
kräver till exempel ett argument för mappnamn. Om argumentet inte anges misslyckas kommandot.
Argument kan ha förväntade typer och System.CommandLine
visar ett felmeddelande om ett argument inte kan parsas till den förväntade typen. Följande kommandofel beror till exempel på att "tyst" inte är ett av de giltiga värdena för --verbosity
:
dotnet build --verbosity silent
Cannot parse argument 'silent' for option '-v' as expected type 'Microsoft.DotNet.Cli.VerbosityOptions'. Did you mean one of the following?
Detailed
Diagnostic
Minimal
Normal
Quiet
Argument har också förväntningar på hur många värden som kan anges. Exempel finns i avsnittet om argumentaritet.
Ordning på alternativ och argument
Du kan ange alternativ före argument eller argument före alternativ på kommandoraden. Följande kommandon är likvärdiga:
dotnet add package System.CommandLine --prerelease
dotnet add package --prerelease System.CommandLine
Alternativ kan anges i valfri ordning. Följande kommandon är likvärdiga:
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
När det finns flera argument spelar ordningen roll. Följande kommandon är inte nödvändigtvis likvärdiga:
myapp argument1 argument2
myapp argument2 argument1
Dessa kommandon skickar en lista med samma värden till kommandohanterarkoden, men de skiljer sig åt i ordningen på värdena, vilket kan leda till olika resultat.
Alias
I både POSIX och Windows är det vanligt att vissa kommandon och alternativ har alias. Det här är vanligtvis korta formulär som är lättare att skriva. Alias kan också användas för andra ändamål, till exempel för att simulera skiftlägeskänslighet och för att stödja alternativa stavningar av ett ord.
POSIX korta formulär har vanligtvis ett enda inledande bindestreck följt av ett enda tecken. Följande kommandon är likvärdiga:
dotnet build --verbosity quiet
dotnet build -v quiet
GNU-standarden rekommenderar automatiska alias. Det innebär att du kan ange valfri del av ett långformulärskommando eller alternativnamn så godkänns det. Det här beteendet skulle göra följande kommandorader likvärdiga:
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
stöder inte automatiska alias.
Skiftlägeskänslig
Kommando- och alternativnamn och alias är skiftlägeskänsliga som standard enligt POSIX-konventionen och System.CommandLine
följer den här konventionen. Om du vill att CLI ska vara skiftlägesokänsligt definierar du alias för de olika höljealternativen. Kan till exempel --additional-probing-path
ha alias --Additional-Probing-Path
och --ADDITIONAL-PROBING-PATH
.
I vissa kommandoradsverktyg anger en skillnad i hölje en skillnad i funktion. Till exempel git clean -X
beter sig annorlunda än git clean -x
. .NET CLI är bara gemener.
Skiftlägeskänslighet gäller inte för argumentvärden för alternativ som baseras på uppräkningar. Uppräkningsnamn matchas oavsett hölje.
Token --
POSIX-konventionen tolkar dubbelstreckstoken (--
) som en escape-mekanism. Allt som följer dubbelstreckstoken tolkas som argument för kommandot. Den här funktionen kan användas för att skicka argument som ser ut som alternativ, eftersom den förhindrar att de tolkas som alternativ.
Anta att myapp tar ett message
argument, och du vill att värdet message
för ska vara --interactive
. Följande kommandorad kan ge oväntade resultat.
myapp --interactive
Om myapp
inte har något --interactive
alternativ --interactive
tolkas token som ett argument. Men om appen har ett --interactive
alternativ tolkas dessa indata som refererar till det alternativet.
Följande kommandorad använder dubbelstreckstoken för att ange värdet för message
argumentet till "--interactive":
myapp -- --interactive
^^
System.CommandLine
stöder den här dubbelstrecksfunktionen.
Avgränsare för alternativargument
System.CommandLine
låter dig använda blanksteget "=" eller ":" som avgränsare mellan ett alternativnamn och dess argument. Följande kommandon är till exempel likvärdiga:
dotnet build -v quiet
dotnet build -v=quiet
dotnet build -v:quiet
Med en POSIX-konvention kan du utelämna avgränsare när du anger ett alternativalias med ett tecken. Följande kommandon är till exempel likvärdiga:
myapp -vquiet
myapp -v quiet
System.CommandLine stöder den här syntaxen som standard.
Argumentaritet
Arity för ett alternativ eller kommandots argument är det antal värden som kan skickas om det alternativet eller kommandot har angetts.
Arity uttrycks med ett minimivärde och ett högsta värde, vilket visas i följande tabell:
Min | Max | Exempel på giltighet | Exempel |
---|---|---|---|
0 | 0 | Giltig: | --Filen |
Ogiltig: | --file a.json | ||
Ogiltig: | --file a.json --file b.json | ||
0 | 1 | Giltig: | --Flagga |
Giltig: | --flagga sant | ||
Giltig: | --flagga falskt | ||
Ogiltig: | --flagga falskt --flagga falskt | ||
1 | 1 | Giltig: | --file a.json |
Ogiltig: | --Filen | ||
Ogiltig: | --file a.json --file b.json | ||
0 | N | Giltig: | --Filen |
Giltig: | --file a.json | ||
Giltig: | --file a.json --file b.json | ||
1 | N | Giltig: | --file a.json |
Giltig: | --file a.json b.json | ||
Ogiltig: | --Filen |
System.CommandLine
har en ArgumentArity struct för att definiera aritet, med följande värden:
- Zero – Inga värden tillåts.
- ZeroOrOne - Kan ha ett värde, kanske inte har några värden.
- ExactlyOne - Måste ha ett värde.
- ZeroOrMore – Kan ha ett värde, flera värden eller inga värden.
- OneOrMore – Kan ha flera värden, måste ha minst ett värde.
Arity kan ofta härledas från typen. Ett alternativ har till exempel int
aritet ExactlyOne
, och ett List<int>
alternativ har arity OneOrMore
.
Åsidosättningar av alternativ
Om arity maximum är 1 kan System.CommandLine
du fortfarande konfigureras för att acceptera flera instanser av ett alternativ. I så fall skriver den sista instansen av ett upprepat alternativ över alla tidigare instanser. I följande exempel skickas värdet 2 till myapp
kommandot.
myapp --delay 3 --message example --delay 2
Flera argument
Om arity maximum är mer än ett kan System.CommandLine
konfigureras för att acceptera flera argument för ett alternativ utan att upprepa alternativnamnet.
I följande exempel skulle listan som skickades till myapp
kommandot innehålla "a", "b", "c" och "d":
myapp --list a b c --list d
Alternativbuntning
POSIX rekommenderar att du stöder paketering av alternativ med en tecken, även kallat stapling. Paketerade alternativ är alternativalias med en tecken som anges tillsammans efter ett enda bindestrecksprefix. Endast det sista alternativet kan ange ett argument. Följande kommandorader är till exempel likvärdiga:
git clean -f -d -x
git clean -fdx
Om ett argument anges efter ett alternativpaket gäller det för det sista alternativet i paketet. Följande kommandorader är likvärdiga:
myapp -a -b -c arg
myapp -abc arg
I båda varianterna i det här exemplet skulle argumentet arg
endast gälla för alternativet -c
.
Booleska alternativ (flaggor)
Om true
eller false
skickas för ett alternativ med ett bool
argument parsas det som förväntat. Men ett alternativ vars argumenttyp vanligtvis bool
inte kräver att ett argument anges. Booleska alternativ, som ibland kallas "flaggor", har vanligtvis en aritet på ZeroOrOne. Förekomsten av alternativnamnet på kommandoraden, utan argument som följer, resulterar i ett standardvärde på true
. Avsaknaden av alternativnamnet i kommandoradsindata resulterar i värdet false
. myapp
Om kommandot skriver ut värdet för ett booleskt alternativ med namnet --interactive
skapar följande indata följande utdata:
myapp
myapp --interactive
myapp --interactive false
myapp --interactive true
False
True
False
True
Alternativet --help
Kommandoradsappar ger vanligtvis ett alternativ för att visa en kort beskrivning av tillgängliga kommandon, alternativ och argument. System.CommandLine
genererar automatiskt hjälputdata. Till exempel:
dotnet list --help
Description:
List references or packages of a .NET project.
Usage:
dotnet [options] list [<PROJECT | SOLUTION>] [command]
Arguments:
<PROJECT | SOLUTION> The project or solution file to operate on. If a file is not specified, the command will search the current directory for one.
Options:
-?, -h, --help Show command line help.
Commands:
package List all package references of the project or solution.
reference List all project-to-project references of the project.
Appanvändare kan vara vana vid olika sätt att begära hjälp på olika plattformar, så appar som bygger på svarar på System.CommandLine
många sätt att begära hjälp. Följande kommandon är alla likvärdiga:
dotnet --help
dotnet -h
dotnet /h
dotnet -?
dotnet /?
Hjälputdata visar inte nödvändigtvis alla tillgängliga kommandon, argument och alternativ. Vissa av dem kan vara dolda, vilket innebär att de inte visas i hjälputdata, men de kan anges på kommandoraden.
Alternativet --version
Appar som bygger på anger automatiskt versionsnumret som svar på System.CommandLine
det --version
alternativ som används med rotkommandot. Till exempel:
dotnet --version
6.0.100
Svarsfiler
En svarsfil är en fil som innehåller en uppsättning token för en kommandoradsapp. Svarsfiler är en funktion System.CommandLine
som är användbar i två scenarier:
- Så här anropar du en kommandoradsapp genom att ange indata som är längre än terminalens teckengräns.
- Så här anropar du samma kommando upprepade gånger utan att skriva om hela raden.
Om du vill använda en svarsfil anger du filnamnet som föregås av ett @
tecken oavsett var på raden du vill infoga kommandon, alternativ och argument. Filnamnstillägget .rsp är en vanlig konvention, men du kan använda valfritt filnamnstillägg.
Följande rader är likvärdiga:
dotnet build --no-restore --output ./build-output/
dotnet @sample1.rsp
dotnet build @sample2.rsp --output ./build-output/
Innehållet i sample1.rsp:
build
--no-restore
--output
./build-output/
Innehållet i sample2.rsp:
--no-restore
Här är syntaxregler som avgör hur texten i en svarsfil tolkas:
- Token avgränsas av blanksteg. En rad som innehåller God morgon! behandlas som två token, God och morgon!.
- Flera token som omges av citattecken tolkas som en enda token. En rad som innehåller "God morgon!" behandlas som en token, God morgon!.
- All text mellan en
#
symbol och slutet av raden behandlas som en kommentar och ignoreras. - Token som är prefix med
@
kan referera till ytterligare svarsfiler. - Svarsfilen kan ha flera textrader. Raderna sammanfogas och tolkas som en sekvens med token.
Direktiv
System.CommandLine
introducerar ett syntaktiskt element som kallas direktiv. Direktivet [parse]
är ett exempel. När du inkluderar [parse]
efter appens namn System.CommandLine
visas ett diagram över parsningsresultatet i stället för att anropa kommandoradsappen:
dotnet [parse] build --no-restore --output ./build-output/
^-----^
[ dotnet [ build [ --no-restore <True> ] [ --output <./build-output/> ] ] ]
Syftet med direktiven är att tillhandahålla övergripande funktioner som kan tillämpas i kommandoradsappar. Eftersom direktiven är syntaktiskt åtskilda från appens egen syntax kan de tillhandahålla funktioner som gäller för appar.
Ett direktiv måste följa följande syntaxregler:
- Det är en token på kommandoraden som kommer efter appens namn men före eventuella underkommandon eller alternativ.
- Den omges av hakparenteser.
- Den innehåller inte blanksteg.
Ett okänt direktiv ignoreras utan att orsaka ett parsningsfel.
Ett direktiv kan innehålla ett argument, avgränsat från direktivnamnet med ett kolon.
Följande direktiv är inbyggda:
Direktivet [parse]
Både användare och utvecklare kan ha nytta av att se hur en app tolkar en viss indata. En av standardfunktionerna i en System.CommandLine
app är [parse]
direktivet, som låter dig förhandsgranska resultatet av att parsa kommandoindata. Till exempel:
myapp [parse] --delay not-an-int --interactive --file filename.txt extra
![ myapp [ --delay !<not-an-int> ] [ --interactive <True> ] [ --file <filename.txt> ] *[ --fgcolor <White> ] ] ???--> extra
I exemplet ovan händer följande:
- Kommandot (
myapp
), dess underordnade alternativ och argumenten till dessa alternativ grupperas med hakparenteser. - För alternativresultatet
[ --delay !<not-an-int> ]
!
anger indikerar ett parsningsfel. Värdetnot-an-int
för ettint
alternativ kan inte parsas till den förväntade typen. Felet flaggas också av!
framför kommandot som innehåller det felade alternativet:![ myapp...
. - För alternativresultatet
*[ --fgcolor <White> ]
angavs inte alternativet på kommandoraden, så den konfigurerade standardinställningen användes.White
är det effektiva värdet för det här alternativet. Asterisken anger att värdet är standardvärdet. ???-->
pekar på indata som inte matchades med något av appens kommandon eller alternativ.
Direktivet [suggest]
Med [suggest]
direktivet kan du söka efter kommandon när du inte känner till det exakta kommandot.
dotnet [suggest] buil
build
build-server
msbuild
Riktlinjer för design
Följande avsnitt innehåller vägledning som vi rekommenderar att du följer när du utformar ett CLI. Tänk på vad din app förväntar sig på kommandoraden som liknar vad en REST API-server förväntar sig i URL:en. Konsekventa regler för REST-API:er är det som gör dem lätt användbara för klientappsutvecklare. På samma sätt får användare av dina kommandoradsappar en bättre upplevelse om CLI-designen följer vanliga mönster.
När du har skapat en CLI är det svårt att ändra, särskilt om användarna har använt cli i skript som de förväntar sig att fortsätta köra. Riktlinjerna här utvecklades efter .NET CLI och följer inte alltid dessa riktlinjer. Vi uppdaterar .NET CLI där vi kan göra det utan att införa icke-bakåtkompatibla ändringar. Ett exempel på det här arbetet är den nya designen för dotnet new
i .NET 7.
Kommandon och underkommandon
Om ett kommando har underkommandon ska kommandot fungera som ett område eller en grupperingsidentifierare för underkommandona i stället för att ange en åtgärd. När du anropar appen anger du grupperingskommandot och en av dess underkommandon. Försök till exempel att köra dotnet tool
och du får ett felmeddelande eftersom tool
kommandot endast identifierar en grupp med verktygsrelaterade underkommandon, till exempel install
och list
. Du kan köra dotnet tool install
, men dotnet tool
i sig skulle vara ofullständig.
Ett sätt att definiera områden är att organisera hjälputdata.
Inom en CLI finns det ofta ett implicit område. I .NET CLI är till exempel det implicita området projektet och i Docker CLI är det avbildningen. Därför kan du använda dotnet build
utan att inkludera ett område. Fundera på om ditt CLI har ett implicit område. Om det gör det bör du överväga om användaren ska kunna inkludera eller utelämna det som i docker build
och docker image build
. Om du vill tillåta att det implicita området skrivs av användaren får du även automatiskt hjälp och tabbavslut för den här gruppering av kommandon. Ange den valfria användningen av den implicita gruppen genom att definiera två kommandon som utför samma åtgärd.
Alternativ som parametrar
Alternativen bör ge parametrar till kommandon i stället för att ange själva åtgärderna. Detta är en rekommenderad designprincip även om den inte alltid följs av System.CommandLine
(--help
visar hjälpinformation).
Kortformatsalias
I allmänhet rekommenderar vi att du minimerar antalet kortformulärsalternativalias som du definierar.
Undvik särskilt att använda något av följande alias på ett annat sätt än deras vanliga användning i .NET CLI och andra .NET-kommandoradsappar:
-i
för--interactive
.Det här alternativet signalerar till användaren att de kan uppmanas att ange indata till frågor som kommandot behöver besvaras. Till exempel att fråga efter ett användarnamn. Cli kan användas i skript, så var försiktig när du uppmanar användare som inte har angett den här växeln.
-o
för--output
.Vissa kommandon skapar filer som ett resultat av körningen. Det här alternativet bör användas för att avgöra var filerna ska finnas. I de fall där en enskild fil skapas bör det här alternativet vara en filsökväg. I de fall där många filer skapas bör det här alternativet vara en katalogsökväg.
-v
för--verbosity
.Kommandon ger ofta utdata till användaren i konsolen. Det här alternativet används för att ange mängden utdata som användaren begär. Mer information finns i Alternativet
--verbosity
senare i den här artikeln.
Det finns också vissa alias med vanlig användning begränsad till .NET CLI. Du kan använda dessa alias för andra alternativ i dina appar, men var medveten om risken för förvirring.
-c
för--configuration
Det här alternativet refererar ofta till en med namnet Build Configuration, som
Debug
ellerRelease
. Du kan använda valfritt namn för en konfiguration, men de flesta verktyg förväntar sig ett av dessa. Den här inställningen används ofta för att konfigurera andra egenskaper på ett sätt som passar för den konfigurationen, till exempel genom att göra mindre kodoptimering när du skapar konfigurationenDebug
. Överväg det här alternativet om kommandot har olika driftlägen.-f
för--framework
Det här alternativet används för att välja en enda Target Framework Moniker (TFM) att köra för, så om ditt CLI-program har olika beteende baserat på vilken TFM som väljs bör du ha stöd för den här flaggan.
-p
för--property
Om programmet så småningom anropar MSBuild måste användaren ofta anpassa det anropet på något sätt. Med det här alternativet kan MSBuild-egenskaper anges på kommandoraden och skickas vidare till det underliggande MSBuild-anropet. Om din app inte använder MSBuild men behöver en uppsättning nyckel/värde-par kan du överväga att använda samma alternativnamn för att dra nytta av användarnas förväntningar.
-r
för--runtime
Om ditt program kan köras på olika körningar eller har körningsspecifik logik kan du överväga att stödja det här alternativet som ett sätt att ange en Körningsidentifierare. Om din app stöder --runtime bör du överväga att stödja
--os
och--arch
även. Med de här alternativen kan du bara ange operativsystemet eller arkitekturdelarna i RID, så att delen inte har angetts för att bestämmas från den aktuella plattformen. Mer information finns i dotnet publish.
Korta namn
Gör namn för kommandon, alternativ och argument så korta och enkla att stava som möjligt. Om class
är tillräckligt tydligt gör du till exempel inte kommandot classification
.
Gemener
Definiera endast namn i gemener, förutom att du kan göra versaler alias för att göra kommandon eller alternativ skiftlägesokänsliga.
Namn på Kebab-skiftläge
Använd kebabfall för att särskilja ord. Exempel: --additional-probing-path
Pluralisering
I en app ska du vara konsekvent i pluralisering. Blanda till exempel inte plural- och singularnamn för alternativ som kan ha flera värden (maximal aritet större än en):
Alternativnamn | Konsekvens |
---|---|
--additional-probing-paths och --sources |
✔️ |
--additional-probing-path och --source |
✔️ |
--additional-probing-paths och --source |
❌ |
--additional-probing-path och --sources |
❌ |
Verb kontra substantiv
Använd verb i stället för substantiv för kommandon som refererar till åtgärder (de utan underkommandon under dem), till exempel: dotnet workload remove
, inte dotnet workload removal
. Och använd substantiv i stället för verb för alternativ, till exempel: --configuration
, inte --configure
.
Alternativet --verbosity
System.CommandLine
program erbjuder vanligtvis ett --verbosity
alternativ som anger hur mycket utdata som skickas till konsolen. Här är de fem standardinställningarna:
Q[uiet]
M[inimal]
N[ormal]
D[etailed]
Diag[nostic]
Det här är standardnamnen, men befintliga appar används Silent
ibland i stället för Quiet
, och Trace
, Debug
eller Verbose
i stället för Diagnostic
.
Varje app definierar sina egna kriterier som avgör vad som visas på varje nivå. Vanligtvis behöver en app bara tre nivåer:
- Quiet
- Normal
- Diagnostik
Om en app inte behöver fem olika nivåer bör alternativet fortfarande definiera samma fem inställningar. I så fallMinimal
, och Normal
kommer att producera samma utdata, och Diagnostic
Detailed
kommer på samma sätt att vara samma. På så sätt kan användarna bara skriva det de är bekanta med, så används den bästa passformen.
Förväntningen Quiet
är att inga utdata visas på konsolen. Men om en app erbjuder ett interaktivt läge bör appen göra något av följande alternativ:
- Visa prompter för indata när
--interactive
anges, även om--verbosity
ärQuiet
. - Tillåt inte användning av
--verbosity Quiet
och--interactive
tillsammans.
Annars väntar appen på indata utan att tala om för användaren vad den väntar på. Det verkar som om programmet frös och att användaren inte har någon aning om att programmet väntar på indata.
Om du definierar alias använder -v
du för --verbosity
och gör -v
utan ett argument ett alias för --verbosity Diagnostic
. Använd -q
för --verbosity Quiet
.
.NET CLI- och POSIX-konventionerna
.NET CLI följer inte konsekvent alla POSIX-konventioner.
Dubbelstreck
Flera kommandon i .NET CLI har en särskild implementering av dubbelstreckstoken. När det gäller dotnet run
, dotnet watch
och dotnet tool run
, skickas token som följer --
till appen som körs av kommandot. Till exempel:
dotnet run --project ./myapp.csproj -- --message "Hello world!"
^^
I det här exemplet --project
skickas alternativet till dotnet run
kommandot och --message
alternativet med dess argument skickas som ett kommandoradsalternativ till myapp när det körs.
Token --
krävs inte alltid för att skicka alternativ till en app som du kör med hjälp dotnet run
av . Utan dubbelstrecket dotnet run
skickar kommandot automatiskt vidare till appen som kör alla alternativ som inte känns igen som att tillämpa på dotnet run
sig själv eller på MSBuild. Följande kommandorader är därför likvärdiga eftersom dotnet run
de inte känner igen argumenten och alternativen:
dotnet run -- quotes read --delay 0 --fg-color red
dotnet run quotes read --delay 0 --fg-color red
Utelämnande av avgränsare för alternativ till argument
.NET CLI stöder inte POSIX-konventionen som gör att du kan utelämna avgränsare när du anger ett alternativalias med ett enda tecken.
Flera argument utan att upprepa alternativnamnet
.NET CLI accepterar inte flera argument för ett alternativ utan att upprepa alternativnamnet.
Booleska alternativ
I .NET CLI resulterar vissa booleska alternativ i samma beteende när du skickar false
som när du skickar true
. Det här beteendet resulterar i att .NET CLI-kod som implementerar alternativet endast söker efter förekomsten eller frånvaron av alternativet och ignorerar värdet. Ett exempel är --no-restore
för dotnet build
kommandot. Skicka no-restore false
och återställningsåtgärden hoppas över på samma sätt som när du anger no-restore true
eller no-restore
.
Kebabväska
I vissa fall använder .NET CLI inte kebabfall för kommando-, alternativ- eller argumentnamn. Det finns till exempel ett .NET CLI-alternativ som heter --additionalprobingpath
i stället för --additional-probing-path
.