无法在Nuget中将Ninject升级到最新版本

时间:2018-09-11 09:09:13

标签: nuget ninject ninject.web

我有一个使用一些Ninject程序包的ASP.NET WebForms应用程序,但是我只能使用某个版本。当我尝试升级到最新版本时,出现“无法解决依赖关系”问题。

有问题的软件包是:

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,则会得到:

  

无法解决依赖性。 'Ninject 3.3.4'与不兼容   'Ninject.Web 3.2.1约束:Ninject(> = 3.2.0 && <3.3.0)'

但是Ninject.Web已经是最新版本!

我应该更改Ninject.Web的依赖行为还是不安全?如果这样做,我应该如何更改“依赖关系”行为?

谢谢

1 个答案:

答案 0 :(得分:5)

好的,这是解决方法:

  1. 完全删除Ninject.Web软件包。不再需要此软件包,因为它现已集成到Ninject.Web.Common(无论如何,版本v3.3 +)中
  2. 更新软件包NinjectNinject.Web.CommonNinject.Web.Common.WebHost。现在这些应该可以升级了。对我来说,它们都是v3.3.1。
  3. 作为软件包升级的一部分,将添加一个新文件App_Start\Ninject.Web.Common.cs。这只是现有App_Start\NinjectWeb.Common.cs的重命名,因此[a]删除新文件或[b]迁移您的Ninject模块注册并删除旧文件。
  4. web.config中,您现在应该删除OnePerRequestModule模块:

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

    这是因为此模块在加载时动态注册到App_Start\Ninject.Web.Common.cs文件的Start()方法中:

    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. 如果OnePerRequestHttpModuleApp_Start\Ninject.Web.Common.cs中无法解析,则将以下using语句添加到文件using Ninject.Web.Common.WebHost;中(我认为这是v3.3.1中缺少的参考包。

希望这对其他人有帮助。