У меня есть сценарий, в котором у меня есть несколько версий одной и той же сборки, которые мне нужно хранить в личных папках приложения, в такой структуре:
.\My.dll // latest version, say 1.1.3.0
.\v1.1.1\My.dll // version 1.1.1.0
.\v1.1.2\My.dll // version 1.1.2.0
Моя проблема заключается в том, что среда выполнения .Net, когда запрашивается одна из более старых версий, всегда находит последнюю версию, а затем происходит сбой из-за несоответствия номера сборки перед попыткой поиска лучшего соответствия.
Сборки имеют строгое имя, и я использую эту конфигурацию в моем app.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="My"
publicKeyToken="xxxxxxxx" culture="netural" />
<bindingRedirect oldVersion="1.0.0.0-1.1.1.0"
newVersion="1.1.1.0" />
<bindingRedirect oldVersion="1.1.3.0-1.1.65535.65535"
newVersion="1.1.3.0" />
<codeBase version="1.1.1.0" href="v1.1.1\My.dll" />
<codeBase version="1.1.2.0" href="v1.1.2\My.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Надеюсь, я кое-что здесь упустил. Я знаю, что это можно решить с помощью кода, прослушивая событие AppDomain.AssemblyResolve , но я бы хотел увидеть чисто конфигурационное решение.
Обновление: Итак, я обнаружил ошибку, которая, как предположил Кент, была опечаткой. culture="netural"
должно быть culture="neutral"
.
Тем не менее, без опечатки, решение прекрасно работает при использовании codeBase
элементов, которые указывают на каждую версию.
Похоже, что зондирующий элемент не работает в этом сценарии.