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>
结果如下图所示。
--no-incremental
禁止增量生成。
--no-dependencies
忽略项目间引用,仅生成指定要生成的根项目。
--no-restore
生成时不隐式调用还原。
--force
强制解析所有依赖项,即使上次还原已成功,也不例外。 这相当于删除 project.assets.json 文件。
-v|--verbosity <LEVEL>
设置命令的详细级别。 允许的值有 q[uiet]
、m[inimal]
、n[ormal]
、d[etailed]
和diag[nostic]
。