Tarea de la CLI de .NET Core

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

Nota

La NuGet Autenticar es la nueva manera recomendada de autenticarse con Azure Artifacts y otros repositorios NuGet usuario. Los comandos de restauración e inserción de esta tarea ya no tienen nuevas características y solo se abordan los errores críticos.

Azure Pipelines

Use esta tarea para compilar, probar, empaquetar o publicar una aplicación dotnet, o para ejecutar un comando dotnet personalizado. Para los comandos de paquete, esta tarea admite NuGet.org y fuentes autenticadas como Administración de paquetes y MyGet.

Si la compilación de .NET Core o .NET Standard depende de paquetes NuGet, asegúrese de agregar dos copias de este paso: una con el comando y otra restore con el build comando .

Nota

En Microsoft Team Foundation Server (TFS) 2018 y versiones anteriores, las canalizaciones de compilación y versión se denominan definiciones, las ejecuciones se denominan compilaciones, las conexiones de servicio se denominan puntos de conexión de servicio, las fases se denominan entornos y los trabajos se denominan fases.

Fragmento de código 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:

Argumentos

Opciones de control de tareas

ArgumentoDescripción
command
Comando
Comando dotnet que se ejecutará. Seleccione custom esta opción para agregar argumentos o use un comando que no aparece aquí.
Opciones: build , , , , , , pushpackpublishrestoreruntest , custom
selectOrConfig
Fuentes que se usarán
Puede elegir seleccionar una fuente de Azure Artifacts o NuGet.org aquí, o confirmar un archivo NuGet.config en el repositorio de código fuente y establecer su ruta de acceso mediante el argumento nugetConfigPath .
Opciones: select , config
Alias de argumento: feedsToUse
versioningScheme
Control automático de versiones de paquetes
No se puede usar con proyectos a los que se hace referencia. Si elige "Usar la fecha y hora", se generará una versión compatible con SemVercon el formato X, Y y Z.

Si elige "Usar una variable de entorno", debe seleccionar una variable de entorno y asegurarse de que contiene el número de versión que desea usar.

Si elige "Usar el número de compilación", usará el número de compilación para crear una versión del paquete. Nota: En Opciones, establezca el formato del número de compilación en "$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r) "
Opciones: off , , , byPrereleaseNumberbyEnvVarbyBuildNumber ,

arguments
Argumentos
Argumentos para el comando seleccionado. Por ejemplo, configuración de compilación, carpeta de salida, tiempo de ejecución. Los argumentos dependen del comando seleccionado
Nota: Esta entrada solo acepta actualmente argumentos para build , , , , publishruntestcustom . Si desea agregar argumentos para un comando que no aparece en la lista, use custom .
projects
Ruta de acceso a los proyectos
Ruta de acceso a los archivos csproj que se usarán. Puede usar caracteres comodín (por ejemplo, para todos los archivos .csproj en todas las **/*.csproj**/*.csprojvea patrones de coincidencia de archivos .
noCache
Deshabilitación de la caché local
Impide NuGet usar paquetes de cachés de máquinas locales.
restoreArguments
Argumentos de restauración
Escriba los argumentos adicionales que se pasarán al restore comando.
packagesDirectory
Directorio de destino
Especifica la carpeta en la que se instalan los paquetes. Si no se especifica ninguna carpeta, los paquetes se restauran en la caché NuGet paquetes predeterminada
Alias de argumento: restoreDirectory
buildProperties
Propiedades de compilación adicionales
Especifica una lista de pares, separados por punto y coma, donde cada aparición de $token$ en el archivo .nuspec se reemplazará token = value por el valor especificado. Los valores pueden ser cadenas entre comillas
verbosityPack
Nivel de detalle
Especifica la cantidad de detalles que se muestra en la salida del pack comando.
verbosityRestore
Nivel de detalle
Especifica la cantidad de detalles que se muestra en la salida del restore comando.
workingDirectory
Directorio de trabajo
Directorio de trabajo actual donde se ejecuta el script. Vacío es la raíz del repositorio (compilación) o artefactos (versión), que es $(System.DefaultWorkingDirectory)
searchPatternPush
Ruta de acceso NuGet paquetes para publicar
El patrón que se va a coincidir con los archivos nupkg o la ruta de acceso que se va a cargar. Varios patrones se pueden separar mediante un punto y coma y puede hacer que un patrón sea negativo si lo prefida con ! . Ejemplo:
Alias de argumento: packagesToPush
nuGetFeedType
Ubicación de la fuente de destino
Especifica si la fuente de destino es interna o externa.
Opciones: internal , external
feedPublish
Fuente de destino
Seleccione una fuente hospedada en su organización. Debe tener una Administración de paquetes instalada y con licencia para seleccionar una fuente aquí.
Alias de argumento: publishVstsFeed
publishPackageMetadata
Publicación de metadatos de canalización
Asocie los metadatos de esta canalización de compilación o versión (identificador de ejecución, información de código fuente) al paquete.
externalEndpoint
NuGet servidor
La NuGet de servicio que contiene las credenciales NuGet servidor externo.
Alias de argumento: publishFeedCredentials
searchPatternPack
Ruta de acceso a los archivos csproj o nuspec que se va a empaquetar
Patrón para buscar archivos csproj o nuspec para empaquetar. Puede separar varios patrones con un punto y coma y puede hacer que un patrón sea negativo si lo prefida con ! . Ejemplo:
Alias de argumento: packagesToPack
configurationToPack
Configuración en paquete
Cuando se usa un archivo csproj, se especifica la configuración que se va a empaquetar.
Alias de argumento: configuration
outputDir
Carpeta del paquete
Carpeta donde se crearán los paquetes. Si está vacío, se crearán paquetes junto con el archivo csproj.
Alias de argumento: packDirectory
nobuild
No compilar
No compila el proyecto antes de empaquetarlo. Corresponde al parámetro --no-build del comando "build".
includesymbols
Incluir símbolos
Además, crea símbolos NuGet paquetes. Corresponde al parámetro --include-symbols de línea de comandos.
includesource
Incluir origen
Incluye código fuente en el paquete. Corresponde al parámetro --include-source de línea de comandos.
publishWebProjects
Publicación de proyectos web
Si es , se omitirá el valor de propiedad y la tarea intentará encontrar los proyectos web en el repositorio y ejecutar el trueprojects comando publish en ellos. Los proyectos web se identifican por la presencia de un archivo web.config o una carpeta wwwroot en el directorio. En ausencia de un archivo web.config o una carpeta wwwroot, se seleccionan los proyectos que usan un SDK web, como Microsoft .NET.Sdk.Web. Tenga en cuenta que el valor predeterminado de este true argumento es si no se especifica.
zipAfterPublish
Proyectos publicados en zip
Si true es , la carpeta creada por el comando publish se comprimirá y eliminará.
modifyOutputPath
Agregar el nombre del proyecto para publicar la ruta de acceso
Si es , las carpetas creadas por el comando publish tendrán el nombre de archivo del proyecto precedido de sus nombres de carpeta cuando la ruta de acceso de salida se especifique true explícitamente en los argumentos. Esto resulta útil si desea publicar varios proyectos en la misma carpeta.
publishTestResults
Publicación de resultados de pruebas
Al habilitar esta opción, se generará un archivo TRX de resultados de prueba en y los $(Agent.TempDirectory) resultados se publicarán en el servidor.
Esta opción se anexa --logger trx --results-directory $(Agent.TempDirectory) a los argumentos de la línea de comandos.
La cobertura de código se puede recopilar agregando --collect "Code coverage" a los argumentos de la línea de comandos. Actualmente solo está disponible en la plataforma Windows datos.
testRunTitle
Título de la ejecución de prueba
Proporciona un nombre para la ejecución de pruebas.
custom
Comando personalizado
Comando que se pasa a dotnet.exe para su ejecución.
Para obtener una lista completa de los comandos disponibles, consulte la documentación de la CLI de dotnet.
feedRestore
Usar paquetes de esta fuente Azure Artifacts/TFS
Incluya la fuente seleccionada en la fuente NuGet.config. Debe tener una Administración de paquetes instalada y con licencia para seleccionar una fuente aquí. projectName/feedName para la fuente con ámbito de proyecto. FeedName solo para la fuente de ámbito de la organización. Tenga en cuenta que esto no se admite para el comando de prueba.
Alias de argumento: vstsFeed
includeNuGetOrg
Uso de paquetes de NuGet.org
Incluya NuGet.org en el archivo NuGet.config000 0.
nugetConfigPath
Ruta de acceso a NuGet.config
El NuGet.config en el repositorio que especifica las fuentes desde las que se restaurarán los paquetes.
externalEndpoints
Credenciales para fuentes fuera de esta organización o colección
Credenciales que se usarán para los registros externos ubicados en el NuGet.config. En el caso de las fuentes de esta organización o colección, déjela en blanco. Las credenciales de la compilación se usan automáticamente
Alias de argumento: externalFeedCredentials
versionEnvVar
Variable de entorno
Escriba el nombre de la variable sin $, $env o %
requestedMajorVersion
Major
La "X" de la versión X.Y.Z.
Alias de argumento: majorVersion
requestedMinorVersion
Secundaria
La "Y" de la versión X.Y.Z.
Alias de argumento: minorVersion
requestedPatchVersion
Revisión
La "Z" de la versión X.Y.Z.
Alias de argumento: patchVersion

Ejemplos

Build

Compilar un proyecto

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

Compilar varios proyectos

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

Insertar

Inserción NuGet paquetes en la fuente interna

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

Inserción NuGet paquetes en la fuente externa

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

Pack

Empaquetar un Paquete NuGet en un directorio de salida específico

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

Empaquetar un paquete de símbolos

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

Publicar

Publicación de proyectos en la carpeta especificada

# 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

Restauración

#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

Prueba

Ejecución de pruebas en el repositorio

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

Preguntas más frecuentes

¿Por qué mi paso de compilación, publicación o prueba no puede restaurar paquetes?

La dotnet mayoría de los comandos, buildpublish incluidos , e incluyen un paso testrestore implícito. Esto producirá un error en las fuentes autenticadas, incluso si ejecutó correctamente en un paso anterior, porque el paso anterior habrá limpiado las dotnet restore credenciales que usó.

Para corregir este problema, agregue la --no-restore marca al cuadro de texto Argumentos .

Además, el comando no reconoce los argumentos o y las fuentes especificados de esta manera no se incluirán en el archivo NuGet.config generado cuando se ejecute testfeedRestore el paso vstsFeedrestore implícito. Se recomienda usar un paso explícito dotnet restore para restaurar paquetes. El restore comando respeta los feedRestorevstsFeed argumentos y .

¿Por qué debo comprobar un NuGet.config?

La comprobación de NuGet.config en el control de código fuente garantiza que una parte clave de la información necesaria para compilar el proyecto (la ubicación de sus paquetes) está disponible para todos los desarrolladores que comprueban el código.

Sin embargo, en situaciones en las que un equipo de desarrolladores trabaja en una gran variedad de proyectos, también es posible agregar una fuente de Azure Artifacts a la NuGet.config global en la máquina de cada desarrollador. En estas situaciones, el uso de la opción "Fuentes que selecciono aquí" en la tarea NuGet replica esta configuración.

Solución de problemas

La estructura de archivos para los archivos de salida es diferente de las compilaciones anteriores

Azure DevOps los agentes hospedados se configuran con .NET Core 3.0, 2.1 y 2.2. La CLI de .NET Core 3.0 tiene un comportamiento diferente al publicar proyectos mediante el argumento de carpeta de salida. Al publicar proyectos con el argumento de carpeta de salida (-o), la carpeta de salida se crea en el directorio raíz y no en el directorio del archivo de proyecto. Por lo tanto, al publicar más de un proyecto, todos los archivos se publican en el mismo directorio, lo que provoca un problema.

Para resolver este problema, use el parámetro Add project name to publish path (modifyOutputPath in YAML) (Agregar nombre de proyecto para publicar ruta de acceso [modifyOutputPath en YAML]) en CLI de .NET Core tarea. Esto crea una sub carpeta con el nombre del archivo de proyecto, dentro de la carpeta de salida. Por lo tanto, todos los proyectos se publicarán en subcarpetas diferentes dentro de la carpeta de salida principal.

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

Project uso de Entity Framework ha dejado de funcionar en agentes hospedados

La versión más reciente de .NET Core: 3.0 no tiene Entity Framework (EF) integrado. Tendrá que instalar EF antes de comenzar la ejecución o agregar global.json al proyecto con la versión SDK de .NET Core necesaria. Esto garantizará que se usa el SDK correcto para compilar el proyecto de EF. Si la versión necesaria no está presente en la máquina, agregue la tarea UseDotNetV2 a la canalización para instalar la versión necesaria. Más información sobre EF con .NET Core 3.0

Código abierto

Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.