Я использую 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.
Каково наилучшее возможное решение, чтобы исправить это? Пожалуйста, помогите мне в этом отношении.
Prism открытый источник, вы можете модифицировать части для использования DryIoc 5 и использовать эти DLL.
Это не похоже на то, что вы принужденный используете пакеты nuget, они предназначены для помощи. Если они мешают, избавьтесь от них.
Prism.DryIoc.Forms использует DryIoc.dll в DryIocContainerExtension. Я клонировал их репозиторий, обновил DryIoc.dll до 5.0.2 и собрал его. Обнаружил, что WithoutFastExpressionCompiler был удален в последней версии DryIoc.dll. Поэтому удалил метод, создал dll и начал использовать в своем проекте. Он начал работать.
Prism.DryIoc.Forms использует DryIoc.dll в DryIocContainerExtension. Я клонировал их репозиторий, обновил DryIoc.dll до 5.0.2 и собрал его. Обнаружил, что WithoutFastExpressionCompiler был удален в последней версии DryIoc.dll. Поэтому удалил метод, создал dll и начал использовать в своем проекте. Он начал работать. Спасибо за Ваш ответ.