dotnet build
Este artículo se aplica a: ✔️ SDK de .NET Core 2.x y versiones posteriores
NOMBRE
dotnet build: compila un proyecto y todas sus dependencias.
Sinopsis
dotnet build [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
[-c|--configuration <CONFIGURATION>] [-f|--framework <FRAMEWORK>]
[--force] [--interactive] [--no-dependencies] [--no-incremental]
[--no-restore] [--nologo] [--no-self-contained] [--os <OS>]
[-o|--output <OUTPUT_DIRECTORY>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--self-contained [true|false]] [--source <SOURCE>]
[-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]
dotnet build -h|--help
Descripción
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.
Restauración implícita
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.
Salida de biblioteca o ejecutable
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.
MSBuild
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.
Descargas de manifiestos de cargas de trabajo
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.
Argumentos
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.
Opciones
-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 x86se 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).
-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.
-f|--framework <FRAMEWORK>Compila para un marco de trabajo específico. El marco se debe definir en el archivo de proyecto.
--forceFuerza 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|--helpImprime una descripción de cómo usar el comando.
--interactivePermite 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-dependenciesOmite las referencias de proyecto a proyecto (P2P) y solo compila el proyecto raíz especificado.
--no-incrementalMarca 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-restoreNo ejecuta una restauración implícita durante la compilación.
--nologoNo se muestra la pancarta de inicio ni el mensaje de copyright. Disponible desde el SDK de .NET Core 3.0.
--no-self-containedPublica 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--frameworkal especificar esta opció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 osse establece el RID enos-x64. Si usa esta opción, no use la opción-r|--runtime. Disponible a partir de .NET 6 (versión preliminar 7).
-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-containedo--no-self-containedtambién.--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 del SDK de .NET 6.--source <SOURCE>URI del origen del paquete NuGet que se usará durante la operación de restauración.
-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. Para obtener más información, vea LoggerVerbosity.
--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.
Ejemplos
Creación de un proyecto y sus dependencias:
dotnet buildCreación de un proyecto y sus dependencias mediante la configuración de lanzamiento:
dotnet build --configuration ReleaseCompilación de un proyecto y sus dependencias para un tiempo de ejecución concreto (en este ejemplo, Ubuntu 18.04):
dotnet build --runtime ubuntu.18.04-x64Compile el proyecto y use el origen del paquete NuGet especificado durante la operación de restauración:
dotnet build --source c:\packages\mypackagesCompile 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:dotnet build -p:Version=1.2.3.4