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

构建服务器上Microsoft NuGet包还原耗时过长问题求助

离线构建服务器Microsoft NuGet包还原耗时过长问题分析与解决

核心现象

  • 离线环境下的构建服务器还原Microsoft官方NuGet包时,「添加」步骤耗时极长(例如Microsoft.Extensions.Configuration.9.0.0耗时3分钟),但本地开发包仅需数毫秒即可完成
  • 原本1分钟的NuGet还原流程被拖至近20分钟,临时联网后问题暂时消失,但1天至1周后会再次出现
  • 已排除磁盘空间、服务器负载问题,启用NuGet详细输出(-vvv)也未获取到额外异常信息

原因推测

结合离线环境特性,核心原因大概率是Microsoft官方NuGet包的签名证书触发了在线校验/吊销检查:

  • Microsoft发布的NuGet包通常带有数字签名,默认情况下NuGet会尝试在线验证证书有效性或检查证书是否被吊销
  • 离线环境下这些在线请求无法完成,会触发超时等待(通常为3分钟左右的默认超时时间),导致包添加步骤停滞
  • 临时联网时NuGet会缓存证书校验结果,缓存过期后超时问题再次出现

解决思路

1. 直接禁用NuGet包签名验证

这是最直接的解决方案,适合无需强制验证包签名的场景:

  • 命令行还原时添加参数:
    nuget restore -DisablePackageSignatureValidation
    
  • 或在构建服务器的NuGet.Config文件中全局配置:
    <configuration>
      <config>
        <add key="disablePackageSignatureValidation" value="true" />
      </config>
    </configuration>
    

2. 配置本地证书吊销列表(CRL)缓存

如果必须保留包签名验证,可以提前下载Microsoft证书的CRL文件到本地,避免在线请求:

  • 找到对应签名证书的CRL地址(可通过查看包签名详情获取)
  • 下载CRL文件到构建服务器本地路径
  • 通过Windows组策略或本地证书管理器,配置服务器使用本地CRL文件进行校验

3. 确保NuGet本地缓存完整性

离线环境下,缓存损坏也可能导致异常耗时:

  • 清理NuGet本地缓存:
    nuget locals all -clear
    
  • 从本地NuGet源重新推送并还原所有需要的包,确保缓存中的包文件完整无损坏

4. 搭建本地NuGet源

彻底隔离外部依赖,避免任何隐式在线请求:

  • 部署本地NuGet服务器(如NuGet.Server、BaGet)
  • 将所有需要的Microsoft包提前下载并上传至本地源
  • 修改构建服务器的NuGet.Config,仅配置本地源作为包来源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:25:09