Как переопределить более высокую версию DryIoc.dll более низкой версией с зависимостями?

Я использую Prism.DryIoc.Extensions(v8.0.62) и Prism.DryIoc.Forms(v8.1.97), которые внутренне используют DryIoc.dll v4.7.3 и v4.7.7 соответственно для моего проекта Xamarin.Forms.

У меня также есть обновление nuget для моего проекта, в котором используется DryIoc.dll v5.0.2.

Теперь, если я обновлю проект nuget до последней версии, он выдает ошибку. Так как есть конфликт версий.

Поскольку это nuget, связанный с проектом, мне придется как-то его обновить. Но существует зависимость от Prism, и Prism не выпустила ни одной последней версии с последней версией DryIoc.dll.

Я попытался добавить следующее в наш файл .csproj.

<PackageReference Include = "Prism.DryIoc.Extensions" Version = "8.0.62">
        <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
        <dependentAssembly>
          <assemblyIdentity name = "DryIoc.dll" culture = "neutral" />
          <bindingRedirect oldVersion = "4.7.3" newVersion = "5.0.2" />
        </dependentAssembly>
    </PackageReference>

Это решило ошибку времени компиляции, но начало выдавать ошибку времени выполнения, как показано ниже:

System.MissingMethodException Message=Method not found: DryIoc.Rules DryIoc.Rules.WithoutFastExpressionCompiler()

Я также попытался создать app.config и использовать приведенный ниже фрагмент кода:

<configuration>
<runtime>
    <assemblyBinding xmlns = "urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name = "DryIoc" publicKeyToken = "dfbf2bd50fcf7768" culture = "neutral" />
            <bindingRedirect oldVersion = "0.0.0.0-5.0.1.0" newVersion = "5.0.2.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Но это также не работает с той же ошибкой, что и выше.

Избавление от Prism — одно из решений, но это требует огромных усилий, поскольку весь проект использует Prism.

Каково наилучшее возможное решение, чтобы исправить это? Пожалуйста, помогите мне в этом отношении.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
22
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Prism открытый источник, вы можете модифицировать части для использования DryIoc 5 и использовать эти DLL.

Это не похоже на то, что вы принужденный используете пакеты nuget, они предназначены для помощи. Если они мешают, избавьтесь от них.

Prism.DryIoc.Forms использует DryIoc.dll в DryIocContainerExtension. Я клонировал их репозиторий, обновил DryIoc.dll до 5.0.2 и собрал его. Обнаружил, что WithoutFastExpressionCompiler был удален в последней версии DryIoc.dll. Поэтому удалил метод, создал dll и начал использовать в своем проекте. Он начал работать. Спасибо за Ваш ответ.

Anoop H.N 17.05.2022 08:48

Prism.DryIoc.Forms использует DryIoc.dll в DryIocContainerExtension. Я клонировал их репозиторий, обновил DryIoc.dll до 5.0.2 и собрал его. Обнаружил, что WithoutFastExpressionCompiler был удален в последней версии DryIoc.dll. Поэтому удалил метод, создал dll и начал использовать в своем проекте. Он начал работать.

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