.NET Core-CLI-Aufgabe

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018

Hinweis

Die NuGet-Authentifizierungsaufgabe ist die neue empfohlene Methode zum Authentifizieren mit Azure Artefakten und anderen NuGet-Repositorys. Die Wiederherstellungs- und Pushbefehle dieser .NET Core CLI-Aufgabe übernehmen keine neuen Features mehr, und nur kritische Fehler werden behoben.

Azure Pipelines

Verwenden Sie diese Aufgabe, um eine dotnet-Anwendung zu erstellen, zu testen, zu packen oder zu veröffentlichen, oder um einen benutzerdefinierten Dotnet-Befehl auszuführen. Bei Paketbefehlen 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 restorebuild 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

Aufgabensteuerungsoptionen

ArgumentBESCHREIBUNG
command
Befehl
Der zu ausführende Dotnet-Befehl. Wählen Sie aus custom , um Argumente hinzuzufügen oder einen befehl zu verwenden, der hier nicht aufgeführt ist.
Optionen: build, , packpushpublishrestoreruntestcustom
selectOrConfig
Zu verwendende Feeds
Sie können entweder einen Feed aus Azure-Artefakten und/oder NuGet.org hier auswählen oder eine NuGet.config Datei auf Ihr Quellcode-Repository übernehmen und den Pfad mithilfe des nugetConfigPath Arguments festlegen.
Optionen: select, config
Argumentalias: feedsToUse
versioningScheme
Automatische Paketversionsverwaltung
Es kann nicht mit referenzierten Projekten verwendet werden. Wenn Sie "Datum und Uhrzeit verwenden" auswählen, generiert dies eine SemVer-kompatible Version, die wie X.Y.Z-ci-datetime bei der Auswahl von X, Y und Z formatiert 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, verwendet dies die Buildnummer, um Ihr Paket zu versionieren. Hinweis: Legen Sie unter "Optionen" das Buildnummernformat auf "$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)" fest.
Optionen: off, , byEnvVarbyPrereleaseNumber, byBuildNumber,

arguments
Argumente
Argumente für den ausgewählten Befehl. Beispiel: Buildkonfiguration, Ausgabeordner, Laufzeit. Die Argumente hängen vom ausgewählten Befehl ab.
Hinweis: Diese Eingabe akzeptiert derzeit nur Argumente für build, publish, run, , customtest. Wenn Sie Argumente für einen befehl hinzufügen möchten, der nicht aufgeführt ist, verwenden Sie custom.
projects
Pfad zu Projekt(n)
Der Pfad zu den zu verwendenden csproj-Dateien. 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 von lokalen Computercaches verwendet.
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 Standardmäßigen NuGet-Paketcache wiederhergestellt.
Argumentalias: restoreDirectory
buildProperties
Zusätzliche Buildeigenschaften
Gibt eine Liste von token = value Paaren an, getrennt durch Semikolons, wobei jedes Vorkommen von $token$ in der Nuspec-Datei durch den angegebenen Wert ersetzt wird. Werte können Zeichenfolgen in Anführungszeichen sein.
verbosityPack
Ausführlichkeit
Gibt die in der Ausgabe für den pack Befehl angezeigte Detailmenge an.
verbosityRestore
Ausführlichkeit
Gibt die in der Ausgabe für den restore Befehl angezeigte Detailmenge an.
workingDirectory
Arbeitsverzeichnis
Aktuelles Arbeitsverzeichnis, in dem das Skript ausgeführt wird. Empty is the root of the repo (build) or artifacts (release), which is $(System.DefaultWorkingDirectory)
searchPatternPush
Pfad zu NuGet-Paketen zum Veröffentlichen
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 gestalten, indem Sie es 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-/Releasepipeline (Run ID, Quellcodeinformationen) zum 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(en) zum Packen
Muster zum Suchen nach csproj- oder Nuspec-Dateien zum Packen. Sie können mehrere Muster mit einem Semikolon trennen und ein Muster negativ gestalten, indem Sie es !präfixieren. Beispiel:**/*.csproj;!**/*.Tests.csproj
Argumentalias: packagesToPack
configurationToPack
Konfiguration für Paket
Wenn Sie eine csproj-Datei verwenden, gibt dies die zu verpackende Konfiguration 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 trueder projects Eigenschaftswert übersprungen wird, und die Aufgabe versucht, die Webprojekte im Repository zu finden und den Befehl zum Veröffentlichen 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 trueder von dem Veröffentlichungsbefehl erstellte Ordner komprimiert und gelöscht wird.
modifyOutputPath
Hinzufügen des Projektnamens zum Veröffentlichen des Pfads
Wenn truevon 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-Artefakte/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

Testen

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, publishund 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 feedRestorevstsFeed 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 restorefeedRestore.

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-Artefakte-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 gehostete 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 using Entity Framework hat die Arbeit an gehosteten Agents beendet.

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

Diese Aufgabe wird auf GitHub Open Source. Feedback und Beiträge sind willkommen.