第3章
.NET Core命令行工具
第3章.NET Core命令行工具
.NET Core命令行工具简称.NET Core CLI,是开发人员与.NET Core交互的唯一用户界面。开发人员通过.NET Core CLI可以创建、恢复和发布.NET Core应用程序。本章将介绍.NET Core CLI的详细用法。
3.1.NET Core CLI的安装
.NET Core CLI是一个独立的开源项目,可以独立安装。在一些特殊的情况下,需要单独部署和更新.NET Core CLI的版本。更多时候.NET Core CLI是随.NET Core SDK一起安装的。.NET Core SDK下载地址: https: //www.microsoft.com/net/download/all。
3.2创建.NET Core项目
在正式开发.NET Core应用之前,需要首先创建一个.NET Core的项目。使用.NET Core CLI可以创建已经支持的各种类型.NET Core应用程序。
dotnet new命令用来创建.NET Core的项目相关文件,例如用来描述项目的csproj文件,项目模板中自带的一些页面和代码文件等。dotnet new的参数如命令3.1所示。
dotnet new
[-o|--output] [-all|--show-all] [-h|--help]
[Template options] [--force] [--type] [-i|--install]
[-u|--uninstall]
dotnet new
dotnet new [-all|--show-all]
dotnet new [-h|--help]
命令3.1dotnet new
其中TEMPLATE参数用来指明创建新.NET项目的项目模板。目前,.NET Core支持的项目模板主要类型如表3.1所示。
表3.1dot new项目模板明细表
项 目 模 板项 目 类 型
支 持 语 言
console
创建一个.NET Core控制台应用项目
C# VB.NET F#
classlib
.NET Core类库项目
C# VB.NET F#
mstest
创建一个mstest框架为基础的单元测试项目
C# VB.NET F#
xunit
创建一个XUnit开源测试框架为基础的单元测试项目
C# VB.NET F#
web
创建一个空的ASP.NET Core Web项目
C#
mvc
创建一个ASP.NET Core MVC Web项目
C# F#
razor
创建一个支持Razor页面的ASP.NET Core MVC项目
C#
webapi
创建一个ASP.Net Core WebAPI项目
C#
nugetconfig
创建一个用于制作NuGet包的配置文件
sln
创建一个与Visual Studio兼容的sln解决方案文件
page
创建一个仅支持Razor视图的ASP.NET Core项目
viewimports
创建一个ASP.NET Core MVC使用的视图模板_ViewImports.cshtml文件
viewstart
创建一个ASP.NET Core StartMVC使用的视图模板_ViewStart.cshtml文件
参数lang或language用于指定项目所使用的编程语言。目前.NET Core的一些项目模板可以指定C#、VB.NET或者F#作为编程语言,其他的编程语言暂不支持。在Linux和macOS上,有一个常识: 参数通常分为长参数(以开头)和短参数(以),lang作为language的缩写是以为开头的,而language把参数名写全了,因此使用作为开头。
参数n或name用来指定项目的名称,如果不指定项目名称,那么dotnet new将会使用当前所在目录的目录名称作为项目的名称。
参数o或output用来指定dotnet new生成的项目文件的输出目录。在指定这个参数后,dotnet new会在当前目录中创建一个指定名字的子目录,并将生成的项目文件放入子目录中。
参数all或showall用来显示dotnet new所支持的项目模板信息。
参数l或list用来显示dotnet new的全部参数帮助信息和支持的项目模板信息。
参数h或help用来显示dotnet new的全部参数帮助信息,支持的项目模板信息和使用样例。
参数force让dotnet new生成的全新项目文件覆盖现有项目文件。
参数type过滤显示dotnet new支持的项目模板。type默认支持的类型有project、item和other。例如,可以使用dotnet new type item来显示dotnet new支持创建的单个文件类型,例如sln、viewimport和viewstart类型。
参数i或install用来安装自定义项目模板。自定义项目模板格式与Visual Studio支持的自定义项目模板相同,都是一个zip文件。
参数u或uninstall用来卸载已安装的自定义项目模板。
3.3.NET Core项目的迁移
对于早期版本的如.Net Core 1.0或者1.1版本的应用程序,dotnet命令行工具提供了dotnet migrate命令来帮助开发者从低版本的项目文件迁移到高版本的项目文件。
dotnet migrate迁移命令的语法如命令3.2所示。
dotnet migrate [] [-t|--template-file]
[-v|--sdk-package-version] [-x|--xproj-file]
[-s|--skip-project-references] [-r|--report-file]
[--format-report-file-json] [--skip-backup] [-h|--help]
命令3.2dotnet migrate
dotnet migrate既支持根据解决方案文件sln以递归的形式迁移整个解决方案的所有项目,也可以通过指定一个单独的项目路径来迁移单个.Net Core项目。从目前的具体情况来看,dotnet migrate的主要作用是根据指定的sln文件或者JSON格式的.NET 1.x项目的project.json文件内容分析项目之间的引用关系,并把JSON格式的项目内容翻译成MSBuild支持的XML格式的csproj文件,最后把旧的project.json格式的项目文件删除。
参数t或templatefile用来显式地指定一个MSBuild模板,让要转化的项目以这种项目模板作为目标进行转化。.NET Core 2.0支持的项目模板可参考dotnet new命令一节中支持的项目模板列表。
参数v或sdkpackageversion用来指定项目迁移后将基于哪个.NET Core版本。默认情况下,dotnet migrate进行迁移操作是不会修改项目依赖的.NET Core版本的。对于一个.NET Core 1.x的项目,如果不指定这个参数,那么项目迁移之后仅仅是把project.json文件转化为MSBuild格式的csproj文件,但是并不会强制升级项目所依赖的.NET Core版本。如果想把一个.NET Core 1.x项目升级到.NET Core 2.0,那么需要通过v或者sdkpackageversion参数指定.NET Core版本,如命令3.3所示。
dotnet migrate -v netcoreapp2.0
命令3.3dotnet项目迁移到2.0
参数x或xprojfile用来指定xproj文件的位置。
如果当前文件夹内不止一个xproj文件,则必须指定该参数。
xproj文件是.NET Core 1.x中用来描述构建配置的文件。由于.NET Core 1.x期望获得Visual Sudio和Xamarin Studio(现在已经更名为Visual Studio for Mac)等集成开发环境之间构建的兼容性,因此发明了xproj文件。这个文件以XML格式的形式描述了构建一个.NET Core 1.x项目的基本参数。由于是.NET Core 1.x定义的xproj,因此被所有支持.NET Core 1.x开发的集成开发环境所支持。在.NET Core 2.0时代,项目文件将重新回归csproj或vbproj等项目文件类型,构建参数包含于csproj等项目文件中。通常情况下,project.json文件和xproj文件共存于同一个目录下,dotnet migrate可以自动定位xproj文件的位置。在一些特殊情况下,就需要通过x或xprojfile来指定待转换项目的xproj文件的路径。
参数s或skipprojectreferences,用来告诉dotnet migrate在进行项目迁移时,仅迁移当前项目,而不对其引用的项目进行迁移。而在默认情况下,dotnet migrate会根据project.json文件中描述的项目引用关系,递归式地将全部相关项目进行迁移。
参数r或reportfile用来指定迁移过程中产生的迁移报告的保存路径。如果不指定这个参数,就不会产生迁移报告。
参数formatreportfilejson将迁移报告转化成json格式文件进行输出。
参数skipbackup在指定dotnet migrate操作时不对待迁移项目进行备份,直接执行迁移操作并删除project.json文件。在默认情况下,即不指定该参数时,dotnet migrate需要先备份整个项目再执行迁移操作。
3.4.NET Core项目的构建
.NET Core 2.0项目的构建主要依赖于MSBuild实现。通过MSBuild读取项目文件中的构建配置,调用编译器、脚本等完成一系列的构建动作。通过项目构建,可以获得用于执行的二进制输出结果。
dotnet build命令用来构建指定的项目和指定项目的依赖项目。通过构建,得到.NET Core的二进制可执行输出。dotnet build命令语法如命令3.4所示。
dotnet build [] [-o|--output] [-f|--framework]
[-c|--configuration] [-r|--runtime] [--version-suffix]
[--no-incremental] [--no-dependencies] [-v|--verbosity]
[-h|--help]
命令3.4dotnet build
如果要编译的项目不在当前目录,那么可以通过dotnet build项目所在目录的方式进行编译,即使用参数。如果没有指定项目目录,就编译当前目录下的项目。
参数o或output用来指定构建结果的输出目录。项目经过构建而生成的最终二进制可执行内容将被保存在指定目录下。
参数f或framework用来指定未来的编译结果要运行在哪一个.NET Framework版本上。并且,这个Framework版本已经在该项目文件中指定了。这也很好理解,不能指望一个为.NET Core 2.0编写的项目可以运行在.NET Framework 2.0版本上,因此目标框架必须在项目文件中已经声明过。Framework通常按简短的目标框架名字对象(Target Framework Moniker,TFM)来表示。在给定framework参数时,使用TFM名称即可,详见表3.2所示。
表3.2简短目标框架与.NET版本对照表
名称缩写TFM
.NET Standard
netstandard
netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
.NET Core
netcoreapp
netcoreapp1.0
netcoreapp1.1
.NET Framework
net
net11
net20
……
展开