C# 如何成为跨平台并成为实用的后端首选
了解 C# 如何从仅限 Windows 的根基演进为适配 Linux、容器与云后端的跨平台语言,以及现代 .NET 带来的变革。

从 Windows 根基到跨平台目标
C# 最初非常“微软本地化”。在 2000 年代早期,它与 .NET Framework 一起诞生,设计时就是为了在 Windows 上有亲和力:Windows Server、IIS、Active Directory 以及更广泛的微软工具链。对许多团队来说,选择 C# 不只是选语言——也是选择一种以 Windows 为先的运营模式。
“跨平台”的实际含义
当人们谈论后端工作的“跨平台”时,通常指几个实际的点:
- 你的代码可以在 Windows、Linux 和 macOS 上运行而无需重写。
- 运行时和库在这些系统上行为一致。
- 你可以在常见工作流(CI、容器、云托管)下构建、测试和部署,而不受底层操作系统的限制。
重点不只是“能否运行”,而是把在 Windows 之外运行视为一流体验。
带我们走到今天的里程碑
本文回顾了 C# 如何从 Windows 根基转变为跨环境中可信且广泛使用的后端选项:
- Mono:早期尝试让 .NET 应用在非 Windows 系统上运行。
- .NET Core:为现代服务器和 Linux 重新设计运行时。
- 统一 .NET(5+):减少碎片化,使平台更易采用与维护。
本文面向的人群
如果你在评估后端栈——可能在比较 C# 与 Node.js、Java、Go 或 Python——这篇指南适合你。目标是解释 C# 向跨平台转变背后的“为什么”,以及这对今天真实服务器决策意味着什么。
为什么 C# 曾被视为仅限 Windows
C# 并非天生为“随处可运行”的语言。早在 2000 年代,C# 与 .NET Framework 紧密相连,而 .NET Framework 在实践中是一个Windows 产品。它随 Windows 发布,内含面向 Windows 的 API,依赖 Windows 组件,并与微软的 Windows 开发栈共同演进。
.NET Framework 时代:从设计上以 Windows 为先
对大多数团队来说,“用 C# 开发”在含义上等同于“为 Windows 构建”。运行时和库主要在 Windows 上打包与支持,很多常用功能都与 Windows 技术深度集成。
这并不意味着 C# 不好——它让环境变得可预测。你能准确预期生产环境:Windows Server、微软支持的更新,以及一组标准系统能力。
那时“C# 后端”通常意味着什么
后端的 C# 常见形态包括:
- 在 IIS 上的 ASP.NET
- 在数据中心或公司机房中托管于 Windows Server
- 与微软工具与基础设施(Active Directory、Windows 身份验证、在许多情况下的 SQL Server)紧密集成
如果你要运行一个 Web 应用,部署运行手册很可能就是:“配置一台 Windows Server 虚机,安装 IIS,部署站点。”
塑造认知的利弊权衡
这种以 Windows 为先的现实带来一系列明显优劣。
优点是团队获得了出色的工具——尤其是 Visual Studio 和一套内聚的库。开发工作流舒适高效,平台感觉一致。
缺点是托管选择受限。Linux 服务器在许多生产环境中占主导(特别是在初创公司和成本敏感组织),而更广泛的网络托管生态更偏向基于 Linux 的栈。如果基础设施标准是 Linux,采用 C# 通常意味着要逆势而行——或者为支持系统增设 Windows。
这就是 C# 被贴上“仅限 Windows”标签的原因:并非它不能做后端工作,而是主流的生产路径通过 Windows。
Mono:走出 Windows 的第一大步
在“跨平台 .NET”还不是官方优先项之前,Mono 是实际的权宜之计:一个独立、开源的实现,让开发者能在 Linux 与 macOS 上运行 C# 和 .NET 风格的应用。
Mono 的可能性
Mono 最大的影响很简单:它证明了 C# 不必被捆绑在 Windows 服务器上。
在服务器端,Mono 使得早期的 C# Web 应用和后台服务能部署到 Linux 上——通常是为了适配既有托管环境或成本考量。它还打开了许多 Windows 以外的用途:
- 移动端:Mono 支持的 MonoTouch 与 Mono for Android 是早期在 iOS 与 Android 上使用 C# 的路径。
- 嵌入式与设备:一些团队在需要更小、可管理运行时的场景下使用 Mono。
- 跨平台库:开发者能在不同操作系统间共享更多代码,而这在当时并不常见。
Unity:让 C# 在 Windows 之外走红
如果说 Mono 建了桥,Unity 则把大量流量送上了桥。Unity 采用 Mono 作为脚本运行时,使得大量开发者在 macOS 与多平台目标上接触到 C#。即便那些项目不是“后端”工作,它们也让 C# 在 Windows 生态之外成为常态。
真实的不足:碎片化与差距
Mono 并不等同于微软的 .NET Framework,这种差异很关键。API 可能不同、兼容性无法保证,团队有时需要调整代码或避免使用某些库。还有多种“口味”(桌面/服务器、移动配置文件、Unity 的运行时),相较于现代 .NET 所期待的统一体验,生态显得分裂。
尽管如此,Mono 是改变预期的概念验证——并为后续发展铺平了道路。
开源与面向 Linux 的战略转变
微软向 Linux 和开源的转变并非一场品牌秀——而是对后端软件实际运行地点的回应。到 2010 年代中期,许多团队的默认目标不再是“数据中心里的 Windows Server”,而是云端的 Linux,通常以容器形式自动部署。
战略改变的原因
三大实际力量推动了这一转变:
- 云现实:主要云平台使 Linux 成为可扩展且成本高效工作负载的共同基线。
- 容器势头:Docker 与 Kubernetes 规范了基于 Linux 的镜像与操作工具。
- 开发者期望:团队希望有现代、可脚本化的构建管线和在各环境间可预期的部署。
支持这些工作流需要 .NET 在开发者所在之处——Linux 与云原生场景——提供良好支持。
开源改变了信任(与采用)
历史上,后端团队犹豫于押注看似由单一厂商控制且可见性有限的栈。将 .NET 的关键部分开源直接应对了这一点:人们可以检查实现细节、跟踪决策、提出改进并在公开场合看到问题讨论。
这种透明性对生产使用很重要。它减少了“黑盒”感,使得公司更容易在必须在 Linux 上 24/7 运行的服务上标准化 .NET。
将开发迁至 GitHub,使模型更透明
把开发搬到 GitHub 让过程变得可读:路线图、pull request、设计说明与发布讨论变得公开。这也降低了社区贡献的门槛,以及第三方维护者与平台变化保持一致的难度。
结果是:C# 与 .NET 不再感觉“以 Windows 为先”,而开始成为其他服务器栈的平等体——准备好用于 Linux 服务器、容器和现代云部署工作流。
.NET Core:为跨平台后端做出的清晰断裂
.NET Core 是微软决定停止“扩展”老旧的 .NET Framework,而是从头构建一个面向现代服务器工作的运行时的时刻。它不再假设机器范围安装的 Windows 环境,而是将运行时设计得模块化、轻量且更符合后端服务的部署方式。
“随处运行”真正意味着什么
有了 .NET Core,同一套 C# 后端代码库可以运行在:
- Windows 服务器
- Linux 服务器(对多数生产托管而言这是大事)
- macOS(对本地开发与某些部署场景有用)
实际上,这意味着团队可以标准化使用 C#,而无需同时在 Windows 上标准化基础设施。
为什么它更契合后端需求
后端服务受益于小、可预测且启动快速的部署。 .NET Core 引入了更灵活的打包模式,使你更容易只发布应用所需内容,从而减少部署体积并改善冷启动行为——这对微服务和基于容器的场景尤为重要。
另一个关键变化是摆脱对单一共享系统运行时的依赖。应用可以携带自己的依赖(或针对特定运行时),这减少了“在我的服务器上能跑”的不一致问题。
并列安装与更简单的升级
.NET Core 支持并列安装不同运行时版本。这在真实组织中很重要:一个服务可以保持在旧版本,另一个服务升级,而无需强制进行整台服务器范围的变更。结果是更平滑的发布、更简单的回滚选项以及减少跨团队的升级协调需求。
ASP.NET Core 让 C# 在任意服务器上变得实用
ASP.NET Core 是“C# 后端”不再等同于“必须 Windows 服务器”的转折点。旧的 ASP.NET 堆栈(基于 .NET Framework)与 IIS 和 System.Web 紧耦合,在那个世界里运行良好,但并未为在 Linux 或轻量容器内运行而设计。
ASP.NET Core 与经典 ASP.NET 的不同
ASP.NET Core 是一个重新架构的 Web 框架,表面更小、更模块化,并采用现代请求管道。它用显式中间件和清晰的主机模型替代了 System.Web 的重量级事件驱动模型。这使得应用更易理解、测试并在不同环境中一致部署。
跨平台托管:Kestrel + 反向代理
ASP.NET Core 自带 Kestrel,这是一个快速且跨平台的 Web 服务器,在 Windows、Linux 和 macOS 上行为一致。生产环境中,团队通常在前面放一个反向代理(如 Nginx、Apache 或云负载均衡器)用于 TLS 终止、路由与边缘关注点——而 Kestrel 处理应用流量。
这种托管方式天然适配 Linux 服务器和容器编排,无需特殊的“仅限 Windows”配置。
它支持的常见后端模式
有了 ASP.NET Core,C# 团队可以实现现代系统常见的后端风格:
- 面向 Web 和移动客户端的 REST API
- 用于高效服务间通信的 gRPC
- 用于队列、定时任务与长期运行任务的后台 Worker
提升团队速度的开发体验
开箱即用的项目模板、内置依赖注入和鼓励清晰分层(认证、日志、路由、验证)的中间件管道,使得这个后端框架感觉现代——并且可以部署到任何地方,而无需 Windows 形态的基础设施来支撑它。
统一 .NET:一个平台替代多个
曾经,“.NET”意味着一棵令人困惑的家族树:经典的 .NET Framework(多为 Windows)、.NET Core(跨平台)以及针对移动的 Xamarin/Mono 工具链。这种碎片化让后端团队难以回答“我们该标准化使用哪个运行时?”这样的简单问题。
从 .NET Core 到“一体化 .NET”
重大转变发生在微软从单独的“ .NET Core ”品牌过渡到从 .NET 5 开始的一体化路线。这不仅仅是改名——而是整合:统一的运行时基础、统一的基类库方向,以及更清晰的服务器应用升级路径。
“统一”对团队的意义
在实际的后端层面,统一 .NET 降低了决策成本:
- 评估 Web API 和服务时不必在多个平台中挣扎
- 跨 Windows、Linux 与 macOS 更一致的项目模板与工具
- 更清晰的期待:代码可以在开发机器、CI 与生产间移动而无需平台特定的重构
你仍会使用不同的工作负载(Web、Worker、容器),但不必为每种场景赌上不同“种类”的 .NET。
LTS 版本及其重要性
统一 .NET 通过 LTS(长期支持)版本使得发布规划更容易。对后端而言,LTS 很重要,因为你通常希望有可预测的更新、更长的支持周期以及更少的强制升级——尤其是对需要多年保持稳定的 API。
选择目标版本
新生产服务的一个稳妥默认是选择最新的 LTS,然后有计划地进行升级。如果你需要某个特定的新功能或性能改进,可以考虑最新版本——但要将该选择与组织对更频繁升级与变更管理的容忍度对齐。
性能与可扩展性:随时间的改变
C# 成为严肃后端选项不仅因为它能在 Linux 上运行——运行时和库在真实服务器工作负载下的效率也在不断提升。多年来,运行时与库从“足够好”逐步演进为对常见 Web 与 API 模式“可预测且快速”。
更快的运行时执行(JIT 与其他)
现代 .NET 使用更强大的 JIT 编译器。诸如分层编译(先快速启动代码,随后对热点路径做优化)和在新版中的基于配置文件的优化,帮助服务在流量稳定后达到更高吞吐。
对后端团队而言,实际结果通常是负载下更少的 CPU 峰值与更稳定的请求处理——而无需把业务逻辑重写为更底层的语言。
更智能的内存管理(GC、延迟与吞吐)
垃圾回收也在演进。服务端 GC 模式、后台 GC 以及对大对象分配的更好处理旨在减少“停顿”并提高持续吞吐。
为什么重要:GC 行为影响尾延迟(那些用户会注意到的偶发慢请求)和基础设施成本(满足 SLO 所需的实例数)。能够避免频繁暂停的运行时,通常可以以更平滑的响应时间满足需求。
Async/await:适合 I/O 密集型后端
C# 的 async/await 模型非常适合典型的后端工作:Web 请求、数据库调用、队列与其他网络 I/O。通过在等待 I/O 时不阻塞线程,服务能用相同的线程池处理更多并发工作。
代价是异步代码需要纪律性——使用不当会增加开销或复杂性——但在 I/O 为主的路径中,它通常能提升可扩展性并在高负载下保持更稳定的延迟。
云、容器与现代部署工作流
当部署不再意味着“在 Windows 虚机上安装 IIS”时,C# 才真正成为更自然的后端选择。现代 .NET 应用通常以与其他服务器工作负载相同的方式打包、发布与运行:作为 Linux 进程,常在容器内运行,并具有可预期的配置与标准的运行时接入点。
开箱即容器友好
ASP.NET Core 与现代 .NET 运行时非常适合 Docker,因为它们不依赖机器范围的安装。你构建一个包含应用所需内容的镜像,然后在任何地方运行它。
常见模式是多阶段构建以保持最终镜像小巧:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app .
ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080
ENTRYPOINT ["dotnet", "MyApi.dll"]
更小的镜像拉取更快、启动更快并减少攻击面——在扩展时这是实际的收益。
以 Linux 为主的托管成为常态
大多数云平台默认运行在 Linux 上,.NET 在那里表现良好:Azure App Service for Linux、AWS ECS/Fargate、Google Cloud Run 以及许多托管的容器服务。
这对成本和一致性很关键:相同的基于 Linux 的容器镜像可以在开发者笔记本、CI 管道与生产环境中运行。
Kubernetes(并不一定很麻烦)
当团队需要自动伸缩与标准化运维时,Kubernetes 是常见目标。你不需要为 Kubernetes 写特定代码;需要的是约定。
使用环境变量做配置(连接字符串、功能开关)、暴露简单的健康端点(readiness/liveness),并把结构化日志写到 stdout/stderr,以便平台收集。
如果遵循这些基础做法,C# 服务就能像其他现代后端一样部署与运维——在各云之间可移植且易于自动化。
工具链与生态:团队能更快推进的原因
C# 成为跨 Windows、Linux 与 macOS 的实用后端选择,一个重要原因不仅在于运行时本身——而是日常开发体验。工具一致且自动化友好时,团队把更多时间用于交付而不是与环境抗争。
在各机器上一致的 dotnet CLI 工作流
dotnet CLI 让常见任务在各平台上可预测:创建项目、恢复依赖、运行测试、发布构建并生成可部署产物。无论操作系统如何,相同的命令都能执行。
这种一致性对入门与 CI/CD 很重要。新开发者可以克隆仓库并运行与你的构建服务器相同的脚本——无需特殊的“仅限 Windows”设置。
适合不同团队的编辑器与 IDE
C# 开发不再绑定于单一工具:
- VS Code 适合轻量编辑、基于容器的开发与快速调试。
- Visual Studio 仍是许多团队喜欢的“全能”选项,尤其适合大型解决方案。
- Rider 在 macOS 与 Linux 上因强大的重构与快速导航而受欢迎。
优势在于选择:团队可以统一使用一种环境,或允许开发者使用自己舒适的工具,而不破坏构建过程的一致性。
跨平台调试与本地开发
现代 .NET 工具支持在 macOS 与 Linux 上进行本地调试,体验自然:运行 API、附加调试器、设置断点、检查变量与单步执行。这消除了“真正调试只在 Windows 上发生”的瓶颈。
当你在容器中运行服务时,本地一致性也更好:可以在调试 C# 后端的同时,让它与生产中使用的相同版本的 Postgres/Redis 等交互。
依赖管理、更新与 NuGet 生态
NuGet 仍是 .NET 团队的加速器之一。引入库、锁定版本、并把依赖更新作为例行维护是很直接的。
更重要的是,依赖管理在自动化中运行良好:恢复包与运行漏洞检查可以成为每次构建的一部分,而不是手动工作。
社区库与模版(带着现实预期)
生态已超越微软维护的包。社区在日志、配置、后台任务、API 文档与测试等常见后端需求上提供强有力的选项。
模版和入门工程能加速早期搭建,但它们不是魔法。最好的模版能节省基础设施接线时间,同时让团队保留对架构决策的明确控制与可维护性。
何时 C# 是强势后端选择(何时不是)
C# 不再是“Windows 押注”。对许多后端项目,它是务实的选择,结合了良好性能、成熟库和高产的开发体验。然而,也有不那么适合的场景。
C# 擅长的场景
C# 常在需要清晰结构、长期维护与有支持的平台时表现出色:
- API 与 Web 后端:REST/JSON 服务、GraphQL 网关和 BFF 层与 ASP.NET Core 自然契合。
- 企业系统:复杂业务规则、集成与分层架构受益于 C# 的类型安全与工具链。
- 金融科技与受监管领域:可预测行为、完善的测试模式与针对安全与合规的丰富生态。
- 高吞吐服务:现代 .NET 的性能使其在繁忙的 API、后台处理与事件驱动工作负载中有竞争力。
何时可能不太理想
当目标是极致简化或非常小的运行时占用时,C# 可能显得“过头”。
- 极小的无服务器脚本:如果你写的是非常小、单一职责的函数,且冷启动与包体积是主导因素,较轻的运行时可能更容易。
- 小众托管限制:若你的环境强烈偏好某个运行时或对 .NET 部署支持有限,你可能会与平台抗争。
- 团队偏好最小结构:若主要目标是快速、一次性的原型,动态类型选项可能看起来更快(代价是后期可维护性)。
团队与长期性因素
选择 C# 往往与人有关:现有的 C#/.NET 技能、当地招聘市场以及你是否预计代码库会长期存在。对于长期产品,.NET 生态的一致性是主要优势。
降低风险的实际办法是原型对比:用两种栈分别实现同一小服务,比较开发速度、部署摩擦与运维清晰度。例如,有些团队会用 Koder.ai 快速生成生产感的基线(React 前端、Go 后端、PostgreSQL、可选 Flutter 移动),导出源码,然后与等效的 ASP.NET Core 实现做对比。即便最终选择 .NET,快速的“对比构建”也能让权衡更具体。
快速评估清单
- 我们是否需要一个可维护、契约清晰且工具强大的代码库?
- Linux/容器部署是否在计划中?
- 性能与可靠性在规模上是否重要?
- 我们已有 .NET 技能,或能自信地招聘到吗?
- 此服务会与大量企业系统集成吗?
- 我们是在构建“短期一次性”服务吗?(那时更轻量的运行时或更灵活的语言可能占优)
关键要点与下一步
C# 成为可信的跨平台后端选项并非一蹴而就——它通过一系列具体里程碑逐步去除了“仅限 Windows”的假设,并使得在 Linux 上部署变得常态化。
值得记住的里程碑
转变分阶段发生:
- Mono 证明概念:展示了 C# 与 .NET 能在 Windows 之外运行,推动了早期服务器端信心。
- 微软拥抱开源:将 .NET 主要部分开源并在公开发展中参与,使跨平台不再是边缘项目。
- .NET Core 提供现代运行时:面向性能与 Linux 优先的服务器场景,使跨平台后端从实验性变为实用。
- ASP.NET Core 现代化 Web 堆栈:更快、更模块化,在 Windows、Linux 与 macOS 上行为一致,适合 API 优先的服务。
- 统一 .NET(5+)简化一切:减少“该选哪个 .NET?”的困惑,为升级、工具与长期支持提供更清晰路径。
你可以采取的实务下一步
如果你在评估 C# 用于后端工作,最直接的路线是:
- 从 ASP.NET Core 开始,用于 API 与服务(新项目应以现代 .NET 版本为目标)。
- 尽早在 Linux 部署——即使只是到暂存环境,这样可以从第一天就验证运行时行为、日志与系统依赖。
- 在有帮助时使用容器:将 ASP.NET Core 服务打包进容器能提高开发/生产一致性并减少“在我机器上能跑”的问题。
如果你来自旧有 .NET Framework 应用,应把现代化视为分阶段工作:在 API 后面隔离新服务、逐步升级库,并在合适的地方把工作负载迁移到现代 .NET。
如果你想在早期迭代上更快推进,像 Koder.ai 这样的工具可以帮助你通过对话快速生成一个工作型应用(包括后端 + 数据库 + 部署),在准备好将其纳入标准工程流程时可以快照、回滚并导出源码。
推荐阅读
有关更多指南与实操示例,请浏览 /blog。如果你在对比生产部署的托管或支持选项,请参见 /pricing。
结论: C# 不再是小众或受限于 Windows 的选择——它是一个主流的后端选项,适配现代 Linux 服务器、容器与云部署工作流。
常见问题
为什么 C# 在后端开发中有“仅限 Windows”的声誉?
C# 本身一直是通用语言,但长期以来它与 .NET Framework 密切关联,而后者在实践中是以 Windows 为主的。
大多数生产环境中的“C# 后端”部署通常假定 Windows Server + IIS + Windows 集成 API,因此实际的生产路径被绑定在 Windows 上,即便语言本身并不受限。
在实际的后端语境中,“跨平台”是什么意思?
对于后端工作,“跨平台”通常意味着:
- 相同的代码库能在 Windows、Linux 和 macOS 上运行而无需重写。
- 运行时和核心库在各操作系统上表现一致。
- 你的 构建/测试/部署 工作流在 CI、容器和云环境中行为一致。
它更关心的不是“能不能启动”,而是能否在 Windows 之外提供一流的生产体验。
Mono 在 C# 成为跨平台过程中扮演了什么角色?
Mono 是早期的开源实现,证明了 C# 能在 Windows 之外运行。
它使得某些 .NET 风格的应用能在 Linux/macOS 上运行,并通过 Unity 等途径将 C# 在非微软环境中普及开来。代价是 兼容性不完全、生态存在分裂,而不是与官方 .NET Framework 完全一致的实现。
微软走向开源和 Linux 对后端团队为什么重要?
它让 .NET 与服务器实际运行环境对齐:
- 以 Linux 为主的云托管成为许多团队的默认选项。
- **容器(Docker/Kubernetes)**标准化了基于 Linux 的部署方式。
- 团队需要 透明、自动化友好 的工具链。
开源还提升了信任度:设计讨论、问题和修复都可以在公开仓库中查看,降低了将其用于 24/7 生产服务的顾虑。
.NET Core 相较于 .NET Framework 改变了什么?
.NET Core 为现代、跨平台的服务器部署而设计,而不是延续以 Windows 为中心的 .NET Framework。
主要变化包括:
- 能在 Linux(以及 macOS/Windows)上良好运行
- 更模块化的部署与 应用本地依赖
- 支持 并列安装不同运行时版本,降低整台服务器升级的风险
ASP.NET Core 如何让 C# 在 Linux 上成为可行的 Web 后端?
ASP.NET Core 用现代、模块化的框架替代了旧的、与 Windows 紧耦合的 Web 堆栈(System.Web / IIS 假设)。
常见运行模式包括:
- 以 Kestrel 作为跨平台 Web 服务器
- 在前面放一个 反向代理(Nginx/Apache/云负载均衡器)做 TLS 终止与路由
这种模式非常契合 Linux 服务器与容器化部署。
“统一 .NET(5+)” 是什么意思,后端团队为什么关心?
从 .NET 5 开始的统一 .NET 消除了 Framework、Core、Xamarin/Mono 等多线并行的混淆。
对后端团队的好处是更容易标准化:
- 一个主要的平台方向来构建服务
- 跨操作系统更一致的工具和模板
- 更清晰的升级路径,尤其是有 LTS(长期支持)发行版 可选
哪些运行时改进使得现代 .NET 在高负载后端更具竞争力?
现代 .NET 在性能方面的改进包括:
- 更好的 JIT 行为(如分层编译),提升启动与热点代码的表现
- 更成熟的 GC(服务端模式、后台 GC 等),改善吞吐和减少长暂停
- 强大的 async/await 模型,适合 I/O 密集型后端
结果是无需迁移到更底层语言,就能得到更稳定的吞吐与更可预测的尾延迟。
ASP.NET Core 服务的现代部署工作流是什么样的?
一个常见的实务流程是:
- 使用
dotnet publish构建并发布 - 打包成 Linux 容器镜像(通常为多阶段构建)
- 在托管容器服务或 Kubernetes 上运行
为保持可移植性,应做到:
- 使用 环境变量 配置
- 将日志写到 stdout/stderr
- 提供用于 readiness/liveness 的健康端点
今天 C# 在后端方面何时是优秀选择,何时可能不太合适?
当你需要:
- 具有可维护代码库、清晰契约和强大工具链的长期服务
- 高吞吐 API、后台处理或企业级集成
- 在 Linux/容器/云中部署且不被锁死到某个操作系统上
C# 通常是很好的选择。
它可能不太合适的场景包括:
- 极小的“脚本式”无服务器函数——冷启动和包体积很关键时
- 特定运行环境强烈偏向某种运行时,或者对 .NET 部署支持有限时
- 团队偏好极简、一次性原型且不在乎后续可维护性时