NuGet命令Get-Project -All | Add-BindingRedirect版本号来源及DLL同步问题
关于
Add-BindingRedirect命令版本号来源的说明 我来给你拆解这个命令的工作逻辑——Get-Project -All | Add-BindingRedirect本质上是遍历你解决方案里的所有项目,分析每个项目的程序集引用关系,最终生成对应的绑定重定向配置,它的版本号来源主要有这几个地方:
- 项目直接引用的程序集版本:命令会读取每个项目文件(比如
.csproj)里<Reference>节点的Version属性,这是你手动或通过NuGet添加的直接引用版本。比如你说所有项目都指向4.4.1版本,那这就是核心的版本来源。 - 传递性依赖的最高版本:如果某个程序集是通过其他NuGet包间接引入的(传递依赖),命令会扫描整个解决方案的依赖树,收集该程序集的所有出现版本,然后选择最高的那个版本作为重定向目标。不过在你的场景里,所有项目都统一用4.4.1,所以传递依赖的版本应该也和这个一致。
- NuGet包管理的版本约定:如果程序集是通过NuGet安装的,命令会优先尊重NuGet在
packages.config(旧格式)或PackageReference(新格式)里记录的版本信息——毕竟NuGet本身就是用来管理包版本一致性的工具,它会确保依赖版本和你安装的包版本匹配。
举个实际的例子:假设你有两个项目,一个直接引用了Newtonsoft.Json 13.0.1,另一个间接依赖了12.0.3,那命令会生成重定向到13.0.1这个最高版本。而在你的场景里,所有项目都锁定4.4.1,所以生成的重定向都会指向这个版本,刚好符合你同步版本的需求。
另外补充一句:删除旧的绑定重定向再重新生成是个很稳妥的操作,这样可以避免旧配置和当前引用版本不一致的问题,这个命令就是专门用来帮你自动维护绑定重定向和当前项目引用版本对齐的。
内容的提问来源于stack exchange,提问作者jboy12
相关产品推荐
相关产品推荐

