You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Docker构建.NET方案报3.1.101\Roslyn\Microsoft.CSharp.Core.targets错误

故障排查与解决方案

1 nuget本地提示包已安装的原因与修复

该差异确实是潜在诱因之一:本地工作目录存在packages文件夹,执行COPY . .时会将本地已有的依赖包同步到容器内,所以nuget restore会提示所有包已安装,CI环境为干净构建目录无遗留文件,因此会重新拉取所有依赖。
修复方式:

  • 新增.dockerignore文件,添加以下规则,避免本地构建遗留文件进入容器:
packages/
bin/
obj/
.vs/
*.user
*.suo
  • 强制nuget每次清空缓存重新拉包,将Dockerfile中的RUN nuget restore替换为:
RUN nuget locals all -clear && nuget restore -NoCache

2 三类随机编译报错的根因与修复

三类报错均为老版本.NET Core SDK编译.NET Framework项目时的已知兼容性问题,以及本地Docker资源分配不足导致的:

根因说明

你当前使用的2020年版.NET Framework SDK镜像内置的.NET Core 3.1.101 SDK存在Roslyn编译器不稳定的已知bug,使用dotnet build编译.NET Framework项目时会随机出现栈溢出、csc.dll崩溃的问题;同时本地Docker Windows容器默认分配内存通常为2G,编译大型项目时内存不足也会触发随机崩溃,CI环境资源充足且不会使用Core CLI编译Framework项目,因此运行正常。

修复方案

  • 优先替换编译命令:镜像内置了Visual Studio 2019 BuildTools,原生支持.NET Framework项目编译,将RUN dotnet build ATTAboticsAutomation.sln替换为msbuild命令即可:
RUN msbuild ATTAboticsAutomation.sln /t:Build /p:Configuration=Release /p:Platform="Any CPU"
  • 调整本地Docker资源配置:打开Docker Desktop设置,将Windows容器的内存分配上限调整为4G及以上,CPU核心调整为2核及以上。
  • 可选升级基础镜像:替换为更新版本的.NET Framework SDK镜像,修复内置组件的已知bug。

内容的提问来源于stack exchange,提问作者Kashif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:45:05