Nuget不断将重定向恢复为不正确的版本,导致运行时错误

时间:2018-04-06 02:08:55

标签: visual-studio-2017 nuget assembly-binding-redirect

我有一个解决方案,其中使用了两个不同版本的软件包,称之为“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。

我希望那里有人有解决方案。提前谢谢!

1 个答案:

答案 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>

解析您的软件包时,将解析该软件包的最新版本。