drymonfidelia
V2EX  ›  .NET

项目从.NET5.0 升级到 8.0,加起来 1.5 万行代码, Linux 下编译经常要半个小时,有的时候又几秒钟就能编译完, Windows 下一直非常正常,怎么排查?

By drymonfidelia at 2025 年 3 月 26 日 · 5707 次点击
服务器是 aws m8g.2xlarge 8 核 32GB 内存
整个服务器上就一个 Docker ,里面运行这个服务
以前 .NET 5 的都是秒编译
现在经常要半个小时,有时甚至五六个小时编译不完
有时候又能 2 秒编译,不知道为什么
`docker system prune -a` 运行了好几遍,没效果



开 Debug 是因为刚才想试试是不是 Release 导致的编译缓慢才改的,并不是导致问题的原因
第 1 条附言  ·  2025 年 3 月 26 日
看我的 log ,restore 和 build 是完全分开的,restore 最多 50 秒 我用的是 aws ,应该不存在网络不稳定
35 条回复    2025-10-09 21:29:33 +08:00
hez2010
   1
hez2010  
   2025 年 3 月 26 日
可以试试给 dotnet build 加几个参数:-clp:PerformanceSummary -tl:false
这样能看到编译时间到底花在了具体哪个任务上
liuliuliuliu
   2
liuliuliuliu  
PRO
   2025 年 3 月 26 日
这很显然需要一个日志来看看时间都花费在哪里了。
build 的时候加个参数吧
dotnet build -bl:SpecificStep.binlog
supemaomao
   3
supemaomao  
   2025 年 3 月 26 日 via Android
如果是编译为镜像,那么原因可能是 net8 不支持仿真编译了,你需要更改编译的命令,让其使用交叉编译。这个问题之前遇到过。
drymonfidelia
   4
drymonfidelia  
OP
   2025 年 3 月 26 日
@hez2010 加上了,但是似乎没有输出别的东西
drymonfidelia
   5
drymonfidelia  
OP
   2025 年 3 月 26 日
好奇怪的问题,似乎同一套代码,刚才测试 1 楼的参数 3 分钟就编译完了,现在测试 2 楼的参数又编译了 10 分钟还没出来,每次编译时间完全随机
v1
   6
v1  
   2025 年 3 月 26 日
@drymonfidelia 或许是 linux 下编译器的问题呢?而不是项目代码
netnr
   7
netnr  
   2025 年 3 月 26 日   ❤️ 5
估计是 dotnet restore 下载资源网速不稳定

改善网络
外面发布文件,再基于发布文件+runtime 打包,避免编译
beginor
   8
beginor  
   2025 年 3 月 26 日 via Android
加上加个 no restore ,不联网检查 nuget 包, 看看是不是网络问题
tusj
   9
tusj  
   2025 年 3 月 26 日
说两个微软给我的印象:
1 、大学时第一次接触 Visual Studio ,进去之后字体默认是宋体,编程字体用非等宽,写出来那个代码看着非常膈应!(当然可以调整,但非要让每一个人一上来都调整一遍?这不就做事做不到位,招人恶心嘛)。第一次印象就很差,任你网上再吹什么宇宙第一 IDE ,内心还是抗拒。
2 、dotnet7 出来的时候,试了一下,Mac 电脑上命令行 init 一个项目,要好几秒。我心想,就建几个空目录,要好几秒?印象又一次很差!直接从 init 到放弃!任你网上吹什么不考虑工作生存压力,心中理想代码什么写 C#, 什么 dotnet 别提多爽云云。。。我内心还是抗拒,完全不信!
dabao
   10
dabao  
   2025 年 3 月 26 日
换一台 linux 编译,排查下
AlexBob
   11
AlexBob  
   2025 年 3 月 26 日
买个墙外服务器编译,就是下载网络问题,不用看
liuidetmks
   12
liuidetmks  
   2025 年 3 月 26 日
哥们,你到底是干嘛的,高强度刷 V 站发帖,各方面问题都涉及,业务这么广的吗
kneo
   13
kneo  
   2025 年 3 月 26 日
跑个 benchmark 吧。有时候是服务器的问题。
qW7bo2FbzbC0
   14
qW7bo2FbzbC0  
   2025 年 3 月 26 日
墙内下载依赖包的确是会有网络问题
chunqiu233
   15
chunqiu233  
   2025 年 3 月 26 日
@liuidetmks 哈哈
nmap
   16
nmap  
   2025 年 3 月 26 日
现在.net 还能开发 linux 的应用了?
w568w
   17
w568w  
   2025 年 3 月 26 日
@nmap 14 年就支持了吧,.NET 早就改名 .NET Core 了
a33291
   18
a33291  
   2025 年 3 月 26 日
@nmap 现在是真正意义的跨平台和架构(包括龙芯之类) 😁
asuraa
   19
asuraa  
   2025 年 3 月 26 日
是不是加 arm 了 如果你加 arm 和 arm64 之类的确实是这样的,我用 github action 编译 x86 非常快,但是一旦启用 arm64 就慢成屎, 甚至会超时
minibear2021
   20
minibear2021  
   2025 年 3 月 26 日   ❤️ 1
@w568w .net core 已经入土,现在就叫.net
w568w
   21
w568w  
   2025 年 3 月 26 日
@jstony 微软改名部
cenbiq
   22
cenbiq  
   2025 年 3 月 26 日
@nmap .net fx (~2016 ) > .net core ( 2016~2020 ) > .net ( 2020~)
drymonfidelia
   23
drymonfidelia  
OP
   2025 年 3 月 26 日
@netnr 你看我的 log ,restore 和 build 是完全分开的,restore 最多 50 秒 我用的是 aws ,应该不存在网络不稳定
liuliuliuliu
   24
liuliuliuliu  
PRO
   2025 年 3 月 26 日
@nmap 2025 年了还能有人问出这个问题……
netnr
   25
netnr  
   2025 年 3 月 26 日
build 会内部调用 restore ,你可以创建一个空项目,无任何依赖打包,对比一下
drymonfidelia
   26
drymonfidelia  
OP
   2025 年 3 月 27 日
@billbob
@qW7bo2FbzbC0 我帖子正文第一句就是用的是 aws 啊,美国的服务器
@netnr 无依赖空项目确实编译很快,但这不能排除依赖的问题,因为代码也没了
mayli
   27
mayli  
   2025 年 3 月 27 日
编译半小时肯定不正常,才 15k 代码,盲猜网络问题,可能是 dns?
编译的时候看下 ps, top 和 log, 应该比较容易看出是哪里卡住
nivalxer
   28
nivalxer  
   2025 年 4 月 11 日
nuget 的网络问题,在 build 阶段还是会走一次还原包。可以尝试加上 nuget 缓存看看:
restore 、build 阶段都可以加
例如:
RUN --mount=type=cache,id=nuget,target=/root/.nuget/packages dotnet publish "xxxxx.csproj" -c Release -o /app/publish
nivalxer
   29
nivalxer  
   2025 年 4 月 11 日
补充一下:如果是想最终打包为镜像发布,可以直接用 publish
hez2010
   30
hez2010  
   2025 年 4 月 12 日
@drymonfidelia 不应该,按理来说应该是会出现性能数据总结的
换成 /clp:PerformanceSummary /tl:false 试试呢?
niubiman
   31
niubiman  
   2025 年 4 月 17 日
@tusj 这两个问题完全不是什么问题
niubiman
   32
niubiman  
   2025 年 4 月 17 日
@nmap 互联网这么发达了, 为什么信息差还是这么严重, 令人匪夷所思
tusj
   33
tusj  
   2025 年 4 月 18 日
@niubiman 我举例微软 IDE 和 dotnet7 的例子是想说,微软总是在匪夷所思的地方,搞出莫明其妙的问题!令人失望。
这种例子多得很:windows terminal 上 git version 卡死。装了微软电脑管家之后,打开 git bash 有时要 10 秒以上,匪夷所思!
什么信息差,这几个问题你倒是解释解释?
niubiman
   34
niubiman  
   2025 年 4 月 18 日
@tusj #33 我回的是 "现在.net 还能开发 linux 的应用了?" 这句话
ximi522
   35
ximi522  
   2025 年 10 月 9 日
感觉可能是你的 nuget 包下载到了 linux 的 temp 目录里,然后被定期删掉了,就需要重新下载,windows 不会有这种问题。可以看看这个思路。
© 2026 V2EX · 40ms · 3.9.8.5