代码之家  ›  专栏  ›  技术社区  ›  UnknownBeef

Nuget不断将重定向还原到错误版本,导致运行时错误

  •  2
  • UnknownBeef  · 技术社区  · 7 年前

    我有一个解决方案,其中使用了一个包的两个不同版本,称它们为“PackageA v1”和“PackageA v2”。

    一个项目引用“PackageA v1” 15项目参考“PackageA v2”

    每次我做任何涉及Nuget的事情,15个项目都有自己的应用程序。配置程序集绑定重定向更新为重定向到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,也会发生这种情况!

    我尝试从引用v1的项目的Nuget包中删除v1,认为如果我只是将v1的dll复制到packages文件夹并手动添加引用,Nuget将不会跟踪v1,无论它使用什么来确定绑定重定向。那没用。

    禁用自动程序集绑定重定向不是一个选项,因为该解决方案有大约50个项目,并且(除此之外)自动重定向在升级包时节省了大量时间。

    即使是像“让Nuget选择最新版本而不是最旧版本”这样简单的事情也会很好。至少我只需要手动修复一个应用程序。配置而不是15。

    我希望有人能找到解决办法。提前感谢!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Leo Liu    7 年前

    Nuget不断将重定向还原到错误版本,导致运行时错误

    根据 the bindingRedirect element on MSDN ,恐怕你不能做这样的事。

    旧版本 :必需属性。

    指定最初请求的程序集版本。 程序集版本号的格式为 专业少数的建筑修订此版本每个部分的有效值 数字为0到65535。

    您还可以使用以下格式指定一系列版本: n、 n.n.n-n.n.n.n

    新版本 :必需属性。指定程序集的版本 要使用以下格式代替最初请求的版本,请执行以下操作: n、 n.n.n

    此值可以指定比oldVersion更早的版本。

    看见 this thread 了解更多详细信息。

    但如果你想的话“ 像“让Nuget选择最新的版本而不是最旧的”这样简单的东西会很好 ,可以将以下属性添加到 nuget.config (在路径中, %appdata%\NuGet\NuGet.Config ):

    <configuration>
        <config> 
            <add key="dependencyversion" value="Highest" /> 
        </config>
    </configuration>
    

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