我有一个使用一些 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
,我得到: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 中删除此条目,那么在启动应用程序时可能会出现类型异常,尤其是因为作为版本更新的一部分,该类已从
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 中缺少的引用。希望这对其他人有帮助。
关于nuget - 无法在 Nuget 中将 Ninject 升级到最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52272485/