Не удается обновить Ninject до последней версии в Nuget - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть приложение ASP.NET WebForms, которое использует некоторые пакеты Ninject, но я застрял в определенной версии.Когда я пытаюсь выполнить обновление до последней версии, у меня возникает проблема «Невозможно разрешить зависимости».

Рассматриваемые пакеты:

Package                       InstalledVer   LatestVer
------------------------------------------------------
Ninject                       v3.2.2         v3.3.4
Ninject.Web                   v3.2.1 ✔      v3.2.1
Ninject.Web.Common            v3.2.3         v3.3.1
Ninject.Web.Common.WebHost    v3.2.3         v3.3.1

Если я пытаюсь обновить Ninject, яget:

Невозможно разрешить зависимости.'Ninject 3.3.4' несовместим с ограничением 'Ninject.Web 3.2.1: Ninject (> = 3.2.0 && <3.3.0)' </p>

, но Ninject.Web уже находится напоследняя версия!

Следует ли изменить поведение зависимости Ninject.Web или это будет небезопасно?Если я это сделаю, что я должен изменить поведение зависимости?

Спасибо

1 Ответ

0 голосов
/ 11 сентября 2018

Хорошо, вот как это исправить:

  1. Полностью удалите пакет Ninject.Web.Этот пакет больше не требуется, поскольку теперь он интегрирован в Ninject.Web.Common (ну, в любом случае, версия v3.3 +)
  2. Обновите пакеты Ninject, Ninject.Web.Common и Ninject.Web.Common.WebHost.Теперь они должны обновить все в порядке.Для меня они оба v3.3.1.
  3. В рамках обновления пакета будет добавлен новый файл App_Start\Ninject.Web.Common.cs.Это просто переименование существующего App_Start\NinjectWeb.Common.cs, поэтому либо [a] удалите новый файл, либо [b] перенесите все регистрации вашего модуля Ninject и удалите старый файл.
  4. In web.config,Теперь вы должны удалить модуль OnePerRequestModule:

     <system.webServer>
         <modules runAllManagedModulesForAllRequests="true">
             <add name="OnePerRequestModule" type="Ninject.Web.Common.OnePerRequestHttpModule" />
         </modules>
     </system.webServer>
    

    Это потому, что этот модуль динамически регистрируется при загрузке в методе Start() файла App_Start\Ninject.Web.Common.cs:

    public static void Start()
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        bootstrapper.Initialize(CreateKernel);
    }
    

    Если вы не удалите эту запись из web.config, вы можете ожидать исключения типа при запуске приложения, не в последнюю очередь потому, что в рамках обновления версии класс переместился из пространства имен Ninject.Web.Common в Ninject.Web.Common.WebHost.

  5. Вы также можете удалить файл App_Start\NinjectWeb.cs по той же причине (регистрация NinjectHttpModule)

  6. Если OnePerRequestHttpModule не разрешаетсяв App_Start\Ninject.Web.Common.cs затем добавьте следующее выражение using в файл using Ninject.Web.Common.WebHost; (я думаю, что это отсутствующая ссылка в v3.3.1 пакета.

Надеюсь, это поможет другим.

...