DotNet-Advanced-Series-3-2-CommandLine


主要内容:

  • 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 [] [-s|–source] [-ss|–symbol-source] [-t|–timeout]
[-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中添加引用

文章作者: Chaoqiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Chaoqiang !
评论
 上一篇
DotNet-Advanced-Series-3-3-NetCoreSourceCode DotNet-Advanced-Series-3-3-NetCoreSourceCode
编译的目的debug版本的运行时,调试源码,一行不差。 .NET Core 源码编译https://github.com/dotnet 这是一个合并过后的仓库,包括四个项目: coreclr installer libraries mo
下一篇 
DotNet-Advanced-Series-3-1-BasicTheory DotNet-Advanced-Series-3-1-BasicTheory
.NET Core 到底是什么?.NET Core 是小型的、高效的、可以通过文件复制直接部署的跨平台框架。 备受大家关注? .NET Core 自身开源,而且鼓励更多的 .NET 项目开源 .NET Core 支持跨平台特性,可以在Wi
  目录