C# MEF DirectoryCatalog неожиданный результат с идентичным именем файла DLL - PullRequest
2 голосов
/ 04 мая 2020

Я занимаюсь разработкой приложения WPF, которое поддерживает функции подключаемых модулей MEF. Он находит плагин путем получения экспорта из DirectoryCatalog, например

DirectoryCatalog catalog = new DirectoryCatalog(@".\libs", fileName);
CompositionContainer container = new CompositionContainer(catalog);
BaseModel.Instance.ImportedPlugins = container.GetExports<IExternalServiceProvider>();

Итак, я хотел, чтобы он загружал FILENAME.dll внутри подпапки с именем libs, Однако когда файл dll с именем FILENAME.dll существует и в основной папке, и в папке libs, этот код загружает FILENAME.dll из основной папки .

Debug
ㄴlibs
  ㄴFILENAME.dll(latest build) - This one should be loaded
ㄴApp.exe
ㄴFILENAME.dll(old build) - but this one is loaded instead

Я пробовал несколько сценариев ios, но меня это сбивает с толку.

CASE 1

Debug
ㄴlibs
  ㄴFILENAME.dll(latest version)
ㄴApp.exe
ㄴFILENAME.dll(old version)

-> загружена старая версия

CASE 2

Debug
ㄴlibs
  ㄴFILENAME.dll(latest version)
ㄴApp.exe
ㄴFILENAME.dlllll(old version)

-> загружена последняя версия

CASE 3

Debug
ㄴlibs
  ㄴFILENAME.dll(latest version)
ㄴApp.exe
ㄴWRONGFILENAME.dll(old version)

-> загружена последняя версия

CASE 4 (наиболее запутанный случай)

Debug
ㄴlibs
  ㄴWRONGFILENAME.dll or FILENAME.dlllll(latest version)
ㄴApp.exe
ㄴFILENAME.dll(old version)

-> не удалось загрузить ни одну из них

Я могу попробовать другой способ использования Каталога для решения этой проблемы с загрузкой, но я не могу найти, почему и как происходит Случай 4. Что я делаю не так?

...