Exception de mémoire système dans le logiciel OCR IronOCR
Lorsque les développeurs utilisent la dernière version de ce logiciel OCR sur le .NET Framework, il arrive que l'exécution du programme aboutisse à un code d'erreur System.Memory Exception, comme indiqué ci-dessous.
Could not load file or assembly 'System.Memory, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Bien que ce problème ne soit pas directement lié à IronOCR lui-même, il existe des problèmes de compatibilité connus avec les dépendances de System.Memory. Même lorsqu'une version plus récente de System.Memory (par exemple, 4.4.5 ou ultérieure) est installée, que ce soit dans le cadre d'une autre dépendance ou en tant que référence directe, l'environnement d'exécution peut toujours générer des erreurs liées à la version.
Cela se produit car certaines dépendances imposent une liaison de version stricte, ce qui signifie qu'elles attendent une version spécifique de System.Memory, indépendamment de la présence d'une version plus récente et théoriquement compatible. Par conséquent, l'erreur persiste à moins d'appliquer la solution de contournement décrite ci-dessous.
Solution
La solution à cette exception consiste à modifier le App.config avec le code ci-dessous.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Explication
Le App.Config modifié vise à prévenir les conflits de versions qui peuvent survenir lorsque plusieurs dépendances nécessitent des versions différentes du même assemblage. Grâce à cette configuration, l'application chargera la version appropriée lors de son exécution. La redirection force tous les composants à utiliser la version v4.0.1.2, éliminant ainsi le risque d'exception mentionnée précédemment. Après avoir modifié le App.Config, veuillez relancer l'application pour vous assurer que le programme ne génère pas une autre exception.
Pour plus d'informations et de discussions sur ce sujet, vous pouvez consulter la page GitHub qui détaille l'exception et la solution de contournement actuelle ici .

