代码的兼容性:
从 dotnet c0re 3.1 起,dotnet 的代码兼容性已经非常优秀,从 dotnet c0re 3.1 升级到 dotnet 5.0,然后再升级到 dotnet 6.0,都是只修改项目文件里面的版本声明,然后更新下 nuget 包对应版本就足够了。包版本不更新一般也没问题。(还需要更新CI里面 dockerFile的 base image sdk 和 runtime 版本,如果你用到的话)
第三方依赖这几年没见过因为 breaking change 升不上去的情况,api 接口都是经过慎重考虑的。每个版本更新都会有专门的 breaking changes 文档页,都是些很细微的地方,基本没影响。碰到过一些版本不适配的情况是 unit test 的 Nunit framework 用低版本的 package 不认识高版本的 .net 版本的情况,升级 package 到最新就好了。
.NET framework (windows 下的那个)的兼容性已经保持了20年了,不过不属于我们的考虑范围。
轻重问题:
现在我们是在 linux 用 docker 跑基于 asp.net c0re 的微服务,一个服务镜像打包后大概 200MB 左右,启动速度通常 1s 内,对于 server 端没什么好抱怨的了。如果你初始化代码写得多可能会稍慢点,但肯定在秒级别。实在在意启动速度可以启用 NativeAOT,虽然我觉得在 server 端意义不大,而且不少库不支持。
整个框架其实已经很轻量级了。如果用 MinimapApi 会更加轻量级。刚看了下 MinimapApi 的 helloworld 模板程序,跑了 15s 100 并发的 benchmark 之后,占用内存大概 160 MB 左右。不过 dotnet 是带 GC 的,你内存大,一直跑它就会多占用内存到阈值再 GC,可以通过 cgroup 之类的东西来限制。看自己的取舍是用 workstation GC (保持低内存占用但吞吐量差点)还是 server GC (优先吞吐量,内存可能会占用比较高).
开发环境:
我司基本上都是 Window 和 Mac 做开发工具,Windows 下用 Visual Studio 2022,Mac 用 JetBrains Rider 的比较多,有一个 Visual Studio for Mac,但我帮别人解决问题的时候用过几次,个人认为并不好用。vscode 有时候也用,可用性还不错,特别是快速代码浏览的时候,直接打开目录,不用等 vs 加载项目,但开发的爽快感个人感觉还是比不上 Visual Studio。
没见过有人真的在 linux 下面开发。或者你可以试试用 vscode remote,在 windows 下面开发 linux 上面的代码库。
【 在 eGust 的大作中提到: 】
: 我们公司一直用 ruby on rails 开发 web 应用,最近开始考虑技术转型。新的开发栈基本是前后端彻底分离,后端只提供 web api 就好了。我个人是比较倾向 c# 的,主要原因是用了 ts 之后回不去没类型的开发了,再加上跟 java 和 go 比还是更喜欢 c# 的语法,尤其是能重载运算符
: ,这样做计算的时候代码更好读,另外 async/await 的语法也应该更容易上手。
: 但是在有人提出了反对意见,由于我对 c#、asp.net 的历史和生态也没啥概念,所以特地来请教一下。
: ...................
--
FROM 113.65.10.*