2013-08-02 110 views
1

我目前正在開發一個使用ASP.NET MVC的Umbraco網站。該網站還提供了另一個使用EntityFramework 5連接到不同於CMS的數據庫的組件。 (這兩個數據庫都是MySQL)。NuGet依賴和多個DLL版本

我正在使用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衝突:

  • 我無法更新MySql.Data e web組件,因爲Umbraco核心依賴於該特定版本
  • 我無法降級datacomponent包,因爲6.6.5版本的MySQL.Data.Entities組件存在錯誤。

我試圖做的是一些一些bindingRedirects到一個文件夾中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

我無法測試這個,但有類似的問題。在這種情況下,我寫了這樣的事情

<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的,因爲它拿起與反思。