dotnet build 命令将项目及其依赖项生成一组二进制文件。二进制文件包括 .dll 程序集文件 (包含 IL 中间语言) 和用于调试的 .pdb 符号文件。同时生成的还有 .deps.json 和 .runtimeconfig.json 文件,前者包含了应用程序的依赖项,后者则指定了应用程序的共享运行时及其版本。

当项目有第三方依赖项时,dotnet build 生成项目的输出,也就是 bin/Debug/netcoreapp2.0 中其实不包含第三方的依赖项,因为它会从 NuGet 缓存解析这些依赖项。在将不包含第三方依赖项的输出转移到另一台计算机执行时,如果解析依赖项失败,那么项目也会运行失败。对于发布到其他平台的情况,提供了专门的发布命令 dotnet publish 。关于更多 dotnet publish的信息,请参阅 2.4.5 节内容。

dotnet build 命令需要 project.assets.json 文件,它包含了应用程序的依赖项,该文件是在执行 dotnet restore的时候生成的。如果删除了 obj 目录中的 project.assets.json 文件,再执行 dotnet build --no-restore 命令,就会报找不到资产文件的错误。当然 dotnet build 的时候找不到 project.assets.json 文件,会隐式调用 dotnet restore 命令。

dotnet build 使用 MSBuild 构建项目,因此它支持并行生成和增量生成。

项目文件的 <OutputType> 属性决定了项目是否是可执行的。

<PropertyGroup>
    <OutputType>Exe</OutputType>
</PropertyGroup>

如果生成库,省略 <OutputType> 标记即可。生成输出中的主要区别在于,针对某个库的 IL DLL 不包含入口点,且不能执行。

参数

PROJECT

要生成的解决方案或项目路径。如果不指定,MSBuild 会从当前目录查找。

// 从当前目录中查找
dotnet build
// 生成解决方案
dotnet build demo.sln
// 生成项目
dotnet build proj.csproj

选项

-h|--help

打印帮助信息。

-c|--configuration {Debug|Release}

定义生成配置,默认为 Debug

-f|--framework <FRAMEWORK>

针对指定的目标框架生成。

该选项指定的目标框架必须是在项目文件中定义的。

<PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

<PropertyGroup>
    <TargetFrameworks>net461;netcoreapp2.0;net461</TargetFrameworks>
</PropertyGroup>

关于更多目标框架的内容,请参阅 14.1.1 节。

如果在项目文件中同时指定了 net461 和 netcoreapp2.0 两种目标框架,dotnet build 可以只针对一种生成。

dotnet build -f netcoreapp2.0

注意:在 Linux 和 MacOS 上指定 net461 目标框架会报错,因为这两个平台上是没有安装 .NET Framework 的。

-r|--runtime <RUNTIME_IDENTIFIER>

针对指定的目标运行时生成。

关于更多运行时标识符(RID)的内容,请参阅 14.1.2 节。

dotnet build -r win10-x64

-o|--output <OUTPUT_DIRECTORY>

指定生成输出的目录。如果不指定,默认为 .bin/[configuration]/[framework]

--version-suffix <VERSION_SUFFIX>

指定版本后缀。

假如生成的产品版本为 1.0.0-preview1-final,可以执行下面的命令。

dotnet build --version-suffix final /p:VersionPrefix=1.0.0-preview1

或者是在项目文件中指定如下属性。

<PropertyGroup>
    <VersionPrefix>1.0.0-preview1</VersionPrefix>
    <VersionSuffix>final</VersionSuffix>
</PropertyGroup>

结果如下图所示。

明哥学.NET Core——2.4.3 dotnet build 命令-程序旅途

--no-incremental

禁止增量生成。

--no-dependencies

忽略项目间引用,仅生成指定要生成的根项目。

--no-restore

生成时不隐式调用还原。

--force

强制解析所有依赖项,即使上次还原已成功,也不例外。 这相当于删除 project.assets.json 文件。

-v|--verbosity <LEVEL>

设置命令的详细级别。 允许的值有 q[uiet]m[inimal]n[ormal]d[etailed]diag[nostic]