У меня есть простое приложение, которое загружает два узла во время выполнения от 2 подпапок через этот кусок кода:Бока стороны сборка выпуска погрузочной
Assembly.Load("A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
Assembly.Load("B, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
Структура каталога:
Таким образом, ожидаемая нагрузка это делается следующим образом:
TheApp.exe -> A.dll -> C.dll (version 2.0.0.0)
-> B.dll -> C.dll (version 1.0.0.0)
Пожалуйста, обратите внимание, что C.dll
подписан так что обе версии должны быть загружены бок о бок.
Чтобы обеспечить применение нагружает сборку из правильных мест, я добавил следующее в файл приложение конфигурации:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="B;A" />
</assemblyBinding>
</runtime>
</configuration>
Проблема заключается в приложении сбой с сообщением ниже, когда начался:
=== Pre-bind state information ===
LOG: User = ...
LOG: DisplayName = C, Version=2.0.0.0, Culture=neutral, PublicKeyToken=93a02044a09d059a
(Fully-specified)
LOG: Appbase = file:///D:/Temp/TheApp/bin/Debug/Test/
LOG: Initial PrivatePath = NULL
Calling assembly : A, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\Temp\TheApp\bin\Debug\Test\TheApp.exe.Config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: C, Version=2.0.0.0, Culture=neutral, PublicKeyToken=93a02044a09d059a
LOG: Attempting download of new URL file:///D:/Temp/TheApp/bin/Debug/Test/C.DLL.
LOG: Attempting download of new URL file:///D:/Temp/TheApp/bin/Debug/Test/C/C.DLL.
LOG: Attempting download of new URL file:///D:/Temp/TheApp/bin/Debug/Test/B/C.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
ВОПРОС: Почему рабочая среда смотрит только в папку «B»? Почему он не продолжает искать правильную версию общей сборки в папке A?
EDIT1: Я добавил <codeBase>
тег, как указано ниже, я знаю, есть следующие в моем файле конфигурации:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="B;A" />
</assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="C" publicKeyToken="93a02044a09d059a" />
<codeBase version="1.0.0.0" href="B/C.dll"/>
<codeBase version="2.0.0.0" href="A/C.dll"/>
</dependentAssembly>
</runtime>
</configuration>
Тем не менее, проблема остается!
Для меня это выглядит, как вы создали тестовый проект, чтобы изолировать проблему. Можете ли вы загрузить его где-нибудь, чтобы другие могли играть с ним? Это, скорее всего, приведет к более быстрому ответу. –
@ DanielHilgarth Действительно, это тестовый код, но я должен сделать много очистки, чтобы удалить проприетарные вещи :( – GETah