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
| Argumento | Descripción |
|---|---|
commandComando | 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 |
selectOrConfigFuentes 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 , configAlias de argumento: feedsToUse |
versioningSchemeControl 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) " |
argumentsArgumentos | 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 . |
projectsRuta 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 . |
noCacheDeshabilitación de la caché local | Impide NuGet usar paquetes de cachés de máquinas locales. |
restoreArgumentsArgumentos de restauración | Escriba los argumentos adicionales que se pasarán al restore comando. |
packagesDirectoryDirectorio 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 |
buildPropertiesPropiedades 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 |
verbosityPackNivel de detalle | Especifica la cantidad de detalles que se muestra en la salida del pack comando. |
verbosityRestoreNivel de detalle | Especifica la cantidad de detalles que se muestra en la salida del restore comando. |
workingDirectoryDirectorio 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) |
searchPatternPushRuta 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 |
nuGetFeedTypeUbicación de la fuente de destino | Especifica si la fuente de destino es interna o externa. Opciones: internal , external |
feedPublishFuente 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 |
publishPackageMetadataPublicació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. |
externalEndpointNuGet servidor | La NuGet de servicio que contiene las credenciales NuGet servidor externo. Alias de argumento: publishFeedCredentials |
searchPatternPackRuta 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 |
configurationToPackConfiguración en paquete | Cuando se usa un archivo csproj, se especifica la configuración que se va a empaquetar. Alias de argumento: configuration |
outputDirCarpeta 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 |
nobuildNo compilar | No compila el proyecto antes de empaquetarlo. Corresponde al parámetro --no-build del comando "build". |
includesymbolsIncluir símbolos | Además, crea símbolos NuGet paquetes. Corresponde al parámetro --include-symbols de línea de comandos. |
includesourceIncluir origen | Incluye código fuente en el paquete. Corresponde al parámetro --include-source de línea de comandos. |
publishWebProjectsPublicació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. |
zipAfterPublishProyectos publicados en zip | Si true es , la carpeta creada por el comando publish se comprimirá y eliminará. |
modifyOutputPathAgregar 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. |
publishTestResultsPublicació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. |
testRunTitleTítulo de la ejecución de prueba | Proporciona un nombre para la ejecución de pruebas. |
customComando 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. |
feedRestoreUsar 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 |
includeNuGetOrgUso de paquetes de NuGet.org | Incluya NuGet.org en el archivo NuGet.config000 0. |
nugetConfigPathRuta de acceso a NuGet.config | El NuGet.config en el repositorio que especifica las fuentes desde las que se restaurarán los paquetes. |
externalEndpointsCredenciales 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 |
versionEnvVarVariable de entorno | Escriba el nombre de la variable sin $, $env o % |
requestedMajorVersionMajor | La "X" de la versión X.Y.Z. Alias de argumento: majorVersion |
requestedMinorVersionSecundaria | La "Y" de la versión X.Y.Z. Alias de argumento: minorVersion |
requestedPatchVersionRevisió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.