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

如何让NuGet在遵循Sitefinity版本约束下更新所有依赖包?

在不升级Sitefinity 13版本的前提下,通过NuGet安全更新依赖包的方法

我在Visual Studio中维护一个Sitefinity Web应用,希望在不升级Sitefinity版本的前提下,通过NuGet尽可能多地更新其他包。已在packages.config中给Sitefinity包添加版本约束,阻止其升级:

<package id="Telerik.Sitefinity.All" version="13.3.7649" targetFramework="net48" allowedVersions="(,14.0)" />

但NuGet尝试更新Sitefinity的间接依赖包时,仍会抛出“无法解析依赖项”的错误——例如它会尝试将ServiceStack等依赖包更新至最新版(当前为8.0),最终因与Sitefinity的版本约束冲突失败。

请问:除了为每个间接依赖手动添加allowedVersions约束外,有没有办法让NuGet自动计算所有约束,仅将包更新到Sitefinity允许的最高兼容版本?

补充信息

Progress.Sitefinity.Core.13.3.7649的直接依赖项如下:

Telerik.DataAccess.Core [2020.0.428.1]
Telerik.DataAccess.Web35 [2020.0.428.1]
Progress.Sitefinity.Renderer [13.3.7626.24196]
ServiceStack [5.9.2]
ServiceStack.Redis [5.9.2]
ServiceStack.Server [5.9.2]
ServiceStack.Aws [5.9.2]
ServiceStack.Caching.Memcached [5.9.2]
ServiceStack.OrmLite.SqlServer [5.9.2]
AWSSDK.DynamoDBv2 3.5.2
AWSSDK.SQS 3.5.0.36
Telerik.Web.UI [2021.1.119.45]
Newtonsoft.Json [12.0.3]

可行解决方法

1. 使用NuGet的安全更新参数

在Visual Studio的NuGet包管理器控制台中执行以下命令,NuGet会自动遵循现有依赖的版本约束,只更新到兼容的最高版本:

Update-Package -Safe

-Safe参数会限制更新范围,不会突破Sitefinity定义的依赖版本上限(比如ServiceStack只会更新到5.x系列的最新版,而非8.0)。

2. 批量生成间接依赖的版本约束(若-Safe参数无效)

如果-Safe参数未达到预期效果,可以批量提取并添加约束:

  • 先导出当前项目的包列表及依赖信息:
    Get-Package -ProjectName "你的项目名称" | Select-Object Id, Version
    
  • 根据Sitefinity的依赖定义,为每个间接依赖设置对应的allowedVersions范围,例如ServiceStack可设置为[5.9.2,6.0),确保仅更新5.x系列。
  • 利用文本编辑器的批量替换功能,快速给所有需要约束的包添加allowedVersions属性到packages.config中。

3. 迁移到PackageReference模式(长期推荐)

packages.config是较旧的包管理模式,PackageReference对依赖约束的解析更智能:

  • 在Visual Studio中右键项目 → 选择迁移packages.config到PackageReference
  • 迁移完成后,NuGet会自动继承Telerik.Sitefinity.All的依赖约束,更新时默认选择兼容版本,无需手动添加大量约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:57:33