Розв'язання проблеми з версіями бібліотеки System.Net.Http в .NET Framework проекті

Розв’язання проблеми з версіями бібліотеки System.Net.Http в .NET Framework проекті

8 Березня 2024 в 22:57 48

У світі розробки програмного забезпечення виникають різноманітні проблеми, і одна з них – конфлікт версій бібліотек. Сьогодні ми розглянемо типовий випадок, коли проект на базі .NET Framework зіткнувся з проблемою завантаження бібліотеки System.Net.Http.

Один із розробників поділився своїм досвідом: він мав веб-застосунок на базі .NET Framework 4.7.2, який посилювався на дві бібліотеки зі змішаною цільовою аудиторією, які включали однакову версію. Веб-застосунок також використовував NuGet Package System.Net.Http, версія 4.3.4.0. Проте під час компіляції в папці виведення (bin output folder) з’являлися файли версії 4.7.3062.0, що призводило до виникнення винятку під час виконання програми.

Досліджуючи цю проблему, виявилося, що веб-застосунок отримував посилання на версію бібліотеки System.Net.Http v 4.2.0.0, яка мабуть додається самою бібліотекою .NET Framework 4.7.2. Хоча у файлі конфігурації веб-застосунку було встановлено assembly bindingRedirect для версії 4.2.0.0 з newVersion для 4.3.4.0, але це не вирішувало проблему.

Також виявилося, що каталог пакетів для версії 4.3.4.0 мав версію 4.6.26907.01, що ще більше ускладнювало ситуацію. Помилка вказувала на те, що маніфест виявленої збірки не відповідає посиланню на збірку, що викликала виняток.

Для вирішення цієї проблеми розробнику довелося докладно вивчити механізми завантаження збірок .NET Framework та процеси збірки проекту. Він вирішив проблему шляхом встановлення більш точного assembly bindingRedirect, а також виправлення версій в NuGet пакетах, щоб вони відповідали потрібним версіям. Після цих дій веб-застосунок успішно скомпілювався та працював без винятків.

Отже, важливо не тільки розуміти причину конфлікту версій бібліотек, але й мати глибокі знання про механізми завантаження збірок та механізми прив’язки збірок. Це допомагає ефективно вирішувати проблеми та забезпечувати стабільну роботу програмного забезпечення.