C# 与 .NET 环境搭建与工具链

要点

.NET 的工具链比大多数语言更”一条龙”:一个 .NET SDK(Software Development Kit)同时提供编译器、运行时、项目构建器(dotnet CLI)和 NuGet 包管理。装完 SDK 就能写、能跑、能发包,不需要再单独配构建工具。要管住的只有两件事:项目用哪个 SDK 主版本(global.json),以及包依赖能否复现(restore)。

版本现状:认准 LTS 线

.NET 每年 11 月发一个大版本,偶数版本为 LTS(Long Term Support,三年支持),奇数版本为 STS(约十八个月)。选型直接选当前 LTS:

版本 类型 支持截止 说明
.NET 10 LTS 2028-11 2025-11 发布,本系列的基准版本,对应 C# 14
.NET 8 / .NET 9 LTS / STS 支持期内 上一代版本;新项目直接从 .NET 10 起步

和 Java 对照:Java 的 LTS 间隔不规则(21、25 之间隔四年),.NET 是严格的”每年 11 月、偶数 LTS”。所以 .NET 的版本焦虑更小——只要钉住偶数线,最多三年一升级。

SDK 与运行时的关系

从 JDK 转过来的读者可以直接映射:SDK 之于 Runtime,约等于 JDK 之于 JRE。区别是 .NET 的 SDK、运行时、CLI 打成一个包安装,不需要分开装两样东西。

概念 .NET Java 对照
开发工具包 .NET SDK(dotnet 命令) JDK(javac + java)
运行时 .NET Runtime(随 SDK 附带,也可单独部署) JRE
构建工具 dotnet CLI 内建(MSBuild 在底层) Maven / Gradle(需另装)
包仓库 NuGet(nuget.org) Maven Central

安装 .NET SDK

三个平台各给一条主渠道,安装命令只锁主版本线,不锁补丁号——补丁会随 Windows Update / 包管理器滚动更新:

# Windows(winget 包 ID 按主版本命名,10 即 LTS 线)
winget install Microsoft.DotNet.SDK.10

1. macOS
brew install --cask dotnet-sdk

1. Linux(Ubuntu/Debian 官方源),或任意平台通用的安装脚本
sudo apt-get install dotnet-sdk-10.0
curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 10.0

装完验证。重点看 SDK 列表里有 10.0 一行:

dotnet --info         # SDK、运行时、环境一览
dotnet --list-sdks    # 已安装的全部 SDK
dotnet --list-runtimes

反模式:照抄教程里钉死补丁号的安装命令。教程写下的 10.0.x 到你执行时多半已有更新的补丁,抄旧补丁号等于主动装已知漏洞。命令只认主版本线(10.0),补丁交给包管理器。

最小验收:三十秒跑通

dotnet new console -n hello
cd hello
dotnet run

输出 Hello, World! 即闭环打通。注意这里没有显式”编译”步骤——dotnet run 在需要时自动构建,与 java Hello.java 的单文件直跑体验类似,但产物是完整的 IL 程序集。.NET 10 还支持文件式应用(file-based apps):单个 .cs 文件不建项目也能 dotnet run app.cs,适合一次性脚本,正式工程仍走项目。

dotnet CLI 常用命令表

dotnet CLI 是唯一需要记的工具,日常覆盖九十百分比的操作:

命令 作用 对应 Java 生态
dotnet new console / web / xunit 从模板建项目 archetype / Spring Initializr
dotnet build 编译到 bin/ mvn compile
dotnet run 构建并运行 mvn exec:java
dotnet watch 改动自动重编译重启 spring-boot-devtools
dotnet test 跑全部测试 mvn test
dotnet add package 名字 加 NuGet 依赖 加 dependency 到 pom.xml
dotnet add reference ../A.csproj 项目间引用 module 依赖
dotnet publish -c Release 产出可部署产物 mvn package + shade
dotnet format 格式化(EditorConfig 驱动) spotless / fmt-maven
dotnet tool install -g dotnet-ef 装全局工具 sdkman 装 maven

项目与解决方案结构

两个文件类型,职责清楚:

  • .csproj:项目文件,SDK 风格(SDK-style project)下极简——TargetFramework、依赖列表就够,不需要手写编译细节。一个 .csproj 就是一个可构建单元。
  • .sln:解决方案(solution),只是多个 .csproj 的编排在很多项目共存时用。dotnet new sln 生成,小项目可以不要它。
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
</Project>

新模板默认开 Nullable(可空引用类型检查)和 ImplicitUsings(常用命名空间免 using)——这两个开关保持默认,前者是编译期防空利器,后者只是省样板。

多 SDK 共存时,用 global.json 给项目锁 SDK 主版本,进目录自动生效:

{
  "sdk": {
    "version": "10.0.100",
    "rollForward": "latestFeature"
  }
}

rollForward: latestFeature 表示”10.0.1xx 特性带内自动向前滚”,补丁不钉死——等价于 Maven Wrapper 锁大版本的效果。用 dotnet new globaljson 可直接生成。

NuGet:依赖从哪来

NuGet 是 .NET 的包生态,nuget.org 是中央仓库。依赖声明在 .csproj 里,实际解析靠 restore(还原):dotnet restore 按依赖范围拉包到全局缓存 ~/.nuget/packages,本机多个项目共享,不会像 node_modules 那样每个项目复制一份。默认没有锁文件,CI 要严格复现时在 csproj 加 RestorePackagesWithLockFile=true,生成 packages.lock.json 并提交,等价于 npm 的 package-lock.json。国内加速可配置 NuGet 源镜像。

IDE 三选一

方案 平台 费用口径 适合
Rider Win/macOS/Linux 非商业用途免费(2024-10 起),商业需订阅 跨平台首选;IntelliJ 用户零成本迁移;重构与调试体验一致
Visual Studio 2026 仅 Windows Community 版免费(有使用限制),专业版付费 Windows 上功能最全:设计器、性能 Profiler、全套 Microsoft 工具链
VS Code + C# Dev Kit 全平台 个人/学术/开源免费,小团队(不超过 5 人)商用也免费;需登录微软账号 已用 VS Code 的人最顺;轻量但解决方案视图、测试面板都有

三者的构建结果完全一致——都只是 dotnet CLI 的壳,IDE 差异不影响产物。选型看平台与习惯:macOS/Linux 在 Rider 与 VS Code 里挑,Windows 三者皆可。

环境检查清单

  • dotnet –list-sdks 里能看到 10.0.x
  • dotnet new console + dotnet run 全绿
  • global.json 已锁主版本并配 rollForward
  • IDE 打开 .csproj 能识别 TargetFramework 与引用
  • dotnet add package 能正常拉包(必要时配镜像源)

常见问题

装了 SDK 但 dotnet 命令找不到

多半是 PATH 没刷新,重开终端;仍不行则检查 ~/.dotnet(macOS/Linux 脚本安装路径)是否在 PATH 里。Windows 用安装器不会出这个问题。

机器上有多个 SDK,项目用了错的版本

dotnet 默认用最新 SDK 编译,但 TargetFramework 决定运行时目标——SDK 11 也能编 net10.0 项目。要锁 SDK 就放 global.json,团队协作时这份文件必须提交。

.NET Framework 和 .NET 是一回事吗

不是。.NET Framework(最高 4.8)是老的 Windows 专有实现,不再加新特性;本系列说的 .NET(曾叫 .NET Core)是跨平台的开源实现,从 .NET 5 起改名延续至今。搜资料时看到 4.x 的答案要警惕过时。

延伸阅读

环境就绪,下一步写代码:本系列下一篇《第一个 C# 应用》会从 dotnet new 开始做一个能用的命令行小工具。想横向对比工具链设计,站内《Java 环境搭建与工具链》是同结构的一篇——SDK 安装、构建工具、wrapper 锁版本三件事在两个生态里各是怎么解的,读完对两边理解都更深。

版本核实(以官方文档为准):.NET 10 为当前 LTS(2025-11-11 发布,支持至 2028-11-10),.NET 8/9 已于 2026-11-10 停止支持,.NET 11 为 STS 线(2026-11 GA);C# 14 随 .NET 10 发布;文件式应用(dotnet run app.cs)为 .NET 10 新增;Rider 自 2024-10 起非商业用途免费;C# Dev Kit 个人/学术/开源免费且小团队商用免费;Visual Studio 2026 已随 .NET 10 发布。安装命令不钉补丁号,具体以官方文档为准。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇