文章

dotnet 命令

dotnet 是 .NET CLI 的通用驱动程序。

Table of Contents

  1. 创建
  2. 运行
  3. 编译
  4. 发布

创建

可以通过运行 dotnet new list 命令查看安装在计算机上的模板。

模板名短名称语言标记
API 控制器apicontroller[C#]Web/ASP.NET
ASP.NET Core gRPC 服务grpc[C#]Web/gRPC/API/Service
ASP.NET Core Web APIwebapi[C#],F#Web/WebAPI/Web API/API/Service
ASP.NET Core 空web[C#],F#Web/Empty
Cross-Platform Libraryunolib[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,.gitignoreConfig 
Dotnet 本地工具清单文件tool-manifestConfig 
EditorConfig 文件editorconfig,.editorconfigConfig 
global.json fileglobaljson,global.jsonConfig 
MVC 控制器mvccontroller[C#]Web/ASP.NET
NuGet 配置nugetconfig,nuget.configConfig 
Uno Platform Appunoapp[C#]Multi-platform/Uno Platform/Android/iOS/macOS/Mac Catalyst/Windows/Linux/WebAssembly/WinUI
Web 配置webconfigConfig 
Windows 窗体应用winforms[C#],VBCommon/WinForms
Windows 窗体控件库winformscontrollib[C#],VBCommon/WinForms
Windows 窗体类库winformslib[C#],VBCommon/WinForms
WPF 应用程序wpf[C#],VBCommon/WPF
WPF 用户控件库wpfusercontrollib[C#],VBCommon/WPF
WPF 类库wpflib[C#],VBCommon/WPF
WPF 自定义控件库wpfcustomcontrollib[C#],VBCommon/WPF
协议缓冲区文件protoWeb/gRPC 
控制台应用console[C#],F#,VBCommon/Console
类库classlib[C#],F#,VBCommon/Library
解决方案文件sln,solutionSolution 
辅助角色服务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
本文由作者按照 CC BY 4.0 进行授权

© h0ny. 保留部分权利。

本站由 Jekyll 生成,采用 Chirpy 主题。