Как работать с несколькими версиями сборки в личных папках с помощью config?

StackOverflow https://stackoverflow.com/questions/638310

Вопрос

У меня есть сценарий, в котором у меня есть несколько версий одной и той же сборки, которые мне нужно сохранить в личных папках приложения, в структуре, подобной этой:

.\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 элементы, указывающие на каждую версию.Элемент зондирования, похоже, не работает в этом сценарии.

Это было полезно?

Решение

Не видя всего решения, я могу только предположить, что у вас где-то опечатка.Я только что попробовал это на себе и - с помощью fuslogvw, Я смог заставить это работать.

У меня есть три версии сборки, и потребляющее приложение ссылается на более старую версию, чем та, что находится в его выходном каталоге.Среда CLR находит перенаправление и запись кодовой базы и загружает правильную (более старую) версию.

Я могу отправить вам свое решение по электронной почте, если вы укажете адрес электронной почты.

Кент

Другие советы

Можете ли вы использовать пробепат? мы используем это, чтобы заставить неконтролируемых (например, сторонних распознавателей, таких как MSTest) искать сборки там, где они нам нужны.

<?xml version ="1.0"?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="v1.1.1;v1.1.2;"/>
        </assemblyBinding>
    </runtime>
</configuration>

См. здесь для получения дополнительной информации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top