主要内容:
- dotnet new 命令,创建项目
- dotnet sln 命令 ,管理解决方案
- dotnet reference 管理项目间引用
- dotnet package 管理项目引用包
- dotnet build 项目构建
- dotnet publish 项目发布
CLI开篇
CLI命令行,唯一的用户界面 .NET Core。
https://github.com/dotnet/cli 这是net 5之前的CLI; 现在已经被合并到https://github.com/dotnet/sdk这个仓库了。
这是一个工具,跟着SDK一起安装的,运行时也会有CLI,不一样。
SDK 里的是完整的CLI, 运行时只有run等简单命令。
dotnet –info 可以显示安装的SDK和运行时;
dotnet –version 显示当前目录下使用的SDK版本,默认按照最新的;
那么如何切换版本呢?
在目录下有一个Global.json,会自动读取SDK版本号。例如我们可以在这个目录下创建一个Global.json来切换版本。
dotnet new global.json –sdk-version 2.2.402
当前目录,然后向上级目录搜索,直到找到这个global.json,使用这个文件中的SDK版本号,如果没找到的话就是使用最新的。
VS,学的.NET Core 跨平台,就应该有点跨平台开发的样子。
CLI这个就是跨平台的工具,在Linux下也是一样的命令。
dotnet new <TEMPLATE> [-l|--list] [--type]
dotnet new <TEMPLATE> [-lang|--language] [-n|--mena]
[-o|--output] [Template options] [--force]
[-i|--install] [-u|--uninstall]
[--update-apply] [--update-check]
<>这个代表是必填参数,[]代表是可选参数,-代表是简写,–代表是写全
例如可以快速查找需要创建的模板名字,通过type和list组合即可:
dotnet new –list –type project 查找项目模板
dotnet new –list –type item 查找子项模板
dotnet new –list –type other 查找其他模板
创建一个console项目,使用 dotnet new console –name Helloworld,默认创建一个Helloword的目录,当然也可以使用dotnet new console -n Helloworld -o Demo指定输出目录,name是指项目名字。
补全dotnet命令可以这么操作:
- Step1: 在powershell中执行下面命令,创建
Microsoft.PowerShell_profile.ps1
这个文件;
if (!(Test-Path -Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}
- Step2: 用记事本打开这个文件
notepad $PROFILE
,并在记事本中贴上下面的命令行,保存;
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock {
param($commandName, $wordToComplete, $cursorPosition)
dotnet complete --position $cursorPosition "$wordToComplete" | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
- Step3: 在powershell中执行
set-ExecutionPolicy RemoteSigned
这个命令进行注册。
如何来创建解决方案?
- dotnet sln [
] [command] [-h|–help]
第一步,dotnet new sln -o Demo
创建一个解决方案文件demo.sln
第二步,然后需要cd到这个Demo目录创建项目:
- dotnet new console -o Demo.Main
- dotnet new classlib -o Demo.Core
第三步,将创建的项目添加到解决方案下面,并查看sln下面有多少项目,删除项目也是一样:
- dotnet sln add Demo.Main Demo.Core
- dotnet sln list
- dotnet sln remove Demo.Main Demo.Core
第四步,直接用code Demo
命令通过VSCode打开这个解决方案。
第五步,添加引用关系,例如Main要引用Core这个项目。还可以查看,删除引用等。dotnet <add|list|remove> [<PROJECT>] reference <PROJECT_REFERENCES>
- dotnet add .\Demo.Main reference .\Demo.Core
- dotnet list .\Demo.Main reference .\Demo.Core
- dotnet remove .\Demo.Main reference .\Demo.Core
第六步,添加nuget packages. 相应的,查看和删除也是一样的
- dotnet add .\Demo.Main package NLog
- dotnet list .\Demo.Main package NLog
- dotnet remove .\Demo.Main package NLog
如何构建项目?MSBuild
dotnet build [-h|–help]
MSBuild调用了Roslyn,生成二进制。Roslyn只是负责生成中间语言,从中间语言到二进制是需要MSBuild这个工具来实现的。
dotnet build [
[-o|–output] 输出目录
[-f|–framework] 以哪个目标框架生成
[-c|–configuration] Debug/Release
[-r|–runtime] RID=[os].[version]-[arch] [osx.10.11-x64]
[–no-incremental] 全量 默认增量
[–no-dependencies]
[-v|–verbosity] 基本很多命令都有这个参数,输出日志 d详细,q静默,最少
如何发布项目?
dotnet publish
执行时会先判断当前目录是否在上一个构建之后有改动。没有改动的话直接打包。
代码编译后的中间语言输出结果。
SDK(开发工具包,CLI) 包含Runtime(安装包)。
独立发布:自带运行时,针对系统进行发布,文件会大一些,多一些。
系统里的运行时版本变量额,但是你的应用用了某个版本的API。依赖发布:不带运行时,跨平台,SDK是开发用的,默认就是依赖发布
dotnet publish [
[-o|–output] [-f|–framework] [-c|–configuration]
[-r|–runtime] [–no-incremental] [–no-dependencies]
[-v|–verbosity] [–self-contained] [–no-self-contained]
- dotnet publish -r win10-x64 –self-contained 这个就是独立发布,包含了运行时,文件较多。
- dotnet publish 这是依赖运行时的发布,可以看到文件比较少。
如何运行项目?
- dotnet run 针对的是项目,要在项目文件夹;
- dotnet Demo.Main.dll 针对的是dll文件;
如何发布Nuget包?
dotnet nuget push [
[-k|–api-key] [-sk|–symbol-api-key]
- Step1: 创建一个库,
dotnet new classlib -n ZhengChaoqiang.Helloworld -o Packages
- Step2: 打包成nupkg格式的包,
dotnet pack -o nupkgs
- Step3: 推送到Nuget服务器,
dotnet nuget push nupkgs\ZhengChaoqiang.Helloworld.1.0.0.nupkg -k oy2dl7wy6yifgnogmkyasy6ybl7b5nleljo6lnvxfpg6se -s https://api.nuget.org/v3/index.json
其中的-k 是nuget的api key, 需要自己在nuget服务器上申请。
另外,官方nuget上的包,你删不了,只能设置成不被删除。
查看本地包缓存: dotnet nuget locals all -l
查看本地包缓存,还可以清除这些缓存,释放空间,可以使用这个命令dotnet nuget locals all -clear
CLI实践一下
使用CLI创建一个解决方案和项目实战
- dotnet new sln -o eShop
- cd .\eShop\
- dotnet new classlib -o eShop.Logic
- dotnet new mvc -o eShop.Web
- dotnet new webapi-o eShop.Service
- dotnet sln add eShop.Logic eShop.Web eShop.Service 加入到解决方案
- dotnet add eShop.Web reference eShop.Logic 添加项目引用
- dotnet add eShop.Service reference eShop.Logic 添加项目引用
- code .
- dotnet add eShop.Logic package Nlog –version 4.7.0 添加Nuget引用
- dotnet new xunit -o eShop.Logic.tests 添加测试项目
- dotnet sln add eShop.Logic.tests
- dotnet add eShop.Logic.tests reference eShop.Logic 在test中添加引用