При использовании Azure SignalR невозможно загрузить Microsoft.Extensions.Logging.Abstractions - PullRequest
1 голос
/ 21 января 2020

Я использую Asp. Net MVC5 и пытаюсь реализовать Azure SignalR с SQL зависимостью от нашей базы данных Azure. Я могу нормально запускать наше приложение, и у меня уже работал локальный SignalR, но когда я пытаюсь использовать Azure SignalR и добавить:

    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            //starting azure signalR
            app.MapAzureSignalR(this.GetType().FullName);
        }
    }

в мой класс Startup.cs вместе с необходимой строкой подключения в web.config я получаю эту ошибку:

Не удалось загрузить файл или сборку 'Microsoft.Extensions.Logging.Abstractions, Версия = 1.0.0.0, Культура = нейтральная , PublicKeyToken = adb9793829ddae60 'или одна из его зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Я попытался удалить и переустановить пакеты Azure SignalR NuGet, я попытался убедиться, что версии в моем решении совпадают (есть 10 проектов) ), Я удалил папки bin и obj, убедившись, что файлы packages.config и .csproj соответствуют правильным версиям. В некоторых моментах он запрашивает версию = 2.1.0.0, и после переключения на эту версию он затем выдает еще одну ошибку для другой ошибки для Microsoft.Aspnetcore или Logging.Abstractions V1 снова.

I'm действительно, не зная куда go, я скачал пример Azure SignalR в. net mvc5 и смог добиться того, что он работает нормально, но по какой-то причине он не работает в этом большом решении. Я новичок в разработке в целом, поэтому любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ: Принимая советы о том, что делать дальше, я добавил в свой файл Web.config для Microsoft объект bindingRedirect. Extensions.Logging.Abstractions. Это очистило ошибку, но дало тот же для .Logging. Для этого добавили bindingRedirect и получили ту же ошибку для Microsoft.Extensions.Options, сделали то же самое и исправили. Но теперь я получаю эту ошибку:

Не удалось загрузить файл или сборку 'System.Memory, версия = 4.0.1.0, Culture = нейтральный, PublicKeyToken = cc7b13ffcd2ddd51' или одну из ее зависимостей. Система не может найти указанный файл.

И даже после добавления этого bindingRedirect, я все еще получаю ту же ошибку:

  <dependentAssembly>
        <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.3.0" newVersion="4.5.3.0" />
  </dependentAssembly>

Я удалил и переустановил System.Memory nuget , проверил packages.config, web.config и файл .csproj, и все они соответствуют одной и той же версии.

1 Ответ

1 голос
/ 21 января 2020

Как отметил mxmissile, это будет конфликт между разными версиями, запрашиваемыми разными пакетами. Как вы заметили, сам пакет SignalR прекрасно работает, поэтому с этим пакетом проблем не возникает.

Тот факт, что существует несколько проектов, не должен иметь значения, так как пакеты установлены на основа проекта, хотя ASP. NET будет использовать их, если версии совпадают. Я не скажу, что это невозможно, но это не должно основываться на том, как это работает.

Без полного списка установленных пакетов и версий это будет практически невозможно воспроизвести кем-то. В противном случае есть несколько вещей, которые необходимо предпринять, чтобы попытаться отследить конфликт.

  1. Проверьте список библиотек в файле Web.Config. Должно быть что-то вроде <bindingRedirect oldVersion="0.0.0.0-3.1.1.0" newVersion="3.1.1.0" /> для Microsoft.Extensions.Logging.Abstractions, где 3.1.1.0 - текущая установленная версия. Обычно удаление / переустановка очищает это, если это было выключено. Не будучи в состоянии воспроизвести проблему, я не могу сказать наверняка, но проверка, чтобы убедиться, что это правильно, может решить проблему. В прошлом у меня также были случаи, когда удаление свойства bindingredirect полностью разрешало конфликт.
  2. Второе, что нужно сделать, это немного утомительно, но оно должно точно определить проблему. Возьмите ваш проект, который в данный момент имеет только SignalR, и начните добавлять пакеты Nuget, содержащиеся в другом проекте, один за другим, каждый раз тестируя сборку. После сбоя сборки вы будете знать, где находится конфликт, и сможете поработать над его устранением.
  3. Свойство bindingredirect существует для предотвращения подобных проблем, но если другого пути нет, свойство codeBase в списке dependantAssembly позволит вам указать CLR несколько раз включать версию данной сборки. Это усложняет сопровождение проекта, так как вам потребуется вручную обновить этот список, если требования к версии изменятся.
...