【问题标题】:Cannot upgrade Ninject to latest version in Nuget无法在 Nuget 中将 Ninject 升级到最新版本
【发布时间】:2019-02-15 18:08:01
【问题描述】:

我有一个 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,我会得到:

无法解决依赖关系。 'Ninject 3.3.4' 不兼容 'Ninject.Web 3.2.1 约束:Ninject (>= 3.2.0 &&

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

我应该更改Ninject.Web 的依赖行为还是不安全?如果我这样做,我应该将依赖行为更改为什么?

谢谢

【问题讨论】:

    标签: nuget ninject ninject.web


    【解决方案1】:

    好的,这就是解决方法:

    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 命名空间移动到 @987654335 @。

    5. 同样的原因你也可以删除文件App_Start\NinjectWeb.cs(注册NinjectHttpModule

    6. 如果OnePerRequestHttpModuleApp_Start\Ninject.Web.Common.cs 中无法解析,则将以下 using 语句添加到文件using Ninject.Web.Common.WebHost;(我认为这是包的 v3.3.1 中缺少的引用。

    希望这对其他人有所帮助。

    【讨论】:

    • 我没有原始错误消息,但这些步骤仍然非常有用,因为更新创建了额外的 Ninject.Web.Common.cs 文件并且缺少步骤 6 中的 using 语句。
    • Ninject.Web.Common 3.3.1 不包含像 HttpHandlerBase, PageBase, WebServiceBase 这样的类。如何替换它们? @克里斯沃尔什
    • @ptp 抱歉,不确定。你检查过Ninject.Web.Common.WebHost吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2012-04-21
    • 2022-01-05
    相关资源
    最近更新 更多