Wyjątek pamięci systemowej
Gdy programiści używają najnowszej wersji IronOCR na .NET Framework, występują przypadki, gdy uruchomienie programu skutkuje System.Memory Exception, jak pokazano poniżej.
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)
Chociaż ten problem nie jest bezpośrednio związany z samym IronOCR, istnieją znane problemy z kompatybilnością z zależnościami System.Memory. Nawet gdy zainstalowana jest nowsza wersja System.Memory (np. 4.4.5 lub późniejsza) — czy to jako część innej zależności, czy jako bezpośrednie odniesienie — środowisko uruchomieniowe wciąż może rzucać błędami związanymi z wersją.
Dzieje się tak, ponieważ niektóre zależności wymuszają ścisłe wiązanie wersji, co oznacza, że oczekują konkretnej wersji System.Memory, niezależnie od tego, czy jest dostępna nowsza, teoretycznie kompatybilna wersja. W efekcie błąd utrzymuje się, dopóki nie zastosujemy obejścia opisanego poniżej.
Rozwiązanie
Rozwiązaniem tego wyjątku jest zmodyfikowanie App.config za pomocą poniższego kodu.
<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>
Wyjaśnienie
Zmodyfikowany App.Config ma na celu zapobieżenie konfliktom wersji, które mogą się pojawić, gdy wiele zależności wymaga różnych wersji tego samego zestawu. Korzystając z tej konfiguracji, aplikacja załaduje odpowiednią wersję w czasie wykonywania. Przekierowanie zmusza wszystkie komponenty do używania wersji v4.0.1.2, eliminując w ten sposób możliwość wystąpienia wyżej wspomnianego wyjątku. Po zmodyfikowaniu App.Config proszę ponownie uruchomić aplikację, aby upewnić się, że program nie wywołuje kolejnego wyjątku.
Aby uzyskać więcej informacji i dyskusji na ten temat, można odwiedzić stronę GitHub, która szczegółowo opisuje wyjątek i obecne obejście tutaj.

