NuGet依赖项和多个DLL版本

时间:2013-08-02 10:55:14

标签: mysql asp.net-mvc umbraco nuget

我目前正在使用ASP.NET MVC开发一个Umbraco网站。该网站还引用了另一个组件,该组件使用EntityFramework 5连接到不同于CMS的数据库。 (两个数据库都是MySQL)。

我正在使用NuGet来管理我的依赖项。这些是(以及其他)我当前的包及其依赖项:

DataComponent

   -> MySQL.Data.Entities 6.7.4
      -> MySql.Data 6.7.4 (dependency for at least 6.7.4)

网络

Umbraco core
    -> MySql.Data 6.6.5 (exact version)

现在的问题是,Web组件有对数据组件的引用,因此引用了MySQL.Data冲突:

  • 我无法更新Web组件中的MySql.Data,因为Umbraco核心依赖于该特定版本
  • 我无法降级datacomponent软件包,因为MySQL.Data.Entities组件的6.6.5版本存在错误。

我试图做的是一些绑定重定向到bin之外的文件夹:

<dependentAssembly>
   <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
   <bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.6.5.0" />
   <codeBase version="6.7.4.0" href="Assembly/6.7.4/MySql.Data.dll"/>
   <codeBase version="6.6.5.0" href="Assembly/6.6.5/MySql.Data.dll"/>
</dependentAssembly>

这里的问题是AssemblyBinder首先查看bin目录,而且还有6.6.5版本的DLL,因此它的清单定义与程序集不匹配。它位于bin文件夹中,因为我仍然希望将该包作为NuGet包。

我唯一能想到的是彻底删除Umbraco包并手动解决它。这样,bin中就不会有DLL,而AssemblyBinder必须查找正确的文件夹。我不想这样做,因为我需要在我们的CI服务器和其他开发人员PC上正确设置包。此外,该包还有许多其他依赖项,我希望自动解决。

有谁知道不同的解决方案?

1 个答案:

答案 0 :(得分:1)

我无法测试这个,但也有类似的问题。在那些情况下,我写了这样的东西

<dependentAssembly>
   <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
   <bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.6.5.0" />
   <codeBase version="6.6.5.0" href="bin\Assembly\6.6.5\MySql.Data.dll"/>
   <codeBase version="6.7.4.0" href="bin\MySql.Data.dll"/>
</dependentAssembly>

与你的文件最大的区别在于我在bin文件夹中有默认的mysql,因为它是用反射拾取的。