Наше приложение динамически загружает набор частных сборок, каждый из которых находится под их собственным подкаталогом. Каждый из них имеет свои собственные зависимости, которые также находятся в том же подкаталоге. Каждая сборка имеет строгое имя, а зависимости - это одна и та же библиотека, но разные версии.Почему закрытое обнаружение сборок не использует имя полнофункциональной сборки для соответствия, а скорее имя файла?
MyApp
|-> Folder1\
| |->PrivateAssembly1.dll
| |->Dependency.dll Version 1.0.0.0
|
|-> Folder2\
| |->PrivateAssembly2.dll
| |->Dependency.dll Version 2.0.0.0
|
...
Поскольку мы развертываем xcopy, поэтому мы не используем GAC.
У нас также есть probing privatePath
, определяемый для "Folder1;Folder2"
, чтобы решить любую проблему, не находя частные сборки.
Проблема заключается в том, что PrivateAssembly1.dll, похоже, находит свою зависимость, но PrivateAssembly2.dll этого не делает. Вернее, он пытается использовать Dependency.dll из Folder1 вместо Folder2.
Я знаю, что эти проблемы могут быть разрешены вручную с использованием события AssemblyResolve, однако это не самый чистый подход. Есть ли другие решения, которые я рассматриваю?
Спасибо за любые идеи.
Update:
Выход инструмента Fusion Log:
LOG: DisplayName = Dependency, Version=1.0.0.0, Culture=neutral, PublicKeyToken=#########
(Fully-specified)
LOG: Appbase = file:///C:/Workspaces/Shell/MyApp/bin/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
...
LOG: Attempting download of new URL file:///C:/Workspaces/Shell/MyApp/bin/Dependency.DLL.
LOG: Attempting download of new URL file:///C:/Workspaces/Shell/MyApp/bin/Dependency/Dependency.DLL.
LOG: Attempting download of new URL file:///C:/Workspaces/Shell/MyApp/bin/Folder2/Dependency.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Workspaces\Shell\MyApp\bin\Folder2\Dependency.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Dependency, Version=2.0.0.0, Culture=neutral, PublicKeyToken=#######
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
Так в основном, это находит Dependency.dll в Folder2, пытается загрузить его только увидеть, что версия не совпадение. Я бы предположил, что бы попробовать Folder1 рядом, но он просто останавливается там ...
Спасибо, я добавил журнал к вопросу. –