Overzicht van opdrachtregelsyntaxis voor System.CommandLine
Belangrijk
System.CommandLine
bevindt zich momenteel in PREVIEW en deze documentatie is voor versie 2.0 beta 4.
Sommige informatie heeft betrekking op voorlopige versie van het product dat aanzienlijk kan worden gewijzigd voordat het wordt vrijgegeven. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
In dit artikel worden de opdrachtregelsyntaxis uitgelegd die System.CommandLine
wordt herkend. De informatie is nuttig voor gebruikers en ontwikkelaars van .NET-opdrachtregel-apps, waaronder de .NET CLI.
Tokens
System.CommandLine
Parseert opdrachtregelinvoer in tokens, die tekenreeksen zijn gescheiden door spaties. Denk bijvoorbeeld aan de volgende opdrachtregel:
dotnet tool install dotnet-suggest --global --verbosity quiet
Deze invoer wordt door de dotnet
toepassing geparseerd in tokenstool
, , dotnet-suggest
install
, , --global
, --verbosity
en quiet
.
Tokens worden geïnterpreteerd als opdrachten, opties of argumenten. De opdrachtregel-app die wordt aangeroepen, bepaalt hoe de tokens na de eerste worden geïnterpreteerd. In de volgende tabel ziet u hoe System.CommandLine
het voorgaande voorbeeld wordt geïnterpreteerd:
Token | Geparseerd als |
---|---|
tool |
Subopdracht |
install |
Subopdracht |
dotnet-suggest |
Argument voor installatieopdracht |
--global |
Optie voor installatieopdracht |
--verbosity |
Optie voor installatieopdracht |
quiet |
Argument voor --verbosity optie |
Een token kan spaties bevatten als het tussen aanhalingstekens ("
) staat. Hier volgt een voorbeeld:
dotnet tool search "ef migrations add"
Opdracht
Een opdracht in opdrachtregelinvoer is een token dat een actie aangeeft of een groep gerelateerde acties definieert. Voorbeeld:
- In
dotnet run
,run
is een opdracht waarmee een actie wordt opgegeven. install
Isdotnet tool install
een opdracht die een actie aangeeft entool
een opdracht is waarmee een groep gerelateerde opdrachten wordt opgegeven. Er zijn andere hulpprogramma-gerelateerde opdrachten, zoalstool uninstall
,tool list
entool update
.
Hoofdopdrachten
De hoofdopdracht is de opdracht die de naam van het uitvoerbare bestand van de app opgeeft. Met de dotnet
opdracht wordt bijvoorbeeld het uitvoerbare dotnet.exe opgegeven.
Subopdrachten
De meeste opdrachtregel-apps ondersteunen subopdrachten, ook wel werkwoorden genoemd. De dotnet
opdracht heeft bijvoorbeeld een run
subopdracht die u aanroept door in te voeren dotnet run
.
Subopdrachten kunnen hun eigen subopdrachten hebben. In dotnet tool install
, install
is een subopdracht van tool
.
Opties
Een optie is een benoemde parameter die kan worden doorgegeven aan een opdracht. POSIX-CLIs geven meestal het voorvoegsel van de optienaam met twee afbreekstreepjes (--
). In het volgende voorbeeld ziet u twee opties:
dotnet tool update dotnet-suggest --verbosity quiet --global
^---------^ ^------^
Zoals in dit voorbeeld wordt geïllustreerd, is de waarde van de optie mogelijk expliciet (quiet
voor--verbosity
) of impliciet (er volgt niets).--global
Opties waarvoor geen waarde is opgegeven, zijn doorgaans Booleaanse parameters die standaard true
worden ingesteld als de optie is opgegeven op de opdrachtregel.
Voor sommige Windows-opdrachtregel-apps identificeert u een optie met behulp van een voorloopslash (/
) met de naam van de optie. Voorbeeld:
msbuild /version
^------^
System.CommandLine
ondersteunt zowel POSIX- als Windows-voorvoegselconventies. Wanneer u een optie configureert, geeft u de naam van de optie op, inclusief het voorvoegsel.
Argumenten
Een argument is een waarde die wordt doorgegeven aan een optie of een opdracht. In de volgende voorbeelden ziet u een argument voor de verbosity
optie en een argument voor de build
opdracht.
dotnet tool update dotnet-suggest --verbosity quiet --global
^---^
dotnet build myapp.csproj
^----------^
Argumenten kunnen standaardwaarden hebben die van toepassing zijn als er geen argument expliciet wordt opgegeven. Veel opties zijn bijvoorbeeld impliciet Booleaanse parameters met een standaardwaarde wanneer true
de optienaam zich op de opdrachtregel bevindt. De volgende opdrachtregelvoorbeelden zijn gelijkwaardig:
dotnet tool update dotnet-suggest --global
^------^
dotnet tool update dotnet-suggest --global true
^-----------^
Sommige opties hebben vereiste argumenten. Voor de .NET CLI --output
is bijvoorbeeld een mapnaamargument vereist. Als het argument niet is opgegeven, mislukt de opdracht.
Argumenten kunnen verwachte typen hebben en System.CommandLine
een foutbericht weergeven als een argument niet kan worden geparseerd in het verwachte type. De volgende opdrachtfouten zijn bijvoorbeeld omdat 'stil' niet een van de geldige waarden is voor --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
Argumenten hebben ook verwachtingen over het aantal waarden dat kan worden opgegeven. Voorbeelden vindt u in de sectie over argument arity.
Volgorde van opties en argumenten
U kunt opties opgeven voor argumenten of argumenten vóór opties op de opdrachtregel. De volgende opdrachten zijn equivalent:
dotnet add package System.CommandLine --prerelease
dotnet add package --prerelease System.CommandLine
Opties kunnen in elke volgorde worden opgegeven. De volgende opdrachten zijn equivalent:
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
Als er meerdere argumenten zijn, maakt de volgorde wel uit. De volgende opdrachten zijn niet noodzakelijkerwijs equivalent:
myapp argument1 argument2
myapp argument2 argument1
Met deze opdrachten wordt een lijst met dezelfde waarden doorgegeven aan de code van de opdrachthandler, maar ze verschillen in de volgorde van de waarden, wat kan leiden tot verschillende resultaten.
Aliassen
In zowel POSIX als Windows is het gebruikelijk dat sommige opdrachten en opties aliassen hebben. Dit zijn meestal korte formulieren die gemakkelijker te typen zijn. Aliassen kunnen ook worden gebruikt voor andere doeleinden, zoals het simuleren van hoofdlettergevoeligheid en het ondersteunen van alternatieve spelling van een woord.
POSIX-korte formulieren hebben meestal één voorloopafbreekstreepje gevolgd door één teken. De volgende opdrachten zijn equivalent:
dotnet build --verbosity quiet
dotnet build -v quiet
De GNU-standaard raadt automatische aliassen aan. Dat wil gezegd, u kunt een deel van een opdracht of optienaam voor een lang formulier invoeren en deze wordt geaccepteerd. Dit gedrag maakt het equivalent van de volgende opdrachtregels:
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
biedt geen ondersteuning voor automatische aliassen.
Hoofdlettergevoelig
Namen en aliassen van opdrachten en opties zijn standaard hoofdlettergevoelig volgens de POSIX-conventie en System.CommandLine
volgt deze conventie. Als u wilt dat uw CLI niet hoofdlettergevoelig is, definieert u aliassen voor de verschillende hoofdlettergebruiksalternatieven. Kan bijvoorbeeld --additional-probing-path
aliassen --Additional-Probing-Path
en --ADDITIONAL-PROBING-PATH
.
In sommige opdrachtregelprogramma's geeft een verschil in hoofdletters een verschil in functie aan. Gedraagt zich bijvoorbeeld git clean -X
anders dan git clean -x
. De .NET CLI is allemaal kleine letters.
Hoofdlettergevoeligheid is niet van toepassing op argumentwaarden voor opties die zijn gebaseerd op opsommingen. Opsommingsnamen komen overeen, ongeacht hoofdletters.
Het --
token
POSIX-conventie interpreteert het token met dubbele streepjes (--
)als een escape-mechanisme. Alles dat het token met dubbele streepjes volgt, wordt geïnterpreteerd als argumenten voor de opdracht. Deze functionaliteit kan worden gebruikt om argumenten in te dienen die eruitzien als opties, omdat hiermee wordt voorkomen dat ze worden geïnterpreteerd als opties.
Stel dat myapp een message
argument gebruikt en dat u de waarde wilt hebben--interactive
.message
De volgende opdrachtregel kan onverwachte resultaten opleveren.
myapp --interactive
Als myapp
er geen optie is --interactive
, wordt het --interactive
token geïnterpreteerd als een argument. Maar als de app wel een --interactive
optie heeft, wordt deze invoer geïnterpreteerd als verwijst naar die optie.
In de volgende opdrachtregel wordt het dubbele streepje-token gebruikt om de waarde van het message
argument in te stellen op '--interactive':
myapp -- --interactive
^^
System.CommandLine
ondersteunt deze functionaliteit met dubbele streepjes.
Scheidingstekens voor optiesargumenten
System.CommandLine
hiermee kunt u een spatie, '=' of ':' gebruiken als scheidingsteken tussen een optienaam en het bijbehorende argument. De volgende opdrachten zijn bijvoorbeeld gelijkwaardig:
dotnet build -v quiet
dotnet build -v=quiet
dotnet build -v:quiet
Met een POSIX-conventie kunt u het scheidingsteken weglaten wanneer u een optiealias met één teken opgeeft. De volgende opdrachten zijn bijvoorbeeld gelijkwaardig:
myapp -vquiet
myapp -v quiet
System.CommandLine ondersteunt deze syntaxis standaard.
Argument arity
Het argument van een optie of opdracht is het aantal waarden dat kan worden doorgegeven als deze optie of opdracht is opgegeven.
Arity wordt uitgedrukt met een minimumwaarde en een maximumwaarde, zoals in de volgende tabel wordt geïllustreerd:
Min. | Max. | Voorbeeld van geldigheid | Opmerking |
---|---|---|---|
0 | 0 | Geldig: | --Bestand |
Ongeldig: | --file a.json | ||
Ongeldig: | --file a.json --file b.json | ||
0 | 1 | Geldig: | --Vlag |
Geldig: | --vlag waar | ||
Geldig: | --vlag onwaar | ||
Ongeldig: | --vlag onwaar --vlag onwaar | ||
1 | 1 | Geldig: | --file a.json |
Ongeldig: | --Bestand | ||
Ongeldig: | --file a.json --file b.json | ||
0 | N | Geldig: | --Bestand |
Geldig: | --file a.json | ||
Geldig: | --file a.json --file b.json | ||
1 | N | Geldig: | --file a.json |
Geldig: | --file a.json b.json | ||
Ongeldig: | --Bestand |
System.CommandLine
heeft een ArgumentArity struct voor het definiëren van arity, met de volgende waarden:
- Zero - Er zijn geen waarden toegestaan.
- ZeroOrOne - Kan één waarde hebben, kan geen waarden hebben.
- ExactlyOne - Moet één waarde hebben.
- ZeroOrMore - Kan één waarde, meerdere waarden of geen waarden hebben.
- OneOrMore - Kan meerdere waarden hebben, moet ten minste één waarde hebben.
Arity kan vaak worden afgeleid van het type. Een optie heeft bijvoorbeeld int
een arity van ExactlyOne
en een List<int>
optie heeft arity OneOrMore
.
Onderdrukkingen van opties
Als het maximum voor arity 1 is, System.CommandLine
kan nog steeds worden geconfigureerd om meerdere exemplaren van een optie te accepteren. In dat geval overschrijft het laatste exemplaar van een herhaalde optie alle eerdere exemplaren. In het volgende voorbeeld wordt de waarde 2 doorgegeven aan de myapp
opdracht.
myapp --delay 3 --message example --delay 2
Meerdere argumenten
Als het maximum voor arity meer dan één is, System.CommandLine
kan worden geconfigureerd om meerdere argumenten voor één optie te accepteren zonder de naam van de optie te herhalen.
In het volgende voorbeeld bevat de lijst die is doorgegeven aan de myapp
opdracht 'a', 'b', 'c' en 'd':
myapp --list a b c --list d
Optiebundeling
POSIX raadt u aan om bundeling van opties met één teken, ook wel stacking genoemd, te ondersteunen. Gebundelde opties zijn aliassen met één teken die samen zijn opgegeven na één koppeltekenvoorvoegsel. Alleen de laatste optie kan een argument opgeven. De volgende opdrachtregels zijn bijvoorbeeld gelijkwaardig:
git clean -f -d -x
git clean -fdx
Als er een argument wordt opgegeven na een optiebundel, is dit van toepassing op de laatste optie in de bundel. De volgende opdrachtregels zijn equivalent:
myapp -a -b -c arg
myapp -abc arg
In beide varianten in dit voorbeeld is het argument arg
alleen van toepassing op de optie -c
.
Booleaanse opties (vlaggen)
Als true
of false
wordt doorgegeven voor een optie met een bool
argument, wordt deze geparseerd zoals verwacht. Maar voor een optie waarvan het argumenttype bool
doorgaans geen argument is vereist, moet er geen argument worden opgegeven. Booleaanse opties, ook wel 'vlaggen' genoemd, hebben meestal een arity van ZeroOrOne. De aanwezigheid van de optienaam op de opdrachtregel, zonder argument erop te volgen, resulteert in een standaardwaarde van true
. Het ontbreken van de optienaam in de opdrachtregelinvoer resulteert in een waarde van false
. Als de myapp
opdracht de waarde van een Booleaanse optie met de naam --interactive
afdrukt, wordt met de volgende invoer de volgende uitvoer gemaakt:
myapp
myapp --interactive
myapp --interactive false
myapp --interactive true
False
True
False
True
De optie --help
Opdrachtregel-apps bieden doorgaans een optie om een korte beschrijving weer te geven van de beschikbare opdrachten, opties en argumenten. System.CommandLine
genereert automatisch Help-uitvoer. Voorbeeld:
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.
App-gebruikers zijn mogelijk gewend aan verschillende manieren om hulp op verschillende platforms aan te vragen, zodat apps die zijn gebouwd op System.CommandLine
veel manieren om hulp te vragen, reageren. De volgende opdrachten zijn allemaal equivalent:
dotnet --help
dotnet -h
dotnet /h
dotnet -?
dotnet /?
In de Help-uitvoer worden niet noodzakelijkerwijs alle beschikbare opdrachten, argumenten en opties weergegeven. Sommige hiervan zijn mogelijk verborgen, wat betekent dat ze niet worden weergegeven in de Help-uitvoer, maar ze kunnen worden opgegeven op de opdrachtregel.
De optie --version
Apps die zijn gebouwd System.CommandLine
, geven automatisch het versienummer op als reactie op de --version
optie die wordt gebruikt met de hoofdopdracht. Voorbeeld:
dotnet --version
6.0.100
Antwoordbestanden
Een antwoordbestand is een bestand dat een set tokens voor een opdrachtregel-app bevat. Antwoordbestanden zijn een functie die System.CommandLine
nuttig is in twee scenario's:
- Als u een opdrachtregel-app wilt aanroepen door invoer op te geven die langer is dan de tekenlimiet van de terminal.
- Als u dezelfde opdracht herhaaldelijk wilt aanroepen zonder de hele regel opnieuw te typen.
Als u een antwoordbestand wilt gebruiken, voert u de bestandsnaam in die wordt voorafgegaan door een @
teken, waar u op de regel opdrachten, opties en argumenten wilt invoegen. De bestandsextensie .rsp is een gangbare conventie, maar u kunt elke bestandsextensie gebruiken.
De volgende regels zijn gelijkwaardig:
dotnet build --no-restore --output ./build-output/
dotnet @sample1.rsp
dotnet build @sample2.rsp --output ./build-output/
Inhoud van sample1.rsp:
build
--no-restore
--output
./build-output/
Inhoud van sample2.rsp:
--no-restore
Hier volgen syntaxisregels die bepalen hoe de tekst in een antwoordbestand wordt geïnterpreteerd:
- Tokens worden gescheiden door spaties. Een lijn die Goedemorgen bevat ! wordt behandeld als twee tokens, Goed en morgen!.
- Meerdere tokens tussen aanhalingstekens worden geïnterpreteerd als één token. Een lijn met 'Goedemorgen!' wordt behandeld als één token, Goedemorgen!.
- Tekst tussen een
#
symbool en het einde van de regel wordt behandeld als een opmerking en genegeerd. - Tokens die zijn voorafgegaan door
@
, kunnen verwijzen naar aanvullende antwoordbestanden. - Het antwoordbestand kan meerdere regels tekst bevatten. De regels worden samengevoegd en geïnterpreteerd als een reeks tokens.
Richtlijnen
System.CommandLine
introduceert een syntactisch element dat een richtlijn wordt genoemd. De [parse]
richtlijn is een voorbeeld. Wanneer u de naam van de app opneemt [parse]
, System.CommandLine
wordt een diagram van het parseringsresultaat weergegeven in plaats van de opdrachtregel-app aan te roepen:
dotnet [parse] build --no-restore --output ./build-output/
^-----^
[ dotnet [ build [ --no-restore <True> ] [ --output <./build-output/> ] ] ]
Het doel van instructies is om kruislingse functionaliteit te bieden die kan worden toegepast op opdrachtregel-apps. Omdat instructies syntactisch verschillen van de eigen syntaxis van de app, kunnen ze functionaliteit bieden die van toepassing is op alle apps.
Een richtlijn moet voldoen aan de volgende syntaxisregels:
- Het is een token op de opdrachtregel die na de naam van de app komt, maar vóór eventuele subopdrachten of opties.
- Het zit tussen vierkante haken.
- Het bevat geen spaties.
Een niet-herkende instructie wordt genegeerd zonder een parseringsfout te veroorzaken.
Een richtlijn kan een argument bevatten, gescheiden van de naam van de richtlijn door een dubbele punt.
De volgende instructies zijn ingebouwd:
De [parse]
richtlijn
Zowel gebruikers als ontwikkelaars kunnen het nuttig vinden om te zien hoe een app een bepaalde invoer interpreteert. Een van de standaardfuncties van een System.CommandLine
app is de [parse]
instructie, waarmee u een voorbeeld kunt bekijken van het resultaat van het parseren van opdrachtinvoer. Voorbeeld:
myapp [parse] --delay not-an-int --interactive --file filename.txt extra
![ myapp [ --delay !<not-an-int> ] [ --interactive <True> ] [ --file <filename.txt> ] *[ --fgcolor <White> ] ] ???--> extra
In het voorgaande voorbeeld:
- De opdracht (
myapp
), de onderliggende opties en de argumenten voor deze opties worden gegroepeerd met vierkante haken. - Voor het resultaat van de optie
[ --delay !<not-an-int> ]
!
wordt een parseringsfout aangegeven. De waardenot-an-int
voor eenint
optie kan niet worden geparseerd naar het verwachte type. De fout wordt ook gemarkeerd voor!
de opdracht die de fout bevat:![ myapp...
. - Voor het resultaat van de optie
*[ --fgcolor <White> ]
is de optie niet opgegeven op de opdrachtregel, dus de geconfigureerde standaardwaarde is gebruikt.White
is de effectieve waarde voor deze optie. Het sterretje geeft aan dat de waarde de standaardwaarde is. ???-->
verwijst naar invoer die niet overeenkomt met de opdrachten of opties van de app.
De [suggest]
richtlijn
Met de [suggest]
instructie kunt u zoeken naar opdrachten wanneer u de exacte opdracht niet weet.
dotnet [suggest] buil
build
build-server
msbuild
Ontwerprichtlijnen
De volgende secties bevatten richtlijnen die u wordt aangeraden te volgen bij het ontwerpen van een CLI. Bedenk wat uw app verwacht op de opdrachtregel, net zoals een REST API-server in de URL verwacht. Consistente regels voor REST API's maken ze gemakkelijk bruikbaar voor client-app-ontwikkelaars. Op dezelfde manier hebben gebruikers van uw opdrachtregel-apps een betere ervaring als het CLI-ontwerp algemene patronen volgt.
Zodra u een CLI hebt gemaakt, is het moeilijk om te wijzigen, met name als uw gebruikers uw CLI hebben gebruikt in scripts die ze verwachten te blijven uitvoeren. De richtlijnen hier zijn ontwikkeld na de .NET CLI en volgen deze richtlijnen niet altijd. We werken de .NET CLI bij, waar we dit kunnen doen zonder wijzigingen die fouten veroorzaken. Een voorbeeld van dit werk is het nieuwe ontwerp voor dotnet new
.NET 7.
Opdrachten en subopdrachten
Als een opdracht subopdrachten heeft, moet de opdracht fungeren als een gebied of een groeperings-id voor de subopdrachten in plaats van een actie op te geven. Wanneer u de app aanroept, geeft u de groepsopdracht en een van de bijbehorende subopdrachten op. Probeer bijvoorbeeld uit te voeren dotnet tool
en u krijgt een foutbericht omdat de tool
opdracht alleen een groep hulpprogramma-gerelateerde subopdrachten identificeert, zoals install
en list
. U kunt uitvoeren dotnet tool install
, maar dotnet tool
op zichzelf zou onvolledig zijn.
Een van de manieren waarop u gebieden definieert, is dat de Help-uitvoer wordt ingedeeld.
Binnen een CLI is er vaak een impliciet gebied. In de .NET CLI is het impliciete gebied bijvoorbeeld het project en in de Docker CLI is dit de installatiekopieën. Als gevolg hiervan kunt u zonder dotnet build
een gebied gebruiken. Overweeg of uw CLI een impliciet gebied heeft. Als dat het geval is, kunt u overwegen of de gebruiker deze optioneel mag opnemen of weglaten zoals in docker build
en docker image build
. Als u optioneel het impliciete gebied toestaat dat door uw gebruiker wordt getypt, hebt u ook automatisch hulp en tabvoltooiing voor deze groepering van opdrachten. Geef het optionele gebruik van de impliciete groep op door twee opdrachten te definiëren die dezelfde bewerking uitvoeren.
Opties als parameters
Opties moeten parameters voor opdrachten bieden in plaats van zelf acties op te geven. Dit is een aanbevolen ontwerpprincipe, hoewel dit niet altijd wordt gevolgd System.CommandLine
door (--help
geeft help-informatie weer).
Korte aliassen
Over het algemeen raden we u aan om het aantal korte-formulieroptiealiassen dat u definieert, te minimaliseren.
Vermijd met name het gebruik van een van de volgende aliassen anders dan het gebruikelijke gebruik in de .NET CLI en andere .NET-opdrachtregel-apps:
-i
voor--interactive
.Met deze optie wordt aan de gebruiker aangegeven dat er mogelijk om invoer wordt gevraagd voor vragen die door de opdracht moeten worden beantwoord. Bijvoorbeeld het vragen om een gebruikersnaam. Uw CLI kan worden gebruikt in scripts, dus wees voorzichtig bij het vragen van gebruikers die deze switch niet hebben opgegeven.
-o
voor--output
.Sommige opdrachten produceren bestanden als gevolg van hun uitvoering. Deze optie moet worden gebruikt om te bepalen waar die bestanden zich moeten bevinden. In gevallen waarin één bestand wordt gemaakt, moet deze optie een bestandspad zijn. In gevallen waarin veel bestanden worden gemaakt, moet deze optie een mappad zijn.
-v
voor--verbosity
.Opdrachten bieden vaak uitvoer aan de gebruiker op de console; deze optie wordt gebruikt om de hoeveelheid uitvoer op te geven die de gebruikersaanvragen aanvragen. Zie de
--verbosity
optie verderop in dit artikel voor meer informatie.
Er zijn ook enkele aliassen met algemeen gebruik beperkt tot de .NET CLI. U kunt deze aliassen gebruiken voor andere opties in uw apps, maar houd rekening met de mogelijkheid van verwarring.
-c
voor--configuration
Deze optie verwijst vaak naar een benoemde buildconfiguratie, zoals
Debug
ofRelease
. U kunt elke gewenste naam voor een configuratie gebruiken, maar de meeste hulpprogramma's verwachten een van deze. Deze instelling wordt vaak gebruikt om andere eigenschappen te configureren op een manier die zinvol is voor die configuratie, bijvoorbeeld om minder codeoptimalisatie uit te voeren bij het bouwen van deDebug
configuratie. Houd rekening met deze optie als uw opdracht verschillende bewerkingsmodi heeft.-f
voor--framework
Deze optie wordt gebruikt om één Target Framework Moniker (TFM) te selecteren voor uitvoering, dus als uw CLI-toepassing verschillend gedrag heeft op basis van welke TFM is gekozen, moet u deze vlag ondersteunen.
-p
voor--property
Als uw toepassing uiteindelijk MSBuild aanroept, moet de gebruiker die aanroep vaak op een of andere manier aanpassen. Met deze optie kunnen MSBuild-eigenschappen worden opgegeven op de opdrachtregel en worden doorgegeven aan de onderliggende MSBuild-aanroep. Als uw app geen GEBRUIK maakt van MSBuild, maar een set sleutel-waardeparen nodig heeft, kunt u overwegen om dezelfde optienaam te gebruiken om te profiteren van de verwachtingen van gebruikers.
-r
voor--runtime
Als uw toepassing kan worden uitgevoerd op verschillende runtimes of runtimespecifieke logica heeft, kunt u overwegen deze optie te ondersteunen als een manier om een runtime-id op te geven. Als uw app ondersteuning biedt voor --runtime, kunt u overwegen ondersteuning te bieden
--os
en--arch
ook. Met deze opties kunt u alleen het besturingssysteem of de architectuuronderdelen van de RID opgeven, zodat het onderdeel niet wordt bepaald op basis van het huidige platform. Zie dotnet publish voor meer informatie.
Korte namen
Maak namen voor opdrachten, opties en argumenten zo kort en eenvoudig mogelijk te spellen. Als het bijvoorbeeld class
duidelijk genoeg is, maakt u de opdracht classification
niet.
Namen van kleine letters
Definieer alleen namen in kleine letters, behalve dat u hoofdletteraliassen kunt maken om opdrachten of opties hoofdlettergevoelig te maken.
Namen van namen van hoofdletters
Gebruik de hoofdletters om woorden te onderscheiden. Bijvoorbeeld: --additional-probing-path
.
Pluralisatie
Binnen een app moet u consistent zijn in pluralisatie. Combineer bijvoorbeeld geen meervouds- en enkelvoudige namen voor opties die meerdere waarden kunnen hebben (maximale ariteit groter dan één):
Optienamen | Consistentie |
---|---|
--additional-probing-paths en --sources |
✔️ |
--additional-probing-path en --source |
✔️ |
--additional-probing-paths en --source |
❌ |
--additional-probing-path en --sources |
❌ |
Werkwoorden versus zelfstandige naamwoorden
Gebruik werkwoorden in plaats van zelfstandige naamwoorden voor opdrachten die verwijzen naar acties (zonder subopdrachten eronder), bijvoorbeeld: dotnet workload remove
, niet dotnet workload removal
. En gebruik zelfstandige naamwoorden in plaats van werkwoorden voor opties, bijvoorbeeld: --configuration
, niet --configure
.
De --verbosity
optie
System.CommandLine
toepassingen bieden doorgaans een --verbosity
optie die aangeeft hoeveel uitvoer naar de console wordt verzonden. Dit zijn de standaard vijf instellingen:
Q[uiet]
M[inimal]
N[ormal]
D[etailed]
Diag[nostic]
Dit zijn de standaardnamen, maar bestaande apps gebruiken Silent
soms in plaats van Quiet
, en Trace
, Debug
of Verbose
in plaats van Diagnostic
.
Elke app definieert zijn eigen criteria die bepalen wat er op elk niveau wordt weergegeven. Normaal gesproken heeft een app slechts drie niveaus nodig:
- Quiet
- Normaal
- Diagnose
Als een app geen vijf verschillende niveaus nodig heeft, moet de optie nog steeds dezelfde vijf instellingen definiëren. In dat geval Minimal
zal deze Normal
dezelfde uitvoer produceren en Detailed
Diagnostic
hetzelfde zijn. Hierdoor kunnen uw gebruikers gewoon typen waar ze bekend mee zijn en de beste pasvorm wordt gebruikt.
De verwachting Quiet
is dat er geen uitvoer wordt weergegeven op de console. Als een app echter een interactieve modus biedt, moet de app een van de volgende alternatieven uitvoeren:
- Geeft prompts weer voor invoer wanneer
--interactive
is opgegeven, zelfs als--verbosity
dat het isQuiet
. - Het gebruik van
--verbosity Quiet
en--interactive
samen niet toe te laten.
Anders wacht de app op invoer zonder de gebruiker te vertellen waar deze op wacht. Het lijkt erop dat uw toepassing bevroren is en dat de gebruiker geen idee heeft dat de toepassing wacht op invoer.
Als u aliassen definieert, gebruikt -v
u hiervoor --verbosity
en maakt -v
u zonder een argument een alias voor --verbosity Diagnostic
. Gebruiken -q
voor --verbosity Quiet
.
De .NET CLI- en POSIX-conventies
De .NET CLI volgt niet consistent alle POSIX-conventies.
Dubbel streepje
Verschillende opdrachten in de .NET CLI hebben een speciale implementatie van het token met dubbele streepjes. In het geval van dotnet run
tokens dotnet watch
die volgen--
, dotnet tool run
worden tokens doorgegeven aan de app die door de opdracht wordt uitgevoerd. Voorbeeld:
dotnet run --project ./myapp.csproj -- --message "Hello world!"
^^
In dit voorbeeld wordt de --project
optie doorgegeven aan de dotnet run
opdracht en wordt de --message
optie met het argument ervan doorgegeven als een opdrachtregeloptie aan myapp wanneer deze wordt uitgevoerd.
Het --
token is niet altijd vereist voor het doorgeven van opties aan een app die u uitvoert met behulp van dotnet run
. Zonder het dubbele streepje wordt de dotnet run
opdracht automatisch doorgegeven aan de app waarbij opties worden uitgevoerd die niet worden herkend als van toepassing op dotnet run
zichzelf of op MSBuild. De volgende opdrachtregels zijn dus gelijkwaardig omdat dotnet run
de argumenten en opties niet worden herkend:
dotnet run -- quotes read --delay 0 --fg-color red
dotnet run quotes read --delay 0 --fg-color red
Weglating van het scheidingsteken voor optie-naar-argument
De .NET CLI biedt geen ondersteuning voor de POSIX-conventie waarmee u het scheidingsteken weglaat wanneer u een alias voor één teken opgeeft.
Meerdere argumenten zonder de naam van de optie te herhalen
De .NET CLI accepteert niet meerdere argumenten voor één optie zonder de naam van de optie te herhalen.
Booleaanse opties
In de .NET CLI resulteren sommige Booleaanse opties in hetzelfde gedrag wanneer u doorgeeft als wanneer u doorgeeft false
true
. Dit gedrag treedt op wanneer .NET CLI-code waarmee de optie wordt geïmplementeerd, alleen wordt gecontroleerd op de aanwezigheid of afwezigheid van de optie, waarbij de waarde wordt genegeerd. Een voorbeeld is --no-restore
voor de dotnet build
opdracht. Doorgeven no-restore false
en de herstelbewerking wordt overgeslagen hetzelfde als wanneer u opgeeft no-restore true
of no-restore
.
De case Van Den
In sommige gevallen wordt in de .NET CLI geen gebruikgemaakt van de case voor opdrachten, opties of argumentnamen. Er is bijvoorbeeld een .NET CLI-optie met de naam --additionalprobingpath
in plaats van --additional-probing-path
.