Compilación, prueba e implementación de aplicaciones de .NET Core
Cargar el código
Upload el código a una nueva aplicación web GitHub o Azure Repos:
Inicio de sesión en Azure Pipelines
Inicie sesión en Azure Pipelines. Una vez que haya iniciado sesión, el explorador accederá a https://dev.azure.com/my-organization-name y aparecerá el panel de Azure DevOps.
En la organización seleccionada, cree un proyecto. Si no tiene ningún proyecto en la organización, aparecerá la pantalla Cree un proyecto para empezar. De lo contrario, seleccione el botón Crear proyecto en la esquina superior derecha del panel.
Creación de la canalización
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Vaya a Pipelinesy, a continuación, seleccione Nueva canalización.
Siga los pasos del asistente y seleccione primero GitHub como ubicación del código fuente.
Puede que se le redirija a GitHub para iniciar sesión. Si es así, escriba sus credenciales de GitHub.
Cuando aparezca la lista de repositorios, seleccione el que corresponda.
Es posible que se le redirija a GitHub para instalar la aplicación Azure Pipelines. Si es así, seleccione Aprobar instalación.
Cuando aparezca la pestaña Configurar, seleccione ASP.NET Core.
Cuando aparezca la nueva canalización, echa un vistazo a YAML para ver lo que hace. Cuando esté listo, seleccione Guardar y ejecute.

Se le pedirá que confirme un nuevo archivo azure-pipelines.yml en el repositorio. Una vez satisfecho con el mensaje, seleccione Guardar y ejecutar de nuevo.
Si desea ver la canalización en acción, seleccione el trabajo de compilación.
Acaba de crear y ejecutó una canalización que creamos automáticamente, porque el código parece ser una buena coincidencia para la plantilla ASP.NET Core datos.
Ahora tiene una canalización YAML en funcionamiento ( ) en el repositorio que
azure-pipelines.ymlestá lista para personalizar.Cuando esté listo para realizar cambios en la canalización, selecciónelo en la Pipelines y, a continuación, edite el archivo.
Consulte las secciones siguientes para obtener información sobre algunas de las formas más comunes de personalizar la canalización.
YAML
- Agregue un
azure-pipelines.ymlarchivo en el repositorio. Personalice este fragmento de código para la compilación.
trigger:
- master
pool: Default
variables:
buildConfiguration: 'Release'
# do this before all your .NET Core tasks
steps:
- task: DotNetCoreInstaller@2
inputs:
version: '2.2.402' # replace this value with the version that you need for your project
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
Cree una canalización (si no sabe cómo, consulte Creación de la primera canalización)y, para la plantilla, seleccione YAML.
Establezca el grupo de agentes y la ruta de acceso del archivo YAML para la canalización.
Guarde la canalización y poner en cola una compilación. Cuando aparezca el mensaje Build #nnnnnnnn.n se ha puesto en cola, seleccione el vínculo number para ver la canalización en acción.
Cuando esté listo para realizar cambios en la canalización, edite la canalización.
Consulte las secciones siguientes para obtener información sobre algunas de las formas más comunes de personalizar la canalización.
Clásico
Cree una canalización (si no sabe cómo, consulte Creación de la primera canalización). Seleccione Canalización vacía para la plantilla.
En el catálogo de tareas, busque y agregue la tarea .NET Core. Esta tarea se ejecutará
dotnet buildpara compilar el código en el repositorio de ejemplo.Guarde la canalización y poner en cola una compilación. Cuando aparezca el mensaje Build #nnnnnnnn.n se ha puesto en cola, seleccione el vínculo number para ver la canalización en acción.
Ahora tiene una canalización de trabajo que está lista para personalizar.
Cuando esté listo para realizar cambios en la canalización, edite la canalización.
Consulte las secciones siguientes para obtener información sobre algunas de las formas más comunes de personalizar la canalización.
Entorno de compilación
Use Azure Pipelines para compilar proyectos de .NET Core en Windows, Linux o macOS sin necesidad de configurar ninguna infraestructura propia. Los agentes hospedados por Microsoft en Azure Pipelines incluyen varias versiones publicadas de los SDK de .NET Core preinstalados.
Ubuntu 18.04 se establece aquí en el archivo YAML.
pool:
vmImage: 'ubuntu-18.04' # examples of other options: 'macOS-10.15', 'windows-2019'
Consulte Agentes hospedados por Microsoft para obtener una lista completa de imágenes y Grupo para obtener más ejemplos.
Los agentes hospedados por Microsoft no incluyen algunas de las versiones anteriores del SDK de .NET Core. Tampoco suelen incluir versiones preliminares. Si necesita estos tipos de SDK en agentes hospedados por Microsoft, agregue la UseDotNet@2 al archivo YAML.
Para instalar la versión preliminar del SDK 5.0.x para compilar y 3.0.x para ejecutar pruebas destinadas a .NET Core 3.0.x, agregue este fragmento de código:
steps:
- task: UseDotNet@2
inputs:
version: '5.0.x'
includePreviewVersions: true # Required for preview versions
- task: UseDotNet@2
inputs:
version: '3.0.x'
packageType: runtime
Windows agentes ya incluyen un entorno de ejecución de .NET Core. Para instalar un SDK más reciente, establezca performMultiLevelLookup en en este fragmento de true código:
steps:
- task: UseDotNet@2
displayName: 'Install .NET Core SDK'
inputs:
version: 5.0.x
performMultiLevelLookup: true
includePreviewVersions: true # Required for preview versions
Sugerencia
Como alternativa, puede configurar un agente auto hospedado y ahorrar el costo de ejecutar el instalador de la herramienta. Consulte Linux,MacOSo Windows. También puede usar agentes auto-hospedados para ahorrar tiempo adicional si tiene un repositorio grande o ejecuta compilaciones incrementales. Un agente auto-hospedado también puede ayudarle a usar los SDK privados o de versión preliminar que no son compatibles oficialmente con Azure DevOps o que solo están disponibles en los entornos corporativos o locales.
Puede compilar los proyectos de .NET Core mediante el entorno SDK de .NET Core y runtime en Windows, Linux o macOS. Las compilaciones se ejecutan en un agente auto-hospedado. Asegúrese de que tiene instalada la versión necesaria del entorno SDK de .NET Core tiempo de ejecución en el agente.
Restauración de dependencias
NuGet es una manera popular de depender del código que no se compila. Puede descargar NuGet paquetes y herramientas específicas del proyecto que se especifican en el archivo de proyecto mediante la ejecución del comando a través de la tarea .NET Core o directamente en un script de la dotnet restore canalización. dotnet restore
Puede descargar paquetes NuGet desde Azure Artifacts, NuGet.org o desde algún otro repositorio NuGet externo. La tarea de .NET Core es especialmente útil para restaurar paquetes desde fuentes NuGet autenticadas.
Esta canalización usa una fuente de artefactos para dotnet restore en la CLI de .NET Core dotnet restore.
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
feedsToUse: 'select'
vstsFeed: 'my-vsts-feed' # A series of numbers and letters
- task: DotNetCoreCLI@2
inputs:
command: 'build'
arguments: '--configuration $(buildConfiguration)'
displayName: 'dotnet build $(buildConfiguration)'
Puede descargar paquetes NuGet desde NuGet.org.
dotnet restore usa internamente una versión NuGet.exe de que se empaqueta con el SDK de .NET Core. dotnet restore solo puede restaurar los paquetes especificados en los archivos de proyecto de .NET .csproj Core.
Si también tiene un proyecto de Microsoft .NET Framework en la solución o usa para especificar las dependencias, también debe usar la tarea NuGet para restaurar package.json esas dependencias. package.json
En SDK de .NET Core versión 2.0 y posteriores, los paquetes se restauran automáticamente al ejecutar otros comandos, como dotnet build .
En SDK de .NET Core versión 2.0 y posteriores, los paquetes se restauran automáticamente al ejecutar otros comandos, como dotnet build .
Sin embargo, es posible que tenga que usar la tarea .NET Core para restaurar paquetes si usa una fuente autenticada.
Si en ocasiones se producirá un error en las compilaciones al restaurar paquetes desde NuGet.org debido a problemas de conexión, puede usar Azure Artifacts con orígenes ascendentes y almacenar en caché los paquetes. Las credenciales de la canalización se usan automáticamente al conectarse a Azure Artifacts. Estas credenciales normalmente se derivan de la cuenta Project servicio de compilación de recopilación.
Si desea especificar un repositorio NuGet, coloque las direcciones URL en NuGet.config un archivo del repositorio.
Si la fuente está autenticada, administre sus credenciales mediante la creación de una conexión NuGet servicio en la pestaña Servicios en Project Configuración.
Si usa agentes hospedados por Microsoft, obtiene una nueva máquina cada vez que ejecuta una compilación, lo que significa restaurar los paquetes cada vez. Esta restauración puede tardar una cantidad significativa de tiempo. Para mitigar este problema, puede usar Azure Artifacts o un agente auto-hospedado, en cuyo caso se obtiene la ventaja de usar la caché de paquetes.
Para restaurar paquetes desde una fuente personalizada externa, use la tarea .NET Core:
# do this before your build tasks
steps:
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: restore
projects: '**/*.csproj'
feedsToUse: config
nugetConfigPath: NuGet.config # Relative to root of the repository
externalFeedCredentials: <Name of the NuGet service connection>
# ...
Para obtener más información sobre las NuGet de servicio, vea Publicar en NuGet fuente.
Seleccione Tareas en la canalización. Seleccione el trabajo que ejecuta las tareas de compilación. A + continuación, seleccione esta opción para agregar una nueva tarea a ese trabajo.
En el catálogo de tareas, busque y agregue la tarea .NET Core.
Seleccione la tarea y, en Comando, seleccione restaurar.
Especifique cualquier otra opción que necesite para esta tarea. A continuación, guarde la compilación.
Nota
Asegúrese de que la fuente personalizada se especifica en el archivo y que las credenciales se especifican en la NuGet.config conexión NuGet servicio.
Compilación del proyecto
Para compilar el proyecto de .NET Core, ejecute el comando en la canalización dotnet build o use la tarea .NET Core.
Para compilar el proyecto mediante la tarea .NET Core, agregue el siguiente fragmento de código al azure-pipelines.yml archivo:
steps:
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)' # Update this to match your need
Puede ejecutar cualquier comando dotnet personalizado en la canalización. En el ejemplo siguiente se muestra cómo instalar y usar una herramienta global de .NET, dotnetsay:
steps:
- task: DotNetCoreCLI@2
displayName: 'Install dotnetsay'
inputs:
command: custom
custom: tool
arguments: 'install -g dotnetsay'
Build
Seleccione Tareas en la canalización. Seleccione el trabajo que ejecuta las tareas de compilación. A + continuación, seleccione esta opción para agregar una nueva tarea a ese trabajo.
En el catálogo de tareas, busque y agregue la tarea .NET Core.
Seleccione la tarea y, en Comando, seleccione compilar o publicar.
Especifique cualquier otra opción que necesite para esta tarea. A continuación, guarde la compilación.
Instalación de una herramienta
Para instalar una herramienta global de .NET Core como dotnetsay en la compilación que se ejecuta Windows, siga estos pasos:
Agregue la tarea .NET Core y establezca las siguientes propiedades:
- Comando: personalizado.
- Ruta de acceso a los proyectos:deje vacío.
- Comando personalizado:herramienta.
- Argumentos: .
- Comando: personalizado.
Agregue una tarea línea de comandos y establezca las siguientes propiedades:
- Script: .
Ejecutar las pruebas
Si tiene proyectos de prueba en el repositorio, use la tarea .NET Core para ejecutar pruebas unitarias mediante marcos de pruebas como MSTest, xUnit y NUnit. Para esta funcionalidad, el proyecto de prueba debe hacer referencia a Microsoft .NET.Test.SDK versión 15.8.0 o posterior. Los resultados de las pruebas se publican automáticamente en el servicio. Estos resultados se pone a su disposición en el resumen de la compilación y se pueden usar para solucionar problemas de pruebas con errores y análisis de tiempo de prueba.
Agregue el siguiente fragmento de código al azure-pipelines.yml archivo:
steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration $(buildConfiguration)'
Una alternativa consiste en ejecutar el comando con un registrador específico y, dotnet test a continuación, usar la dotnet test tarea:
steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testRunner: VSTest
testResultsFiles: '**/*.trx'
Use la tarea .NET Core con el conjunto de comandos para probar. La ruta de acceso a los proyectos debe hacer referencia a los proyectos de prueba de la solución.
Recopilación de cobertura de código
Si va a crear en la plataforma Windows, las métricas de cobertura de código se pueden recopilar mediante el recopilador de datos de cobertura integrado. Para esta funcionalidad, el proyecto de prueba debe hacer referencia a Microsoft .NET.Test.SDK versión 15.8.0 o posterior. Si usa la tarea .NET Core para ejecutar pruebas, los datos de cobertura se publican automáticamente en el servidor. El archivo .coverage se puede descargar desde el resumen de compilación para verlo en Visual Studio.
Agregue el siguiente fragmento de código al azure-pipelines.yml archivo:
steps:
# ...
# do this after other tasks such as building
- task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
Si decide ejecutar el comando, especifique el registrador de resultados de dotnet test pruebas y las opciones de cobertura. A continuación, use la Resultados de pruebas tarea Publicar:
steps:
# ...
# do this after your tests have run
- script: dotnet test <test-project> --logger trx --collect "Code coverage"
- task: PublishTestResults@2
inputs:
testRunner: VSTest
testResultsFiles: '**/*.trx'
Agregue la tarea .NET Core al trabajo de compilación y establezca las siguientes propiedades:
- Comando: test.
- Ruta de acceso alos proyectos: debe hacer referencia a los proyectos de prueba de la solución.
- Argumentos: .
Asegúrese de que la opción Publicar resultados de pruebas permanece seleccionada.
Recopilación de métricas de cobertura de código con Coverlet
Si va a compilar en Linux o macOS, puede usar Coverlet o una herramienta similar para recopilar métricas de cobertura de código.
Los resultados de cobertura de código se pueden publicar en el servidor mediante la tarea Publicar resultados de cobertura de código. Para usar esta funcionalidad, la herramienta de cobertura debe configurarse para generar resultados en formato cobertura o cobertura de JaCoCo.
Para ejecutar pruebas y publicar la cobertura de código con Coverlet:
- Agregue una referencia al paquete NuGet en los proyectos de prueba para proyectos de .NET inferiores
coverlet.msbuilda .NET 5. Para .NET 5, agregue una referencia alcoverlet.collectorNuGet paquete. - Agregue este fragmento de código al
azure-pipelines.ymlarchivo:
- task: UseDotNet@2
inputs:
version: '5.0.x'
includePreviewVersions: true # Required for preview versions
- task: DotNetCoreCLI@2
displayName: 'dotnet build'
inputs:
command: 'build'
configuration: $(buildConfiguration)
- task: DotNetCoreCLI@2
displayName: 'dotnet test'
inputs:
command: 'test'
arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura'
publishTestResults: true
projects: 'MyTestLibrary' # update with your test project directory
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage report'
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
Empaquetado y entrega del código
Después de compilar y probar la aplicación, puede cargar la salida de compilación en Azure Pipelines o TFS, crear y publicar un paquete de NuGet o empaquetar la salida de compilación en un archivo .zip que se implementará en una aplicación web.
Publicar artefactos en Azure Pipelines
Para publicar la salida de la compilación de .NET,
- Ejecute
dotnet publish --output $(Build.ArtifactStagingDirectory)en la CLI o agregue la DotNetCoreCLI@2 tarea con el comando publish. - Publique el artefacto mediante la tarea Publicar artefacto.
Agregue el siguiente fragmento de código al azure-pipelines.yml archivo:
steps:
- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: True
# this code takes all the files in $(Build.ArtifactStagingDirectory) and uploads them as an artifact of your build.
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: 'myWebsiteName'
Nota
La dotNetCoreCLI@2 tarea tiene una entrada que se establece en true publishWebProjectsdotNetCoreCLI@2 forma predeterminada. Esto publica todos los proyectos web en el repositorio de forma predeterminada. Puede encontrar más ayuda e información en la tarea de código abierto en GitHub.
Para copiar más archivos en el directorio de compilación antes de la publicación, use la Utilidad: copiar archivos.
Publicar en una fuente NuGet datos
Para crear y publicar un paquete NuGet, agregue el siguiente fragmento de código:
steps:
# ...
# do this near the end of your pipeline in most cases
- script: dotnet pack /p:PackageVersion=$(version) # define version variable elsewhere in your pipeline
- task: NuGetAuthenticate@0
input:
nuGetServiceConnections: '<Name of the NuGet service connection>'
- task: NuGetCommand@2
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: '<Name of the NuGet service connection>'
versioningScheme: byEnvVar
versionEnvVar: version
Para obtener más información sobre el control de versiones y la publicación NuGet paquetes,vea Publicar en NuGet fuente .
Implementación de una aplicación sitio
Para crear un .zip de archivos que esté listo para publicarse en una aplicación web, agregue el siguiente fragmento de código:
steps:
# ...
# do this after you've built your app, near the end of your pipeline in most cases
# for example, you do this before you deploy to an Azure web app on Windows
- task: DotNetCoreCLI@2
inputs:
command: publish
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: True
Para publicar este archivo en una aplicación web, consulte Implementación de Azure Web Apps .
Publicar artefactos en Azure Pipelines
Use la tarea Publicar Artifacts para publicar la salida de la compilación en Azure Pipelines o TFS.
Publicar en una fuente NuGet datos
Si desea publicar el código en una fuente de NuGet, siga estos pasos:
Use una tarea de .NET Core con el comando establecido en pack.
Implementación de una aplicación sitio
Use una tarea de .NET Core con el conjunto de comandos para publicar.
Asegúrese de que ha seleccionado la opción para crear un archivo .zip archivo.
Para publicar este archivo en una aplicación web, consulte Implementación de Azure Web Apps .
Compilación de una imagen e inserción en el registro de contenedor
Para la aplicación, también puede compilar una imagen einsertarla en un registro de contenedor.
Solución de problemas
Si puede compilar el proyecto en la máquina de desarrollo, pero tiene problemas para compilarlo en Azure Pipelines o TFS, explore las siguientes posibles causas y acciones correctivas:
- No instalamos versiones preliminares de la versión preliminar de SDK de .NET Core en agentes hospedados por Microsoft. Una vez publicada una nueva versión del SDK de .NET Core, podemos tardar unas semanas en publicarla en todos los centros de datos en los que Azure Pipelines se ejecuten. No tiene que esperar a que finalicemos este lanzamiento. Puede usar el Instalador de herramientas de .NET Core,como se explica en esta guía, para instalar la versión deseada de la SDK de .NET Core en agentes hospedados por Microsoft.
Compruebe que las versiones del entorno SDK de .NET Core tiempo de ejecución de la máquina de desarrollo coinciden con las del agente. Puede incluir un script de línea de comandos
dotnet --versionen la canalización para imprimir la versión del SDK de .NET Core. Use el Instalador de herramientas de .NET Core,como se explica en esta guía, para implementar la misma versión en el agente o actualice los proyectos y la máquina de desarrollo a la versión más reciente de la SDK de .NET Core.Es posible que esté usando alguna lógica en el IDE Visual Studio que no está codificado en la canalización. Azure Pipelines o TFS ejecuta cada uno de los comandos especificados en las tareas una tras otra en un nuevo proceso. Consulte los registros de la compilación Azure Pipelines o TFS para ver los comandos exactos que se ejecutaron como parte de la compilación. Repita los mismos comandos en el mismo orden en la máquina de desarrollo para localizar el problema.
Si tiene una solución mixta que incluye algunos proyectos de .NET Core y algunos proyectos de .NET Framework, también debe usar la tarea NuGet para restaurar los paquetes especificados en los archivos. De forma similar, debe agregar tareas MSBuild o Visual Studio build para compilar los .NET Framework proyecto.
Si las compilaciones no se pueden realizar de forma intermitente durante la restauración de paquetes, NuGet.org tiene problemas o hay problemas de red entre el centro de datos de Azure y NuGet.org. No están bajo nuestro control y es posible que deba explorar si el uso de Azure Artifacts con NuGet.org como origen ascendente mejora la confiabilidad de las compilaciones.
En ocasiones, cuando se lanza una actualización de las imágenes hospedadas con una nueva versión del SDK de .NET Core o Visual Studio, algo podría interrumpir la compilación. Esto puede ocurrir, por ejemplo, si una versión o característica más reciente de la herramienta NuGet se incluye con el SDK. Para aislar estos problemas, use la tarea Instalador de herramientas de .NET Core para especificar la versión del SDK de .NET Core que se usa en la compilación.
Preguntas más frecuentes
¿Dónde puedo obtener más información sobre Azure Artifacts y el servicio de Administración de paquetes TFS?
Administración de paquetes en Azure Artifacts y TFS
¿Dónde puedo obtener más información sobre los comandos de .NET Core?
Herramientas de la CLI de .NET Core
¿Dónde puedo obtener más información sobre la ejecución de pruebas en mi solución?
Pruebas unitarias en proyectos de .NET Core
¿Dónde puedo obtener más información sobre las tareas?
Tareas de compilación y versión
Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017
Use una canalización para compilar y probar automáticamente los proyectos de .NET Core. Obtenga información sobre cómo:
- Configure el entorno de compilación con agentes hospedados por Microsoft o auto hospedados.
- Restaure las dependencias, compile el proyecto y pruebe con CLI de .NET Core tarea o un script.
- Use la tarea publicar cobertura de código para publicar los resultados de cobertura de código.
- Empaquete y entregue el código con la tarea CLI de .NET Core y la tarea publicar artefactos de compilación.
- Publicar en una NuGet de distribución.
- Implemente la aplicación web en Azure.
Nota
Para obtener ayuda con .NET Framework proyectos, consulte Compilación de ASP.NET aplicaciones con .NET Framework.
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.
Nota
Esta guía se aplica a tfs versión 2017.3 y versiones más recientes.
Cree su primera canalización
¿No está Azure Pipelines? Si es así, se recomienda probar esta sección antes de pasar a otras secciones.
Creación de un proyecto de .NET
Si no tiene un proyecto de .NET con el que trabajar, cree uno nuevo y cargue el código en el repositorio de GitHub o Azure Repos. Empiece por instalar el SDK de .NET 6.0 más reciente.
Cree una nueva aplicación web de .NET 6.
dotnet new webapp -f net6.0
Desde la misma sesión de terminal, ejecute la aplicación localmente mediante el dotnet run comando desde el directorio del proyecto.
dotnet run