.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 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 custom aus, um Argumente hinzuzufügen oder einen befehl zu verwenden, der hier nicht aufgeführt ist.
Optionen: build, pushpackpublishrestoreruntestcustom
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.
Optionen: off, , , byPrereleaseNumberbyEnvVar, byBuildNumber

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, publishruntest, . 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 trueder 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 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 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, 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 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.