我有一个解决方案,其中使用了两个不同版本的软件包,称之为“PackageA v1”和“PackageA v2”。
一个项目引用“PackageA v1” 15个项目参考“PackageA v2”
每次我做任何涉及Nuget的事情时,所有15个项目都将app.config程序集绑定重定向更新为重定向到v1包。
在:
<dependentAssembly>
<assemblyIdentity name="PackageA" publicKeyToken="abc123" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
后:
<dependentAssembly>
<assemblyIdentity name="PackageA" publicKeyToken="abc123" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
</dependentAssembly>
即使在项目的大多数bin文件夹中结束的实际版本是v2,也会发生这种情况!
我尝试从引用它的项目的Nuget包中删除v1,认为如果我只是将v1的dll复制到packages文件夹并手动添加引用,Nuget将不会跟踪v1,无论它用于确定绑定重定向。那没用。
禁用自动装配绑定重定向不是一个选项,因为解决方案有大约50个项目,并且(除此之外)自动重定向在升级包时节省了相当多的时间。
即使像“让Nuget选择最新版本而不是最老版本”这样简单的东西也会很棒。至少那时我只需手动修复一个app.config而不是15。
我希望那里有人有解决方案。提前谢谢!
答案 0 :(得分:0)
Nuget不断将重定向恢复为错误的版本,从而导致运行时错误
根据the bindingRedirect element on MSDN,我恐怕你不能做这些事情。
oldVersion :必需属性。
指定最初请求的程序集的版本。 程序集版本号的格式是 major.minor.build.revision。此版本的每个部分的有效值 数字是0到65535。
您还可以使用以下格式指定一系列版本: n.n.n.n - n.n.n.n
newVersion :必需属性。指定程序集的版本 使用以下格式代替最初请求的版本: 为n.n.n.n
此值可以指定早于oldVersion的版本。
有关详细信息,请参阅this thread。
但是如果你想要“简单的东西”让Nuget选择最新的版本而不是最旧的版本“会很棒”,你可以将以下属性添加到nuget.config
(在路径中,%appdata%\NuGet\NuGet.Config
):
<configuration>
<config>
<add key="dependencyversion" value="Highest" />
</config>
</configuration>
解析您的软件包时,将解析该软件包的最新版本。