.NET Core-CLI-Aufgabe
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
Hinweis
Die NuGet Authentifizierungsaufgabe ist die neue empfohlene Methode zum Authentifizieren mit Azure Artifacts und anderen NuGet Repositorys. Die Wiederherstellungs- und Pushbefehle dieser .NET Core CLI-Aufgabe nehmen keine neuen Features mehr, und nur kritische Fehler werden behoben.
Azure Pipelines
Verwenden Sie diese Aufgabe zum Erstellen, Testen, Verpacken oder Veröffentlichen einer dotnet-Anwendung oder zum Ausführen eines benutzerdefinierten Dotnet-Befehls. Für Paketbefehle unterstützt diese Aufgabe NuGet.org und authentifizierte Feeds wie Paketverwaltung und MyGet.
Wenn Ihr .NET Core- oder .NET-Standard-Build von NuGet Paketen abhängt, müssen Sie zwei Kopien dieses Schritts hinzufügen: eine mit dem Befehl und einer mit dem restore
build
Befehl.
Hinweis
In Microsoft Team Foundation Server (TFS) 2018 und früheren Versionen werden Build- und Release-Pipelines als Definitionen bezeichnet, Ausführungen werden als Builds bezeichnet, Dienstverbindungen werden als Dienstendpunkte bezeichnet, Stages werden als Umgebungen bezeichnet und Aufträge werden als Phasen bezeichnet.
YAML-Codeausschnitt
# .NET Core
# Build, test, package, or publish a dotnet application, or run a custom dotnet command
- task: DotNetCoreCLI@2
inputs:
#command: 'build' # Options: build, push, pack, publish, restore, run, test, custom
#publishWebProjects: true # Required when command == Publish
#projects: # Optional
#custom: # Required when command == Custom
#arguments: # Optional
#publishTestResults: true # Optional
#testRunTitle: # Optional
#zipAfterPublish: true # Optional
#modifyOutputPath: true # Optional
#feedsToUse: 'select' # Options: select, config
#vstsFeed: # Required when feedsToUse == Select
#feedRestore: # Required when command == restore. projectName/feedName for project-scoped feed. FeedName only for organization-scoped feed.
#includeNuGetOrg: true # Required when feedsToUse == Select
#nugetConfigPath: # Required when feedsToUse == Config
#externalFeedCredentials: # Optional
#noCache: false
restoreDirectory:
#restoreArguments: # Optional
#verbosityRestore: 'Detailed' # Options: -, quiet, minimal, normal, detailed, diagnostic
#packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg' # Required when command == Push
#nuGetFeedType: 'internal' # Required when command == Push# Options: internal, external
#publishVstsFeed: # Required when command == Push && NuGetFeedType == Internal
#publishPackageMetadata: true # Optional
#publishFeedCredentials: # Required when command == Push && NuGetFeedType == External
#packagesToPack: '**/*.csproj' # Required when command == Pack
#packDirectory: '$(Build.ArtifactStagingDirectory)' # Optional
#nobuild: false # Optional
#includesymbols: false # Optional
#includesource: false # Optional
#versioningScheme: 'off' # Options: off, byPrereleaseNumber, byEnvVar, byBuildNumber
#versionEnvVar: # Required when versioningScheme == byEnvVar
#majorVersion: '1' # Required when versioningScheme == ByPrereleaseNumber
#minorVersion: '0' # Required when versioningScheme == ByPrereleaseNumber
#patchVersion: '0' # Required when versioningScheme == ByPrereleaseNumber
#buildProperties: # Optional
#verbosityPack: 'Detailed' # Options: -, quiet, minimal, normal, detailed, diagnostic
workingDirectory:
Argumente
Argument | BESCHREIBUNG |
---|---|
command Befehl | Der zu ausführende Dotnet-Befehl. Wählen Sie custom aus, um Argumente hinzuzufügen oder einen befehl zu verwenden, der hier nicht aufgeführt ist.Optionen: build , push pack publish restore run test custom |
selectOrConfig Zu verwendende Feeds | Sie können entweder einen Feed aus Azure Artifacts und/oder NuGet.org hier auswählen oder eine NuGet.config Datei in Ihr Quellcode-Repository festlegen und den Pfad mithilfe des nugetConfigPath Arguments festlegen.Optionen: select , config Argumentalias: feedsToUse |
versioningScheme Automatische Paketversionierung | Es kann nicht mit referenzierten Projekten verwendet werden. Wenn Sie "Datum und Uhrzeit verwenden" auswählen, generiert dies eine SemVer-kompatible Version, die wie bei der Auswahl von X, Y und Z formatiert X.Y.Z-ci-datetime ist.Wenn Sie "Umgebungsvariable verwenden" auswählen, müssen Sie eine Umgebungsvariable auswählen und sicherstellen, dass sie die Versionsnummer enthält, die Sie verwenden möchten. Wenn Sie "Buildnummer verwenden" auswählen, wird die Buildnummer verwendet, um Ihr Paket zu versionieren. Hinweis: Unter "Optionen" wird das Buildnummerformat auf "$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)" festgelegt. |
arguments Argumente | Argumente zum ausgewählten Befehl. Beispiel: Buildkonfiguration, Ausgabeordner, Laufzeit. Die Argumente hängen von dem ausgewählten Befehl ab. Hinweis: Diese Eingabe akzeptiert derzeit nur Argumente für build , publish run test , . custom Wenn Sie Argumente für einen nicht aufgeführten Befehl hinzufügen möchten, verwenden Sie custom . |
projects Pfad zu Projekt(n) | Der zu verwendende Pfad zur csproj-Datei(n) Sie können Wildcards (z. B. **/*.csproj für alle CSPROj-Dateien in allen Unterordnern) verwenden, siehe Dateiabgleichsmuster. |
noCache Deaktivieren des lokalen Caches | Verhindert, dass NuGet Pakete aus lokalen Computercaches verwenden. |
restoreArguments Wiederherstellen von Argumenten | Schreiben Sie die zusätzlichen Argumente, die an den restore Befehl übergeben werden sollen. |
packagesDirectory Zielverzeichnis | Gibt den Ordner an, in dem Pakete installiert sind. Wenn kein Ordner angegeben ist, werden Pakete im Standard-NuGet Paketcache wiederhergestellt. Argumentalias: restoreDirectory |
buildProperties Zusätzliche Buildeigenschaften | Gibt eine Liste von Paaren an, die durch Semikolon getrennt sind, wobei jedes Vorkommen von token = value $token$ in der Nuspec-Datei durch den angegebenen Wert ersetzt wird. Werte können Zeichenfolgen in Anführungszeichen sein |
verbosityPack Ausführlichkeit | Gibt die Detailmenge an, die in der Ausgabe für den pack Befehl angezeigt wird. |
verbosityRestore Ausführlichkeit | Gibt die Detailmenge an, die in der Ausgabe für den restore Befehl angezeigt wird. |
workingDirectory Arbeitsverzeichnis | Aktuelles Arbeitsverzeichnis, in dem das Skript ausgeführt wird. Leer ist der Stamm des Repo (Build) oder Artefakte (Release), der $(System.DefaultWorkingDirectory) ist. |
searchPatternPush Pfad zu NuGet Paketen, die veröffentlicht werden sollen | Das Muster zum Anpassen oder Pfad zu nupkg-Dateien, die hochgeladen werden sollen. Mehrere Muster können durch ein Semikolon getrennt werden, und Sie können ein Muster negativ machen, indem Sie ihn präfixieren.! Beispiel:**/*.nupkg;!**/*.Tests.nupkg. Argumentalias: packagesToPush |
nuGetFeedType Zielfeedspeicherort | Gibt an, ob der Zielfeed intern oder extern ist. Optionen: internal , external |
feedPublish Zielfeed | Wählen Sie einen Feed aus, der in Ihrer Organisation gehostet wird. Sie müssen die Paketverwaltung installiert und lizenziert haben, um hier einen Feed auszuwählen. Argumentalias: publishVstsFeed |
publishPackageMetadata Veröffentlichen von Pipelinemetadaten | Zuordnen der Metadaten dieser Build-/Release-Pipeline (Ausführen-ID, Quellcodeinformationen) mit dem Paket |
externalEndpoint NuGet Server | Die NuGet Dienstverbindung, die die Anmeldeinformationen des externen NuGet Servers enthält. Argumentalias: publishFeedCredentials |
searchPatternPack Pfad zu csproj- oder Nuspec-Datei(n) zum Packen | Muster zum Suchen nach csproj- oder Nuspec-Dateien zum Packen. Sie können mehrere Muster mit einem Semikolon trennen, und Sie können ein Muster negativ machen, indem Sie sie vorstellen.! Beispiel:**/*.csproj;!**/*.Tests.csproj Argumentalias: packagesToPack |
configurationToPack Konfiguration in Paket | Wenn Sie eine csproj-Datei verwenden, gibt dies die Konfiguration zum Paket an. Argumentalias: configuration |
outputDir Paketordner | Ordner, in dem Pakete erstellt werden. Wenn leer, werden Pakete neben der csproj-Datei erstellt. Argumentalias: packDirectory |
nobuild Erstellen Sie nicht | Erstellt das Projekt nicht vor dem Packen. Entspricht dem --no-build Parameter des Befehls "Build". |
includesymbols Symbole einschließen | Erstellt außerdem Symbol NuGet Pakete. Entspricht dem --include-symbols Befehlszeilenparameter. |
includesource Quelle einschließen | Enthält Quellcode im Paket. Entspricht dem --include-source Befehlszeilenparameter. |
publishWebProjects Veröffentlichen von Webprojekten | Wenn true der projects Eigenschaftswert übersprungen wird, und die Aufgabe versucht, die Webprojekte im Repository zu finden und den Veröffentlichungsbefehl darauf auszuführen. Webprojekte werden durch Anwesenheit einer web.config Datei oder eines wwwroot-Ordners im Verzeichnis identifiziert. In Abwesenheit einer web.config Datei oder eines wwwroot-Ordners sind Projekte, die ein Web SDK verwenden, wie Microsoft.NET.Sdk.Web, ausgewählt. Beachten Sie, dass dieses Argument standardisiert ist true , wenn nicht angegeben. |
zipAfterPublish Zip veröffentlichter Projekte | Wenn true der von dem Veröffentlichungsbefehl erstellte Ordner komprimiert und gelöscht wird. |
modifyOutputPath Hinzufügen des Projektnamens zum Veröffentlichen des Pfads | Wenn true von dem Veröffentlichungsbefehl erstellte Ordner den Projektdateinamen präfixiert haben, wenn der Ausgabepfad explizit in Argumenten angegeben wird. Dies ist nützlich, wenn Sie mehrere Projekte in demselben Ordner veröffentlichen möchten. |
publishTestResults Testergebnisse veröffentlichen | Wenn Sie diese Option aktivieren, wird eine TRX-Testergebnissedatei $(Agent.TempDirectory) generiert, und Die Ergebnisse werden auf dem Server veröffentlicht. Diese Option fügt an die Befehlszeilenargumente --logger trx --results-directory $(Agent.TempDirectory) an.Codeabdeckung kann gesammelt werden, indem Sie die Befehlszeilenargumente hinzufügen --collect "Code coverage" . |
testRunTitle Testlauftitel | Stellt einen Namen für die Testausführung bereit. |
custom Benutzerdefinierter Befehl | Der Befehl zum Übergeben an dotnet.exe für die Ausführung. Eine vollständige Liste der verfügbaren Befehle finden Sie in der dotnet CLI-Dokumentation |
feedRestore Verwenden von Paketen aus diesem Azure Artifacts/TFS-Feed | Fügen Sie den ausgewählten Feed in die generierte NuGet.config ein. Sie müssen die Paketverwaltung installiert und lizenziert haben, um hier einen Feed auszuwählen. projectName/feedName für Projektbereichsfeed. FeedName nur für den Organisationsbereichsfeed. Beachten Sie, dass dies für den Testbefehl nicht unterstützt wird. Argumentalias: vstsFeed |
includeNuGetOrg Verwenden von Paketen aus NuGet.org | Fügen Sie NuGet.org in die generierte NuGet.config000 0 ein. |
nugetConfigPath Pfad zu NuGet.config | Das NuGet.config in Ihrem Repository, das die Feeds angibt, von denen Pakete wiederhergestellt werden sollen. |
externalEndpoints Anmeldeinformationen für Feeds außerhalb dieser Organisation/Auflistung | Anmeldeinformationen, die für externe Registrierungen im ausgewählten NuGet.config verwendet werden sollen. Für Feeds in dieser Organisation/Auflistung lassen Sie diesen Leerzeichen; Die Anmeldeinformationen des Builds werden automatisch verwendet. Argumentalias: externalFeedCredentials |
versionEnvVar Umgebungsvariable | Geben Sie den Variablennamen ohne $, $env oder % ein. |
requestedMajorVersion Hauptversion | Das 'X' in Version X.Y.Z. Argumentalias: majorVersion |
requestedMinorVersion Nebenversion | Die "Y" in Version X.Y.Z. Argumentalias: minorVersion |
requestedPatchVersion Patch | Die "Z" in Version X.Y.Z. Argumentalias: patchVersion |
Beispiele
Build
Erstellen eines Projekts
# Build project
- task: DotNetCoreCLI@2
inputs:
command: 'build'
Erstellen mehrerer Projekte
# Build multiple projects
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: |
src/proj1/proj1.csproj
src/proj2/proj2.csproj
src/other/other.sln # Pass a solution instead of a csproj.
Push
Push NuGet Pakete an interne Feed
# Push non test NuGet packages from a build to internal organization Feed
- task: DotNetCoreCLI@2
inputs:
command: 'push'
searchPatternPush: '$(Build.ArtifactStagingDirectory)/*.nupkg;!$(Build.ArtifactStagingDirectory)/*.Tests.nupkg'
feedPublish: 'FabrikamFeed'
Push NuGet Pakete an externe Feed
# Push all NuGet packages from a build to external Feed
- task: DotNetCoreCLI@2
inputs:
command: 'push'
nugetFeedType: 'external'
externalEndPoint: 'MyNuGetServiceConnection'
Pack
Packen eines NuGetPackage auf ein bestimmtes Ausgabeverzeichnis
# Pack a NuGet package to a test directory
- task: DotNetCoreCLI@2
inputs:
command: 'pack'
outputDir: '$(Build.ArtifactStagingDirectory)/TestDir'
Packen eines Symbolpakets
# Pack a symbol package along with NuGet package
- task: DotNetCoreCLI@2
inputs:
command: 'pack'
includesymbols: true
Veröffentlichen
Veröffentlichen von Projekten in angegebenen Ordner
# Publish projects to specified folder.
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: 'publish'
publishWebProjects: false
projects: '**/*.csproj'
arguments: '-o $(Build.ArtifactStagingDirectory)/Output'
zipAfterPublish: true
modifyOutputPath: true
Restore
#Restore packages with the .NET Core CLI task
- task: DotNetCoreCLI@2
displayName: 'dotnet restore'
inputs:
command: 'restore'
feedsToUse: 'select'
feedRestore: 'projectName/feedName'
projects: '**/*.csproj'
includeNuGetOrg: true
Test
Ausführen von Tests im Repository
# Run tests and auto publish test results.
- task: DotNetCoreCLI@2
inputs:
command: 'test'
Häufig gestellte Fragen
Warum ist mein Build-, Veröffentlichungs- oder Testschritt nicht möglich, Pakete wiederherzustellen?
Die meisten dotnet
Befehle, einschließlich build
, publish
und test
enthalten einen impliziten restore
Schritt. Dies schlägt gegen authentifizierte Feeds fehl, auch wenn Sie in einem früheren Schritt einen erfolgreichen dotnet restore
Vorgang ausgeführt haben, da der frühere Schritt die verwendeten Anmeldeinformationen bereinigt hat.
Um dieses Problem zu beheben, fügen Sie das --no-restore
Flag zum Textfeld "Argumente" hinzu.
Darüber hinaus erkennt der Befehl die feedRestore
vstsFeed
in dieser Weise angegebenen Argumente und Feeds nicht in die generierte NuGet.config Datei, wenn der test
implizite restore
Schritt ausgeführt wird. Es wird empfohlen, einen expliziten dotnet restore
Schritt zum Wiederherstellen von Paketen zu verwenden. Der Befehl berücksichtigt die und vstsFeed
Argumente restore
feedRestore
.
Warum sollte ich einen NuGet.config einchecken?
Durch das Überprüfen eines NuGet.config in die Quellcodeverwaltung wird sichergestellt, dass ein wichtiger Informationsteil, der zum Erstellen Ihres Projekts erforderlich ist, für jeden Entwickler verfügbar ist, der Ihren Code überprüft.
Für Situationen, in denen ein Team von Entwicklern an einem großen Bereich von Projekten arbeitet, ist es jedoch auch möglich, einen Azure Artifacts Feed zum globalen NuGet.config auf jedem Entwicklercomputer hinzuzufügen. In diesen Situationen repliziert die Option "Feeds, die ich hier auswählen" in der NuGet Aufgabe diese Konfiguration.
Problembehandlung
Dateistruktur für Ausgabedateien unterscheidet sich von vorherigen Builds
Azure DevOps gehosteten Agents sind mit .NET Core 3.0, 2.1 und 2.2 konfiguriert. CLI für .NET Core 3.0 hat ein anderes Verhalten beim Veröffentlichen von Projekten mit dem Argument "Ausgabeordner". Wenn Sie Projekte mit dem Argument "Ausgabeordner" (-o) veröffentlichen, wird der Ausgabeordner im Stammverzeichnis erstellt und nicht im Verzeichnis der Projektdatei. Während sie mehrere Projekte veröffentlichen, werden alle Dateien in demselben Verzeichnis veröffentlicht, was zu einem Problem führt.
Um dieses Problem zu beheben, verwenden Sie den Namen des Add-Projekts zum Veröffentlichen des Pfadparameters (modifyOutputPath in YAML) in der .NET Core CLI-Aufgabe. Dadurch wird ein Unterordner mit dem Namen der Projektdatei im Ausgabeordner erstellt. Daher werden alle Ihre Projekte unter verschiedenen Unterordnern im Hauptausgabeordner veröffentlicht.
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: publish
publishWebProjects: false
projects: '**/*.csproj'
arguments: '-o testpath'
zipAfterPublish: false
modifyOutputPath: true
Project Verwendung von Entity Framework wurde nicht mehr an gehosteten Agents gearbeitet.
Das neueste .NET Core: 3.0 verfügt nicht über Entity Framework(EF) integriert. Sie müssen EF entweder vor Beginn der Ausführung installieren oder dem Projekt mit der erforderlichen .NET Core SDK-Version globale.json hinzufügen. Dadurch wird sichergestellt, dass das richtige SDK zum Erstellen eines EF-Projekts verwendet wird. Wenn die erforderliche Version auf dem Computer nicht vorhanden ist, fügen Sie der Pipeline UseDotNetV2-Aufgabe hinzu, um die erforderliche Version zu installieren. Weitere Informationen zu EF mit .NET Core 3.0
Open Source
Dieser Vorgang wird auf GitHub Open Source Open Source. Feedback und Beiträge sind willkommen.