dotnet 命令
dotnet 是 .NET CLI 的通用驱动程序。
Table of Contents
创建
可以通过运行 dotnet new list
命令查看安装在计算机上的模板。
模板名 | 短名称 | 语言 | 标记 |
---|---|---|---|
API 控制器 | apicontroller | [C#] | Web/ASP.NET |
ASP.NET Core gRPC 服务 | grpc | [C#] | Web/gRPC/API/Service |
ASP.NET Core Web API | webapi | [C#],F# | Web/WebAPI/Web API/API/Service |
ASP.NET Core 空 | web | [C#],F# | Web/Empty |
Cross-Platform Library | unolib | [C#] | Cross-platform/Uno Platform/Library/Android/iOS/Windows/macOS/Linux/WebAssembly |
Cross-Runtime Library (WinUI) | unolib-crossruntime | [C#] | Multi-platform/Uno Platform/Android/iOS/macOS/Mac Catalyst/Windows/Linux/WebAssembly/WinUI |
dotnet gitignore 文件 | gitignore,.gitignore | Config | |
Dotnet 本地工具清单文件 | tool-manifest | Config | |
EditorConfig 文件 | editorconfig,.editorconfig | Config | |
global.json file | globaljson,global.json | Config | |
MVC 控制器 | mvccontroller | [C#] | Web/ASP.NET |
NuGet 配置 | nugetconfig,nuget.config | Config | |
Uno Platform App | unoapp | [C#] | Multi-platform/Uno Platform/Android/iOS/macOS/Mac Catalyst/Windows/Linux/WebAssembly/WinUI |
Web 配置 | webconfig | Config | |
Windows 窗体应用 | winforms | [C#],VB | Common/WinForms |
Windows 窗体控件库 | winformscontrollib | [C#],VB | Common/WinForms |
Windows 窗体类库 | winformslib | [C#],VB | Common/WinForms |
WPF 应用程序 | wpf | [C#],VB | Common/WPF |
WPF 用户控件库 | wpfusercontrollib | [C#],VB | Common/WPF |
WPF 类库 | wpflib | [C#],VB | Common/WPF |
WPF 自定义控件库 | wpfcustomcontrollib | [C#],VB | Common/WPF |
协议缓冲区文件 | proto | Web/gRPC | |
控制台应用 | console | [C#],F#,VB | Common/Console |
类库 | classlib | [C#],F#,VB | Common/Library |
解决方案文件 | sln,solution | Solution | |
辅助角色服务 | worker | [C#],F# | Common/Worker/Web |
… |
创建 .NET Core 项目:
1
dotnet new console -f net8.0 -o ./project_path -n project_name --use-program-main
创建 .NET Framework 项目:
1
dotnet new console --target-framework-override net481 --use-program-main
查看 .csproj
文件,TargetFramework 标签被正确的设置成了 net481:
1
2
3
4
5
6
7
8
9
10
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net481</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
注:如果在运行项目时发生错误,可以尝试在项目文件(.csproj)中添加
<LangVersion>10.0</LangVersion>
标签。
如果想使用 Visual Studio 打开项目,还需要使用 dotnet sln
命令添加或修改 .NET 解决方案文件。
1
dotnet new sln --name SolutionFileName --output PathName
将一个或多个项目添加到解决方案文件:
1
2
3
4
5
dotnet sln add todo-app/todo-app.csproj
dotnet sln add folder1/folder2/myapp
dotnet sln todo.sln add todo-app/todo-app.csproj back-end/back-end.csproj
使用 dotnet sln list
可以列出解决方案文件中的所有项目。
创建解决方案、控制台应用和两个类库。 将项目添加到解决方案,并使用 dotnet sln 的 –solution-folder 选项将类库组织到一个解决方案文件夹中。
1
2
3
4
5
6
7
dotnet new sln -n mysolution
dotnet new console -o myapp
dotnet new classlib -o mylib1
dotnet new classlib -o mylib2
dotnet sln mysolution.sln add myapp\myapp.csproj
dotnet sln mysolution.sln add mylib1\mylib1.csproj --solution-folder mylibs
dotnet sln mysolution.sln add mylib2\mylib2.csproj --solution-folder mylibs
运行
dotnet 运行项目:
1
dotnet run --project ./project_path
编译
dotnet build 命令将项目及其依赖项生成为一组二进制文件。二进制文件包括扩展名为 .dll 的中间语言 (IL) 文件中的项目代码。 根据项目类型和设置,可能会包含其他文件。
dotnet 编译项目:
1
2
dotnet restore .
dotnet build -c Release
发布
使用 dotnet publish
命令将对您的应用程序进行完整打包,准备好在 UAT 或生产环境中运行。
将其发布为 Windows x64 平台上的单个可执行文件:
1
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true /p:PublishTrimmed=true /p:TrimMode=link
注:
-r
参数用于指定目标运行时(Runtime Identifier,RID),以确定生成的发布包的目标平台。
当指定为linux-x64
时生成 Linux 二进制文件,osx-arm64
生成 Macos 的二进制文件 。
dotnet 支持的 RID 详情见:.NET RID Catalog。
对应在项目配置文件(.csproj)中的内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TrimMode>partial</TrimMode>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
<SelfContained>true</SelfContained>
<TrimMode>partial</TrimMode>
</PropertyGroup>
</Project>
注:如果 dotnet publish 与 dotnet build 生成的二进制文件运行效果有差异,则需要将 PublishTrimmed 参数值设置为 false 或者指定 TrimMode 为 partial(在 .NET 8 中默认 TrimMode=full)。
管理 Nuget 包
添加或更新项目文件中的包引用:
1
dotnet add package Humanizer --version 2.7.9
在项目文件(.csproj)中能够找到 ItemGroup 部分,会出现如下所示的条目:
1
2
3
<ItemGroup>
<PackageReference Include="Humanizer" Version="2.7.9" />
</ItemGroup>
使用 dotnet list package --outdated
命令列出了已过时的包。
1
2
Top-level Package Requested Resolved Latest
> Humanizer 2.7.* 2.7.9 2.8.26
此时再运行 dotnet add package
命令,它将尝试更新到最新版本。
版本说明
有一个称为语义化版本控制的行业标准,即如何表达你或其他开发人员向库引入的更改类型。 语义化版本控制的工作原理是确保包具有版本号,并且该版本号划分为以下部分:
- 主版本:最左边的数字。 例如 1.0.0 中的 1。 此数字发生更改意味着代码可能出现中断性变更。 可能需要重写部分代码。
- 次要版本:中间的数字。 例如 1.2.0 中的 2。 此数字发生更改意味着添加了新功能。 你的代码仍可正常工作。 接受更新通常是安全的。
- 修补程序版本:最右边的数字。 例如 1.2.3 中的 3。 此数字发生更改意味着应用了一个更改,修复了代码中应正常工作的内容。 接受更新应是安全的。
下表说明了每个版本类型的版本号如何更改:
类型 | 发生的更改 |
---|---|
主版本 | 1.0.0 更改为 2.0.0 |
次要版本 | 1.1.1 更改为 1.2.0 |
修补程序版本 | 1.0.1 更改为 1.0.2 |