.NET Core CLI タスク

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017

注意

NuGet 認証タスクは、Azure Artifacts およびその他の NuGet リポジトリで認証を行うための新しい推奨方法です。 このタスクの restore コマンドと push コマンドでは、新しい機能は不要になり、重要なバグだけが解決されます。

Azure Pipelines

このタスクは、dotnet アプリケーションのビルド、テスト、パッケージ化、発行、またはカスタム dotnet コマンドの実行に使用します。 パッケージコマンドの場合、このタスクでは、Package Management や MyGet などの NuGet のフィードと認証されたフィードがサポートされます。

.net Core または .NET Standard ビルドが NuGet パッケージに依存している場合は、1つの restore コマンドとコマンドを使用して、この手順のコピーを2つ追加してください。 build

注意

Microsoft Team Foundation Server (TFS) 2018 以前のバージョンでは、ビルドとリリースの "パイプライン" は "定義"、"実行" は "ビルド"、"サービス接続" は "サービス エンドポイント"、"ステージ" は "環境"、"ジョブ" は "フェーズ" と呼ばれます。

YAML スニペット

# .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:

引数

タスク制御オプション

引数説明
command
コマンド
実行する dotnet コマンド。 custom引数を追加するか、ここに記載されていないコマンドを使用します。
オプション:、、、、、、 buildpushpackpublishrestoreruntestcustom
selectOrConfig
使用するフィード
ここで Azure Artifacts または NuGet からフィードを選択するか、ソースコードリポジトリに NuGet.config ファイルをコミットし、引数を使用してパスを設定することができます nugetConfigPath
オプション: selectconfig
引数の別名: feedsToUse
versioningScheme
自動パッケージバージョン管理
インクルード参照プロジェクトでは使用できません。 [日付と時刻を使用する] を選択すると、X、Y、および Z を選択した形式で、 Semverに準拠したバージョンが生成され ます。

[環境変数を使用する] を選択した場合は、環境変数を選択し、使用するバージョン番号が含まれていることを確認する必要があります。

[ビルド番号を使用する] を選択すると、ビルド番号を使用してパッケージのバージョンが作成されます。 注: [オプション] で、ビルド番号の形式を '$ (Builddefinitionname) _ $ (Year: yyyy). $ (Month). $ (DayOfMonth) $ (Rev:. r)' に設定します。
オプション: offbyPrereleaseNumberbyEnvVarbyBuildNumber

arguments
引数
選択したコマンドへの引数。 たとえば、ビルド構成、出力フォルダー、ランタイムなどです。 引数は、選択したコマンドに依存します。
メモ: 現在、この入力で使用できるのは、、、、、の引数のみ buildpublishruntestcustom です。 一覧にないコマンドの引数を追加する場合は、を使用し custom ます。
projects
プロジェクトへのパス
使用する .csproj ファイルへのパス。 ワイルドカード ( **/*.csproj すべてのサブフォルダー内のすべての .csproj ファイルなど) を使用できます。「 **/*.csproj」を参照してください。
noCache
ローカルキャッシュを無効にする
NuGet によってローカルコンピューターのキャッシュからパッケージが使用されないようにします。
restoreArguments
Restore の引数
コマンドに渡す追加の引数を記述し restore ます。
packagesDirectory
[作成先ディレクトリ]
パッケージがインストールされているフォルダーを指定します。 フォルダーが指定されていない場合、パッケージは既定の NuGet パッケージキャッシュに復元されます。
引数の別名: restoreDirectory
buildProperties
追加のビルドプロパティ
セミコロンで区切られたペアのリストを指定し token = value ます。 nuspec ファイル内の各 $token $ が、指定された値に置き換えられます。 値は引用符で囲まれた文字列にすることができます
verbosityPack
詳細度
コマンドの出力に表示される詳細の量を指定し pack ます。
verbosityRestore
詳細度
コマンドの出力に表示される詳細の量を指定し restore ます。
workingDirectory
作業ディレクトリ
スクリプトが実行される現在の作業ディレクトリ。 Empty は、リポジトリ (ビルド) または成果物 (リリース) のルート ($ (System.defaultworkingdirectory)) です。
searchPatternPush
発行する NuGet パッケージへのパス
アップロードする nupkg ファイルの一致またはパスを指定するパターン。 複数のパターンをセミコロンで区切ることができます。また、にプレフィックスを付けることで、パターンを負の値にすることができ ! ます。 よう
引数の別名: packagesToPush
nuGetFeedType
ターゲットフィードの場所
ターゲットフィードが内部と外部のどちらであるかを指定します。
オプション: internalexternal
feedPublish
ターゲットフィード
組織でホストされているフィードを選択します。 ここでフィードを選択するには Package Management がインストールされ、ライセンスが付与されている必要があります
引数の別名: publishVstsFeed
publishPackageMetadata
パイプラインメタデータの公開
このビルド/リリースパイプラインのメタデータ (実行 ID、ソースコード情報) をパッケージに関連付けます
externalEndpoint
NuGet サーバー
外部 NuGet サーバーの資格情報を含む NuGetサービス接続
引数の別名: publishFeedCredentials
searchPatternPack
パッケージに対する .csproj または nuspec ファイルへのパス
パックする .csproj ファイルまたは nuspec ファイルを検索するパターン。 複数のパターンをセミコロンで区切ることができます。また、にプレフィックスを付けることで、パターンを負の値にすることができ ! ます。 よう
引数の別名: packagesToPack
configurationToPack
パッケージへの構成
.Csproj ファイルを使用する場合は、パッケージ化する構成を指定します。
引数の別名: configuration
outputDir
パッケージフォルダー
パッケージが作成されるフォルダー。 空の場合、パッケージは、.csproj ファイルと共に作成されます。
引数の別名: packDirectory
nobuild
ビルドしない
パッキングの前にプロジェクトをビルドしません。 --no-build' Build ' コマンドのパラメーターに対応します。
includesymbols
シンボルを含める
さらに、シンボル NuGet パッケージを作成します。 --include-symbolsコマンドラインパラメーターに対応します。
includesource
ソースを含める
パッケージにソースコードを含めます。 --include-sourceコマンドラインパラメーターに対応します。
publishWebProjects
Web プロジェクトの発行
の場合 trueprojects プロパティ値はスキップされ、タスクはリポジトリ内の web プロジェクトを検索して、それらに対して publish コマンドを実行しようとします。 Web プロジェクトは、ディレクトリに web.config ファイルまたは wwwroot フォルダーが存在することによって識別されます。 web.config ファイルまたは wwwroot フォルダーが存在しない場合、web SDK を使用するプロジェクト (たとえば、Microsoft .NET sdk) が選択されます。 この引数が指定されていない場合、既定値 true はになります。
zipAfterPublish
発行されたプロジェクトの Zip
trueの場合、publish コマンドによって作成されたフォルダーは圧縮され、削除されます。
modifyOutputPath
発行パスにプロジェクト名を追加する
の場合 true 、publish コマンドによって作成されたフォルダーの出力パスが引数に明示的に指定されていると、フォルダー名の前にプロジェクトファイル名が付けられます。 これは、複数のプロジェクトを同じフォルダーに発行する場合に便利です。
publishTestResults
テスト結果の発行
このオプションを有効にすると、でテスト結果の .TRX ファイルが生成され、 $(Agent.TempDirectory) 結果がサーバーに発行されます。
このオプション --logger trx --results-directory $(Agent.TempDirectory) は、コマンドライン引数にを追加します。
コードカバレッジは --collect "Code coverage" 、コマンドライン引数にを追加することによって収集できます。 現時点では、この Windows プラットフォームでのみ使用できます。
testRunTitle
テストの実行のタイトル
テストの実行の名前を提供します
custom
カスタムコマンド
実行のために dotnet.exe に渡すコマンド。
使用可能なコマンドの完全な一覧については、 DOTNET CLI のドキュメントを参照してください。
feedRestore
この Azure Artifacts/TFS フィードからのパッケージを使用する
生成された NuGet.config に選択したフィードを含めます。ここでフィードを選択するには Package Management がインストールされ、ライセンスが付与されている必要があります。 プロジェクトスコープフィードの projectName/フィード名。 組織スコープのフィードに対してのみ、名前を指定します。 これは、test コマンドではサポートされていないことに注意してください。
引数の別名: vstsFeed
includeNuGetOrg
NuGet のパッケージを使用する
生成された NuGet に NuGet を含めます。 config000 0
nugetConfigPath
NuGet.config へのパス
パッケージの復元元のフィードを指定する、リポジトリ内の NuGet.config。
externalEndpoints
この組織/コレクション外のフィードの資格情報
選択した NuGet.config に配置されている外部レジストリに使用する資格情報。この組織/コレクション内のフィードの場合は、空白のままにします。ビルドの資格情報は自動的に使用されます
引数の別名: externalFeedCredentials
versionEnvVar
環境変数
変数名を $、$env、または% なしで入力してください
requestedMajorVersion
Major
バージョン x.yの ' x ' です。
引数の別名: majorVersion
requestedMinorVersion
マイナー
バージョン x.yの ' Y ' です。
引数の別名: minorVersion
requestedPatchVersion
修正プログラム
バージョン x.yの ' Z ' です。
引数の別名: patchVersion

Build

プロジェクトのビルド

# Build project
- task: DotNetCoreCLI@2
  inputs:
    command: 'build'

複数のプロジェクトをビルドする

# 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.

プッシュ

パッケージを内部フィードにプッシュ NuGet

# 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'

外部フィードへのパッケージのプッシュ NuGet

# Push all NuGet packages from a build to external Feed
- task: DotNetCoreCLI@2
  inputs:
    command: 'push'
    nugetFeedType: 'external'
    externalEndPoint: 'MyNuGetServiceConnection'

Pack

NuGetPackage を特定の出力ディレクトリにパックする

# Pack a NuGet package to a test directory
- task: DotNetCoreCLI@2
  inputs: 
    command: 'pack'
    outputDir: '$(Build.ArtifactStagingDirectory)/TestDir'

シンボルパッケージをパックする

# Pack a symbol package along with NuGet package
- task: DotNetCoreCLI@2
  inputs: 
    command: 'pack'
    includesymbols: true

発行

指定したフォルダーにプロジェクトを発行する

# 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 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

テスト

リポジトリでテストを実行する

# Run tests and auto publish test results.
- task: DotNetCoreCLI@2
  inputs:
    command: 'test'

よく寄せられる質問

ビルド、発行、またはテストステップがパッケージの復元に失敗するのはなぜですか。

、、などのほとんどの dotnet コマンドには、 buildpublishtest 暗黙的な手順が含ま restore れています。 前の手順で正常に実行した場合でも、これは認証されたフィードに対して失敗 dotnet restore します。これは、前の手順で使用した資格情報がクリーンアップされたためです。

この問題を解決するには、[ --no-restore 引数] テキストボックスにフラグを追加します。

また、コマンドは test 引数または引数を認識しません feedRestorevstsFeed 。このように指定されたフィードは、暗黙的な手順の実行時に生成された NuGet.config ファイルには含まれません restore 。 パッケージの復元には、明示的な手順を使用することをお勧め dotnet restore します。 コマンドは、 restorefeedRestore 引数と引数を尊重し vstsFeed ます。

NuGet.config をチェックインする必要があるのはなぜですか。

ソース管理に NuGet.config をチェックインすると、プロジェクトのビルドに必要な重要な情報 (パッケージの場所) が、コードをチェックアウトするすべての開発者が使用できるようになります。

ただし、開発者のチームがさまざまなプロジェクトで作業する場合は、各開発者のコンピューターのグローバル NuGet.config に Azure Artifacts フィードを追加することもできます。 このような状況では、NuGet タスクの "フィード I 選択" オプションを使用すると、この構成がレプリケートされます。

トラブルシューティング

出力ファイルのファイル構造が以前のビルドと異なる

Azure DevOps ホステッドエージェントは、.net Core 3.0、2.1、および2.2 で構成されます。 .NET Core 3.0 用 CLI は、出力フォルダーの引数を使用してプロジェクトを発行するときに、動作が異なります。 出力フォルダーの引数 (-o) を使用してプロジェクトを発行すると、出力フォルダーはプロジェクトファイルのディレクトリではなく、ルートディレクトリに作成されます。 そのため、複数のプロジェクトを発行するときに、すべてのファイルが同じディレクトリに発行されるため、問題が発生します。

この問題を解決するには、.NET Core CLI タスクの [ プロジェクト名の発行 ] パラメーター (Yaml の modifyOutputPath) を使用します。 これにより、プロジェクトファイルの名前を含むサブフォルダーが出力フォルダー内に作成されます。 そのため、すべてのプロジェクトは、メイン出力フォルダー内の別のサブフォルダーの下に発行されます。

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet publish'
  inputs:
    command: publish
    publishWebProjects: false
    projects: '**/*.csproj'
    arguments: '-o testpath'
    zipAfterPublish: false
    modifyOutputPath: true

Entity Framework を使用した Project は、ホストされているエージェントで動作を停止しました

最新の .NET Core: 3.0 には、Entity Framework (EF) が組み込まれていません。 EF は、実行を開始する前にインストールするか、必要な .NET Core SDK バージョンのプロジェクトに追加する必要があります。 これにより、EF プロジェクトをビルドするために正しい SDK が使用されるようになります。 必要なバージョンがコンピューターに存在しない場合は、UseDotNetV2 タスクをパイプラインに追加して、必要なバージョンをインストールします。 .NET Core 3.0 での EF の詳細について説明します。

オープン ソース

このタスクは、 GitHub のオープンソースです。 フィードバックと投稿をお待ちしております。