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

问题描述 投票:3回答:1

我有一个使用一些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的依赖行为还是不安全?如果我这样做,我应该将依赖行为更改为什么?

谢谢

nuget ninject ninject.web
1个回答
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. 如果OnePerRequestHttpModule没有在App_Start\Ninject.Web.Common.cs中解析,那么将以下using语句添加到文件using Ninject.Web.Common.WebHost;(我认为这是包的v3.3.1中缺少的引用。

希望这有助于其他人。

© www.soinside.com 2019 - 2024. All rights reserved.