简介
.NET命令行接口 (CLI) 工具是用于开发、生成、运行和发布.NET应用程序的跨平台工具链。

https://docs.microsoft.com/zh-cn/dotnet/core/tools/
SDK
- .NET SDK (Software Development Kit) v5.0.201.exe 
| 里程碑 | 发布日期 | 
|---|---|
| .NET Core 2.1.x (servicing) | LTS (Long Term Support) release. Approximately every 1-2 months or as needed. | 
| .NET Core 3.1.x (servicing) | LTS (Long Term Support) release. Approximately every 1-2 months or as needed. | 
| .NET 5.0 | Release scheduled for November 2020 | 
| .NET 6.0 | LTS (Long Term Support) release, scheduled for November 2021 | 
| .NET 7.0 | Release scheduled for November 2022 | 
| .NET 8.0 | LTS (Long Term Support) release, scheduled for November 2023 | 
- https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install 
- https://github.com/dotnet/core/blob/main/roadmap.md 
检查安装
dotnet

新建
dotnet new $templateName

其中常见的模板名称有:
| 模板名字 | 短名称 | 版本要求 | 
|---|---|---|
| 控制台应用程序 | console | >= 1.0 | 
| 类库 | classlib | >= 1.0 | 
| WPF应用程序 | wpf | >= 3.0 | 
| WPF类库 | wpflib | >= 3.0 | 
| WPF自定义控件库 | wpfcustomcontrollib | >= 3.0 | 
| WPF用户控件库 | wpfusercontrollib | >= 3.0 | 
| Windows窗体(WinForms) 应用程序 | winforms | >= 3.0 | 
| Windows窗体(WinForms)类库 | winformslib | >= 3.0 | 
| Worker Service | worker | >= 3.0 | 
| 单元测试项目 | mstest | >= 1.0 | 
| NUnit 3测试项目 | nunit | >= 2.1 | 
| NUnit 3测试项 | nunit-test | >= 2.2 | 
| xUnit 测试项目 | xunit | >= 1.0 | 
| Razor组件 | razorcomponent | >= 3.0 | 
| Razor页 | page | >= 2.0 | 
| MVC ViewImports | viewimports | >= 2.0 | 
| MVC ViewStart | viewstart | >= 2.0 | 
| Blazor 服务器应用 | blazorserver | >= 3.0 | 
| Blazor WebAssembly应用 | blazorwasm | >= 3.1 | 
| ASP.NET Core空 | web | >= 1.0 | 
| ASP.NET Core Web应用程序 (Model-View-Controller) | mvc | >= 1.0 | 
| ASP.NET Core Web 应用程序 | webapp,razor | >= 2.0 | 
| 含 Angular 的ASP.NET Core | angular | >= 2.0 | 
| 含 React.js 的ASP.NET Core | react | >= 2.0 | 
| 含 React.js 和 Redux 的ASP.NET Core | reactredux | >= 2.0 | 
| Razor类库 | razorclasslib | >= 2.1 | 
| ASP.NET Core Web API | webapi | >= 1.0 | 
| ASP.NET Core gRPC服务 | grpc | >= 3.0 | 
| dotnet gitignore文件 | gitignore | >= 3.0 | 
| global.json文件 | globaljson | >= 2.0 | 
| NuGet配置 | nugetconfig | >= 1.0 | 
| Dotnet本地工具清单文件 | tool-manifest | >= 3.0 | 
| Web配置 | webconfig | >= 1.0 | 
| 解决方案文件 | sln | >= 1.0 | 
| 协议缓冲区文件 | proto | >= 3.0 | 
可选参数--list可查看本地安装的所有模板
dotnet new --list

可选参数-f 指定目标框架版本号
dotnet new $templateName -f $frameworkName

- net5.0
- netcoreapp3.1
- netcoreapp3.0
- netcoreapp2.1
dotnet new webapi -f netcoreapp2.1


dotnet new webapi -f netcoreapp3.1


dotnet new webapi -f netcoreapp2.2


dotnet new webapi -f net5.0


可选参数-n 指定创建的输出名称,否认默认是当前文件夹名称
dotnet new webapi -n $projectName


https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-new
可选参数-o 指定输出目录,默认是当前目录
dotnet new webapi -o $projectName

可选参数--no-https关闭默认HTTPS要求,方便开发调试
dotnet new webapi -o $projectName --no-https

还原依赖
dotnet restore
dotnet restore $target.csproj

运行
dotnet run


输出文件会写入到默认位置,即bin/<configuration>/<target>。例如,如果具有netcoreapp2.1应用程序并且运行dotnet run,则输出置于bin/Debug/netcoreapp2.1。将根据需要覆盖文件。临时文件将置于obj目录。
如果在上下文中,需要直接运行某个文件,可以用
dotnet $fileName

禁止隐式还原
dotnet run --no-restore

禁止生成项目
dotnet run --no-build

生成
dotnet build

dotnet build命令将项目及其依赖项生成为一组二进制文件。二进制文件包括扩展名为.dll的中间语言 (IL) 文件中的项目代码。
根据项目类型和设置,可能会包含其他文件,例如:
- 可用于运行应用程序的可执行文件(如果项目类型是面向 - .NET Core 3.0或更高版本的可执行文件)。
- 用于调试的扩展名为 - .pdb的符号文件。
- 列出了应用程序或库的依赖项的 - .deps.json文件。
- 用于指定应用程序的共享运行时及其版本的 - .runtimeconfig.json文件。
- 项目通过项目引用或 NuGet 包引用所依赖的其他库。 
对于目标版本低于.NET Core 3.0的可执行项目,通常不会将NuGet中的库依赖项复制到输出文件夹。而是在运行时从NuGet全局包文件夹中对其进行解析。


对于面向.NET Core 3.0及更高版本的可执行项目,库依赖项会被复制到输出文件夹。这意味着如果没有其他任何特定于发布的逻辑(例如,Web项目具有的逻辑),则应可部署生成输出。


输出可执行文件还是输出库的配置
要生成库,请省略<OutputType>属性或将其值更改为Library
<PropertyGroup><OutputType>Exe</OutputType>
</PropertyGroup>

<PropertyGroup><OutputType>Library</OutputType>
</PropertyGroup>

指定生成模式
- Debug
- Release
dotnet build -c Release

dotnet build -c Debug

指定文件版本
dotnet build -p:Version=$targetVersion


清理
dotnet clean
dotnet clean -c Release

打包
dotnet pack
dotnet pack -c Release

默认情况下,Web 项目不可打包。若要覆盖默认行为,请将以下属性添加到 .csproj 文件中
<PropertyGroup><IsPackable>true</IsPackable>
</PropertyGroup>
Nuget
添加源
dotnet nuget add source $nugetUrl -n $sourceName

列举源
dotnet nuget list source

删除源
dotnet nuget remove source $sourceName

推送包到指定源
dotnet nuget push $packageName.nupkg -k $sourceAuthKey -s $sourceUrl

删除包
dotnet nuget delete $packageName $packageVersion -s $sourceName

发布
dotnet publish


以dll文件的形式将应用发布为依赖于框架的应用时,将创建跨平台二进制文件。 dll文件将与项目同名。例如,如果有名为demoForWebApp3.1的应用,则会创建名为demoForWebApp3.1.dll的文件。以这种方式发布的应用可通过dotnet <filename.dll>命令运行,并且可在任意平台上运行。
只要安装了目标.NET 运行时,就可以在任何操作系统上运行跨平台二进制文件。如果未安装目标.NET运行时,如果将应用配置为前滚,则它可以使用较新的运行时运行。
指定框架的发布
--runtime=>-r
dotnet publish -r linux-x64 --self-contained false
dotnet publish -r win-x64 --self-contained false



所有可选的框架清单:https://docs.microsoft.com/zh-cn/dotnet/core/rid-catalog
其中--self-contained false参数表示不包括对应框架运行时。
dotnet publish -r linux-x64
dotnet publish -r win-x64
将包含完整的目标框架运行时+程序
将应用发布为独立应用,将生成特定于平台的可执行文件。输出发布文件夹包含应用的所有组件,包括.NET库和目标运行时。应用独立于其他.NET应用,且不使用本地安装的共享运行时。应用的用户无需下载和安装.NET。


直接生成ReadyToRun映像
dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

使用ReadyToRun映像发布可以缩短应用程序的启动时间,但代价是增加应用程序的大小。
https://docs.microsoft.com/zh-cn/dotnet/core/deploying/#produce-a-cross-platform-binary
指定项目文件发布
dotnet publish $packageName.csproj

监听并自动生成
开发阶段在源文件发生变动的情况下就自动执行
dotnet build
dotnet watch run


包管理
添加包
dotnet add package $packageName
dotnet add package $packageName -v $packageVersion

查看已安装包
dotnet list package

移除某安装包
dotnet remove package $packageName

用VSC打开当前目录
先cd到需要打开的当前目录,然后输入命令:
code .


让VSC支持C#语法检查
只要安装C#插件即可。


让VSC支持自动Using
只要安装Auto-Using for C#这个插件即可。

