Я реализовал пользовательский .NET RoleProvider как проект библиотеки классов с использованием Entity Framework.Это должно использоваться с несколькими веб-приложениями.Как предотвратить конфликт EF, используемого .dll, с любой версией EF, используемой клиентским веб-приложением?
Эта библиотека классов ссылается на EF6.При компиляции я получаю библиотеку .dll, а также файлы EF6 EntityFramework.dll и EntityFramework.SqlServer.dll.Это прекрасно работает в веб-приложениях, которые либо вообще не ссылаются на EF, либо ссылаются на одну и ту же версию EF6 - я могу поместить все три файла в папку bin веб-приложения.Однако, если я ссылаюсь на своего поставщика ролей в проекте веб-форм, который также ссылается на EF5, это означает, что два файла .dll EF5 уже находятся в папке bin для веб-приложения, поэтому я не могу поместить одноименный EF6 .dllфайлы там.Если я добавлю туда только мой собственный файл .dll, он не скомпилируется и будет жаловаться на загрузку моей сборки при анализе файла web.config (где настроен поставщик ролей).
=== Pre-bind state information ===
LOG: DisplayName = EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
(Fully-specified)
LOG: Appbase = file:///D:/OVPR_Apps/A/Intramural/
LOG: Initial PrivatePath = D:\OVPR_Apps\A\Intramural\bin
Calling assembly : OVPRRoleProvider, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null.
===
...
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
Есть ли способинкапсулировать необходимые версии библиотеки EF с моим собственным .dll?Или иначе изолировать все, что нужно .dll от веб-приложения, в котором он используется?В любом случае я рассмотрел вопрос о включении DLL-поставщика роли в GAC, поскольку он будет использоваться для нескольких приложений на сервере, но я читаю некоторые красные флажки об этом (строго именные сборки плохие и т. Д.).Я мог бы также поместить EF6 в GAC, но, похоже, меня не должны заставлять идти по маршруту GAC только из-за EF.