nuget是否有解决方案来包含依赖于一个包的不同版本的包?

时间:2014-02-04 20:17:09

标签: .net nuget

我已经在使用DocumentFormat.Ooxml软件包,并且还想使用ClosedXml,这取决于同一个库的旧版本,所以我得到了:

PM> Install-Package closedxml
Attempting to resolve dependency 'DocumentFormat.OpenXml (= 1.0)'.
Installing 'DocumentFormat.OpenXml 1.0'.
Successfully installed 'DocumentFormat.OpenXml 1.0'.
Installing 'ClosedXML 0.69.2'.
Successfully installed 'ClosedXML 0.69.2'.
Install failed. Rolling back...
Install-Package : Already referencing a newer version of 'DocumentFormat.OpenXml'.

nuget实际上是否有针对这种情况的解决方案?即使我可以进行程序集重定向(我在单元测试中总是有混合结果),我在-Force上看不到Install-Package参数。

修改:在nuget discussion board

上发布了Cross

1 个答案:

答案 0 :(得分:2)

目前没有计划允许将多个版本的软件包同时安装到一个项目中。这通常会导致冲突,因为需要引用2个具有相同名称的程序集(并在bin文件夹中)。

这里的问题是ClosedXML对DocumentFormat.OpenXml具有特定于版本的依赖性。您可以联系ClosedXML的所有者,看看他们是否可以发布允许使用不同版本的DocumentFormat.OpenXml的新版本。

如果不成功,那么您可以尝试通过执行以下操作来摆脱这种冲突:

  1. 安装包DocumentFormat.OpenXml [来到你的起点]
  2. Install-Package ClosedXML -ignoreDependencies [安装它,忽略它的依赖关系]
  3. 这将导致绑定重定向添加到您的app / web.config文件中,如下所示:

    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.5.5631.0" newVersion="2.5.5631.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    

    然后你需要测试你对ClosedXML的消费,看看是否可以真正使用较新版本的DocumentFormat.OpenXml。如果它有效,你当然希望让ClosedXML的所有者知道(使用www.nuget.org上的联系人所有者链接获取该包),以便他们可以继续使用允许更新包的新版本较新的DocumentFormat.OpenXml。