I am using Prism.DryIoc.Extensions(v8.0.62) and Prism.DryIoc.Forms(v8.1.97) which internally is using DryIoc.dll v4.7.3 and v4.7.7 respectively for my Xamarin.Forms project.
I also have a nuget update for my project which is internally using DryIoc.dll v5.0.2.
Now, If I update project nuget to the latest, It throws error. As there is a version conflict.
Since it is a project related nuget, I will have to update somehow. But there is a dependency on Prism and Prism has not released any latest version with latest DryIoc.dll.
I tried to add the following in our .csproj file
<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>
This solved compile time error but started throwing run time error as below,
System.MissingMethodException Message=Method not found: DryIoc.Rules DryIoc.Rules.WithoutFastExpressionCompiler()
I also tried creating app.config and use the below code snippet,
<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>
But this is also failing with the same error as above.
Getting rid of Prism is one of the solutions but It is a huge effort as the entire project is using Prism.
What is the best possible solution to fix this? Please help me in this regard.
CodePudding user response:
Prism's open source, you can modify parts to use DryIoc 5 and use those dlls.
It's not like you're forced to use nuget packages, they're meant to help. If they hinder, get rid of them.
CodePudding user response:
Prism.DryIoc.Forms is using DryIoc.dll in DryIocContainerExtension. I cloned their repo, updated DryIoc.dll to 5.0.2 and built it, Found that WithoutFastExpressionCompiler has been removed in DryIoc.dll latest. So removed the method and created a dll and started using in my project. It started working.