dotnet build
Este artículo se aplica a: ✔️ SDK de .NET Core 3.1 y versiones posteriores
dotnet build
: compila un proyecto y todas sus dependencias.
dotnet build [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
[--artifacts-path <ARTIFACTS_DIR>]
[-c|--configuration <CONFIGURATION>] [-f|--framework <FRAMEWORK>]
[--disable-build-servers]
[--force] [--interactive] [--no-dependencies] [--no-incremental]
[--no-restore] [--nologo] [--no-self-contained] [--os <OS>]
[-o|--output <OUTPUT_DIRECTORY>]
[-p|--property:<PROPERTYNAME>=<VALUE>]
[-r|--runtime <RUNTIME_IDENTIFIER>]
[--self-contained [true|false]] [--source <SOURCE>]
[--tl:[auto|on|off]] [--use-current-runtime, --ucr [true|false]]
[-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]
dotnet build -h|--help
El comando dotnet build
crea el proyecto y sus dependencias en un conjunto de archivos binarios. Los archivos binarios incluyen el código del proyecto en archivos de lenguaje intermedio (IL) con una extensión .dll. Según el tipo de proyecto y la configuración, se pueden incluir otros archivos, como los siguientes:
- Un archivo ejecutable que se pueda usar para ejecutar la aplicación, si el tipo de proyecto es un archivo ejecutable que tiene como destino .NET Core 3.0 o versiones posteriores.
- Archivos de símbolos usados para la depuración con una extensión .pdb.
- Un archivo .deps.json, que muestra las dependencias de la aplicación o la biblioteca.
- Un archivo .runtimeconfig.json, que especifica el runtime compartido y su versión de una aplicación.
- Otras bibliotecas de las que depende el proyecto (a través de referencias de proyecto o referencias de paquetes NuGet).
En el caso de los proyectos ejecutables que tienen como destino versiones anteriores a .NET Core 3.0, las dependencias de biblioteca de NuGet normalmente no se copian en la carpeta de salida. Se resuelven desde la carpeta de paquetes globales NuGet en tiempo de ejecución. Teniendo eso en cuenta, el producto de dotnet build
no está listo para transferirse a otra máquina para ejecutarse. Para crear una versión de la aplicación que se pueda implementar, se debe publicar (por ejemplo, con el comando dotnet publish). Para obtener más información, vea Implementación de aplicaciones de .NET.
En el caso de los proyectos ejecutables que tienen como destino .NET Core 3.0 y versiones posteriores, las dependencias de biblioteca se copian en la carpeta de salida. Esto significa que, si no hay ninguna otra lógica específica de la publicación (como los proyectos web), se debería poder implementar la salida de la compilación.
La compilación requiere el archivo project.assets.json, que muestra las dependencias de la aplicación. El archivo se crea cuando se ejecuta dotnet restore
. Sin el archivo de recursos en su lugar, las herramientas no pueden resolver los ensamblados de referencia, lo que se traduce en errores.
No es necesario ejecutar dotnet restore
porque lo ejecutan implícitamente todos los comandos que necesitan que se produzca una restauración, como dotnet new
, dotnet build
, dotnet run
, dotnet test
, dotnet publish
y dotnet pack
. Para deshabilitar la restauración implícita, use la opción --no-restore
.
El comando dotnet restore
sigue siendo válido en algunos escenarios donde tiene sentido realizar una restauración explícita, como las compilaciones de integración continua en Azure DevOps Services o en los sistemas de compilación que necesitan controlar explícitamente cuándo se produce la restauración.
Para obtener información sobre cómo administrar fuentes de NuGet, vea la documentación de dotnet restore
.
Este comando admite las opciones de dotnet restore
cuando se pasan con el formato largo (por ejemplo, --source
). No se admiten las opciones de formato corto, como -s
.
Si el proyecto es ejecutable o no viene determinado por la propiedad <OutputType>
en el archivo del proyecto. En el ejemplo siguiente se muestra un proyecto en el que se genera código ejecutable:
<PropertyGroup>
<OutputType>Exe</OutputType>
</PropertyGroup>
Para generar una biblioteca, omita la propiedad <OutputType>
o cambie su valor a Library
. La DLL de IL para una biblioteca no contiene puntos de entrada y no se puede ejecutar.
dotnet build
usa MSBuild para compilar el proyecto, por lo que admite las compilaciones en paralelo e incrementales. Para obtener más información, consulte Compilaciones incrementales.
Además de sus opciones, el comando dotnet build
acepta opciones de MSBuild, como -p
para establecer propiedades o -l
para definir un registrador. Para obtener más información sobre estas opciones, vea la Referencia de la línea de comandos de MSBuild. O también puede usar el comando dotnet msbuild.
Nota
Cuando dotnet build
lo ejecuta automáticamente dotnet run
, no se respetan argumentos como -property:property=value
.
Ejecutar dotnet build
es equivalente a ejecutar dotnet msbuild -restore
; sin embargo, el nivel de detalle predeterminado de la salida es distinto.
Cuando se ejecuta, este comando inicia una descarga asincrónica en segundo plano de manifiestos de publicidad de cargas de trabajo. Si la descarga no ha terminado cuando finaliza el comando, se detiene. Para obtener más información, vea Manifiestos de publicidad.
PROJECT | SOLUTION
El archivo de proyecto o solución para compilar. Si no se especifica un archivo de proyecto o solución, MSBuild busca en el directorio de trabajo actual un archivo que tiene una extensión de archivo que termina por proj o sln y usa ese archivo.
-a|--arch <ARCHITECTURE>
Especifica la arquitectura de destino. Se trata de una sintaxis abreviada para establecer el identificador del entorno de ejecución (RID), donde el valor proporcionado se combina con el RID predeterminado. Por ejemplo, en un equipo
win-x64
, al especificar--arch x86
se establece el RID enwin-x86
. Si usa esta opción, no use la opción-r|--runtime
. Disponible a partir de .NET 6 (versión preliminar 7).
--artifacts-path <ARTIFACTS_DIR>
Todos los archivos de salida de compilación del comando ejecutado se incluirán en subcarpetas en la ruta de acceso especificada, separadas por el proyecto. Para obtener más información, consulte Diseño de salida de artefactos. Disponible a partir del SDK de .NET 8.
-c|--configuration <CONFIGURATION>
Define la configuración de compilación. El valor predeterminado para la mayoría de los proyectos es
Debug
, pero puede invalidar los valores de configuración de compilación en el proyecto.
--disable-build-servers
Obliga al comando a omitir los servidores de compilación persistentes. Esta opción proporciona una manera coherente de deshabilitar todo el uso del almacenamiento en caché de compilación, lo que fuerza una compilación desde cero. Una compilación que no se basa en memorias caché es útil cuando las memorias caché están dañadas o tienen un estado incorrecto por algún motivo. Disponible a partir del SDK de .NET 7.
-f|--framework <FRAMEWORK>
Compila para un marco de trabajo específico. El marco se debe definir en el archivo de proyecto. Ejemplos:
net7.0
,net462
.--force
Fuerza la resolución de todas las dependencias, incluso si la última restauración se realizó correctamente. Especificar esta marca es lo mismo que eliminar el archivo project.assets.json.
-?|-h|--help
Imprime una descripción de cómo usar el comando.
--interactive
Permite que el comando se detenga y espere una entrada o una acción del usuario. Por ejemplo, para completar la autenticación. Disponible desde el SDK de .NET Core 3.0.
--no-dependencies
Omite las referencias de proyecto a proyecto (P2P) y solo compila el proyecto raíz especificado.
--no-incremental
Marca la compilación como no segura para la compilación incremental. Esta marca desactiva la compilación incremental y fuerza una recompilación limpia del gráfico de dependencias del proyecto.
--no-restore
No ejecuta una restauración implícita durante la compilación.
--nologo
No se muestra la pancarta de inicio ni el mensaje de copyright.
--no-self-contained
Publica la aplicación como una aplicación dependiente del marco. Debe instalarse un entorno de ejecución de .NET compatible en la máquina de destino para ejecutar la aplicación. Disponible a partir del SDK de .NET 6.
-o|--output <OUTPUT_DIRECTORY>
Directorio donde se colocan los archivos binarios compilados. Si no se especifica la ruta de acceso predeterminada es
./bin/<configuration>/<framework>/
. En el caso de los proyectos con varias plataformas de destino (a través de la propiedadTargetFrameworks
), también debe definir--framework
al especificar esta opción.SDK de .NET 7.0.200 y versiones posteriores
Si especifica la opción
--output
al ejecutar este comando en una solución, la CLI emitirá una advertencia (un error en la versión 7.0.200) debido a la semántica poco clara de la ruta de acceso de salida. No se permite la opción--output
porque todas las salidas de todos los proyectos compilados se copiarían en el directorio especificado, que no es compatible con proyectos de varios destinos, así como con proyectos que tienen diferentes versiones de dependencias directas y transitivas. Para más información, consulte la opción Nivel de solución: la opción--output
ya no es válida para los comandos relacionados con la compilación.
--os <OS>
Especifica el sistema operativo (SO) de destino. Se trata de una sintaxis abreviada para establecer el identificador del entorno de ejecución (RID), donde el valor proporcionado se combina con el RID predeterminado. Por ejemplo, en un equipo
win-x64
, al especificar--os linux
se establece el RID enlinux-x64
. Si usa esta opción, no use la opción-r|--runtime
. Disponible a partir de .NET 6.
-p|--property:<PROPERTYNAME>=<VALUE>
Establece una o varias propiedades MSBuild. Especifique varias propiedades delimitadas por punto y coma o repitiendo la opción:
CLI de .NET--property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2> --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
-r|--runtime <RUNTIME_IDENTIFIER>
Especifica el tiempo de ejecución de destino. Para obtener una lista de identificadores de tiempo de ejecución (RID), consulte el catálogo de RID. Si usa esta opción con el SDK de .NET 6, use
--self-contained
o--no-self-contained
también. Si no se especifica, lo predeterminado es compilar para el sistema operativo y la arquitectura actuales.--self-contained [true|false]
Publica el entorno de ejecución de .NET con la aplicación para que no sea necesario instalarlo en el equipo de destino. Si se especifica un identificador de tiempo de ejecución, el valor predeterminado es
true
. Disponible a partir de .NET 6.--source <SOURCE>
URI del origen del paquete NuGet que se usará durante la operación de restauración.
--tl:[auto|on|off]
Especifica si se debe usar el registrador de terminal para la salida de compilación. El valor predeterminado es
auto
, que primero comprueba el entorno antes de habilitar el registro de terminal. La comprobación del entorno comprueba que el terminal sea capaz de usar características de salida modernas y no usa una salida estándar redirigida antes de habilitar el nuevo registrador. La opciónon
omite la comprobación del entorno y habilita el registro de terminal. La opciónoff
omite la comprobación del entorno y usa el registrador de consola predeterminado.El registrador de terminal muestra la fase de restauración seguida de la fase de compilación. Durante cada fase, los proyectos en compilación actuales aparecen en la parte inferior del terminal. Cada proyecto que se compila genera una salida del destino de MSBuild que se está compilando actualmente y la cantidad de tiempo invertido en ese destino. Puede buscar en esta información para obtener más información sobre la compilación. Cuando un proyecto termina de compilarse, se escribe una única sección "compilación completada" en la que se captura lo siguiente:
- El nombre del proyecto compilado.
- La plataforma de destino (si es de destino múltiple).
- El estado de esa compilación.
- La salida principal de esa compilación (con hipervínculo).
- Los diagnósticos generados para ese proyecto.
Esta opción está disponible a partir de .NET 8.
-v|--verbosity <LEVEL>
Establece el nivel de detalle del comando. Los valores permitidos son
q[uiet]
,m[inimal]
,n[ormal]
,d[etailed]
ydiag[nostic]
. De manera predeterminada, esminimal
. De forma predeterminada, MSBuild muestra advertencias y errores en todos los niveles de detalle. Para excluir las advertencias, use/property:WarningLevel=0
. Para más información, consulte LoggerVerbosity y WarningLevel.--use-current-runtime, --ucr [true|false]
Establece
RuntimeIdentifier
en una plataforma portátilRuntimeIdentifier
, en función de la que haya en la máquina. Esto sucede implícitamente con propiedades que requieren unRuntimeIdentifier
, comoSelfContained
,PublishAot
,PublishSelfContained
,PublishSingleFile
, yPublishReadyToRun
. Si la propiedad se establece en false, esa resolución implícita ya no se producirá.--version-suffix <VERSION_SUFFIX>
Establece el valor de la propiedad
$(VersionSuffix)
que se va a usar al compilar el proyecto. Solo funciona si no se establece la propiedad$(Version)
. A continuación,$(Version)
se establece en$(VersionPrefix)
combinada con$(VersionSuffix)
, separadas por un guion.
Creación de un proyecto y sus dependencias:
CLI de .NETdotnet build
Creación de un proyecto y sus dependencias mediante la configuración de lanzamiento:
CLI de .NETdotnet build --configuration Release
Compile un proyecto y sus dependencias para un entorno de ejecución específico (en este ejemplo, Linux):
CLI de .NETdotnet build --runtime linux-x64
Compile el proyecto y use el origen del paquete NuGet especificado durante la operación de restauración:
CLI de .NETdotnet build --source c:\packages\mypackages
Compile el proyecto y establezca la versión 1.2.3.4 como un parámetro de compilación mediante la opción de MSBuild
-p
:CLI de .NETdotnet build -p:Version=1.2.3.4
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: