无法将 Ninject 升级到 Nuget 中的最新版本
Cannot upgrade Ninject to latest version in Nuget
我有一个 ASP.NET WebForms 应用程序,它使用了一些 Ninject 包,但我卡在了某个版本。当我尝试升级到最新版本时,出现 "Unable to resolve dependencies" 个问题。
有问题的包是:
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
,我得到:
Unable to resolve dependencies. 'Ninject 3.3.4' is not compatible with
'Ninject.Web 3.2.1 constraint: Ninject (>= 3.2.0 && < 3.3.0)'
但是Ninject.Web
已经是最新版本了!
我应该更改 Ninject.Web
的依赖行为吗?这样会不安全吗?如果我这样做,我应该将依赖行为更改为什么?
谢谢
好的,这就是解决方法:
- 完全删除
Ninject.Web
包。不再需要此软件包,因为它现在已集成到 Ninject.Web.Common
(无论如何,版本 v3.3+)
- 更新软件包
Ninject
、Ninject.Web.Common
和 Ninject.Web.Common.WebHost
。这些现在应该可以升级了。对我来说,它们都是 v3.3.1.
- 作为软件包升级的一部分,将添加一个新文件
App_Start\Ninject.Web.Common.cs
。这只是对现有 App_Start\NinjectWeb.Common.cs
的重命名,因此 [a] 删除新文件或 [b] 迁移您的 Ninject 模块注册并删除旧文件。
在 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 中删除此条目,那么您可能会在启动应用程序时遇到类型异常,尤其是因为作为版本更新的一部分,class 已从Ninject.Web.Common
命名空间到 Ninject.Web.Common.WebHost
.
同样的原因也可以删除文件App_Start\NinjectWeb.cs
(注册NinjectHttpModule
)
如果 OnePerRequestHttpModule
在 App_Start\Ninject.Web.Common.cs
中未解析,则将以下 using 语句添加到文件 using Ninject.Web.Common.WebHost;
(我认为这是 v3 中缺少的引用.3.1 包.
希望这对其他人有帮助。
我有一个 ASP.NET WebForms 应用程序,它使用了一些 Ninject 包,但我卡在了某个版本。当我尝试升级到最新版本时,出现 "Unable to resolve dependencies" 个问题。
有问题的包是:
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
,我得到:
Unable to resolve dependencies. 'Ninject 3.3.4' is not compatible with 'Ninject.Web 3.2.1 constraint: Ninject (>= 3.2.0 && < 3.3.0)'
但是Ninject.Web
已经是最新版本了!
我应该更改 Ninject.Web
的依赖行为吗?这样会不安全吗?如果我这样做,我应该将依赖行为更改为什么?
谢谢
好的,这就是解决方法:
- 完全删除
Ninject.Web
包。不再需要此软件包,因为它现在已集成到Ninject.Web.Common
(无论如何,版本 v3.3+) - 更新软件包
Ninject
、Ninject.Web.Common
和Ninject.Web.Common.WebHost
。这些现在应该可以升级了。对我来说,它们都是 v3.3.1. - 作为软件包升级的一部分,将添加一个新文件
App_Start\Ninject.Web.Common.cs
。这只是对现有App_Start\NinjectWeb.Common.cs
的重命名,因此 [a] 删除新文件或 [b] 迁移您的 Ninject 模块注册并删除旧文件。 在
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 中删除此条目,那么您可能会在启动应用程序时遇到类型异常,尤其是因为作为版本更新的一部分,class 已从
Ninject.Web.Common
命名空间到Ninject.Web.Common.WebHost
.同样的原因也可以删除文件
App_Start\NinjectWeb.cs
(注册NinjectHttpModule
)如果
OnePerRequestHttpModule
在App_Start\Ninject.Web.Common.cs
中未解析,则将以下 using 语句添加到文件using Ninject.Web.Common.WebHost;
(我认为这是 v3 中缺少的引用.3.1 包.
希望这对其他人有帮助。