2、.NET SDK与运行时:安装.NET SDK、理解目标框架(TFM)、运行时标识符(RID)、.NET CLI常用命令

好,咱们正式开始动手了。这一章我带你搞定开发环境。说白了,就是先把枪擦亮,再上战场。

很多新手容易卡在这一步——装完SDK就不知道下一步该干嘛了。别急,我一步步带你走。我个人习惯是,每换一台新电脑,第一件事就是装.NET SDK。为什么?因为后面所有的事情都依赖它。

2.1 安装.NET SDK

先说说SDK和运行时的区别。SDK是「开发工具包」,包含了编译器、调试器、以及运行时。运行时是「运行环境」,只负责跑程序。你作为开发者,装SDK就够了。

去哪里下载?官方地址是 dotnet.microsoft.com/download。我建议你直接装最新的LTS版本,比如现在的.NET 8。为什么?稳定,而且微软会长期支持。

安装过程很简单,下一步下一步就行。但有个坑我要提醒你——安装路径不要带中文。我曾经在一个项目里,同事的电脑用户名是中文,结果编译时各种路径报错,排查了半天。嗯,后来我养成了习惯,装任何开发工具都走纯英文路径。

验证安装是否成功:

dotnet --version
dotnet --list-sdks
dotnet --list-runtimes

如果能看到版本号,恭喜你,环境搭好了。

小技巧: 我习惯在终端里先跑一遍 dotnet --info,它会打印出所有详细信息,包括SDK版本、运行时版本、以及操作系统标识符。这个命令我几乎每天都会用。

2.2 理解目标框架(TFM)

TFM,全称是Target Framework Moniker。听起来很唬人,其实就是一个字符串,告诉编译器:「我要编译成哪个版本的.NET」。比如 net8.0net6.0netstandard2.0

你想想看,为什么要有这个东西?因为不同版本的.NET,API不一样。你写了一个程序,如果目标框架是 net8.0,那它就只能跑在安装了.NET 8运行时的机器上。

常见的TFM有这些:

TFM 说明
net8.0 .NET 8,当前最新LTS版本
net6.0 .NET 6,上一个LTS版本
netstandard2.0 .NET Standard,用于库的跨平台兼容
net48 .NET Framework 4.8,Windows专用

我在项目中遇到过一个问题:一个类库项目用了 net8.0,但引用的第三方库只支持 netstandard2.0。结果编译报错,说找不到某个API。后来我改成了多目标框架,同时支持 net8.0netstandard2.0,问题就解决了。

多目标框架示例:

<TargetFrameworks>net8.0;netstandard2.0</TargetFrameworks>

这样你的库就能同时被.NET 8和.NET Framework 4.8的项目引用了。

注意: 多目标框架会增加编译时间,而且有些API在不同框架下行为不一样。我建议你只在确实需要兼容旧项目时才用。

2.3 运行时标识符(RID)

RID,Runtime Identifier。它告诉.NET:「我要发布到哪个操作系统和CPU架构上」。比如 win-x64linux-x64osx-arm64

为什么要关心这个?因为你要做容器化部署,最终镜像要跑在Linux上。如果你在Windows上开发,发布时指定 linux-x64,就能生成Linux可执行文件。

常见的RID:

RID 说明
win-x64 Windows 64位
linux-x64 Linux 64位
osx-x64 macOS Intel芯片
osx-arm64 macOS Apple Silicon芯片

我记得有一次,我在MacBook上开发,发布时忘了指定RID,结果生成的程序在Linux服务器上跑不起来。后来加上 --runtime linux-x64 就好了。嗯,这个坑我踩过,你注意一下。

发布命令示例:

dotnet publish -c Release -r linux-x64 --self-contained true

--self-contained true 表示把运行时也打包进去,这样目标机器上不用装.NET也能跑。

2.4 .NET CLI常用命令

CLI是Command-Line Interface的缩写。说白了,就是你在终端里敲的那些命令。我个人习惯用CLI多于用Visual Studio,因为快,而且方便集成到CI/CD流水线里。

下面是我每天都会用到的命令:

  • dotnet new:创建新项目。比如 dotnet new webapi -n MyApi 创建一个Web API项目。
  • dotnet build:编译项目。不加参数会编译当前目录下的所有项目。
  • dotnet run:编译并运行。开发时最常用。
  • dotnet test:运行单元测试。我习惯加上 --verbosity normal 看详细输出。
  • dotnet publish:发布项目,生成部署文件。
  • dotnet add package:添加NuGet包。比如 dotnet add package Newtonsoft.Json
  • dotnet restore:还原依赖。一般在拉取新代码后执行。

常用命令速查表:

命令 作用 示例
dotnet new 创建项目 dotnet new console -n HelloWorld
dotnet build 编译 dotnet build -c Release
dotnet run 运行 dotnet run --project src/MyApp
dotnet publish 发布 dotnet publish -c Release -o ./publish
dotnet test 测试 dotnet test --filter "Category=Unit"

我的习惯: 我会给常用命令设置别名。比如在 .bashrc 里加上 alias db='dotnet build',这样敲 db 就能编译了。省时间。

2.5 实战:从零创建一个项目

光说不练假把式。咱们来创建一个简单的控制台应用,然后发布成Linux可执行文件。

# 1. 创建项目
dotnet new console -n HelloCloud

# 2. 进入目录
cd HelloCloud

# 3. 修改目标框架为net8.0(默认就是,但确认一下)
# 打开 HelloCloud.csproj,确保 <TargetFramework>net8.0</TargetFramework>

# 4. 编写代码(Program.cs)
Console.WriteLine("Hello, Cloud Native!");

# 5. 编译
dotnet build

# 6. 发布到Linux
dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish

# 7. 查看发布产物
ls ./publish

你会看到 publish 目录下有一个 HelloCloud 可执行文件(没有扩展名)。这就是Linux下的原生可执行文件。你可以把它拷贝到任何Linux机器上直接运行。

注意: 如果你在Windows上发布Linux版本,需要确保安装了对应的交叉编译工具。.NET SDK默认支持,但如果你遇到问题,可以试试安装 dotnet-sdk-8.0 的Linux版本。

好了,这一章的内容就到这里。你装好SDK了吗?如果还没,现在就去装。下一章咱们会深入项目结构,看看一个.NET项目到底长什么样。

公众号:蓝海资料掘金营,微信deep3321