使用Nuget更新FluentValidation后NinjectValidatorFactory出错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Nuget更新FluentValidation后NinjectValidatorFactory出错相关的知识,希望对你有一定的参考价值。
我的NinjectModule中有以下代码行:
Bind<IValidatorFactory>().To<NinjectValidatorFactory>().InSingletonScope();
这曾经工作正常,但在使用Nuget进行一系列更新后,我收到以下错误:
错误3类型'Ninject.Web.Mvc.FluentValidation.NinjectValidatorFactory'不能在泛型类型或方法'Ninject.Syntax.IBindingToSyntax.To()'中用作类型参数'TImplementation'。没有从'Ninject.Web.Mvc.FluentValidation.NinjectValidatorFactory'到'FluentValidation.IValidatorFactory'的隐式引用转换。 D: Projects Current ... Configuration MainModule.cs 19 13
错误4“FluentValidation.ValidatorFactoryBase”类型在未引用的程序集中定义。您必须添加对程序集'FluentValidation,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = a82054b837897c66'的引用。 D: Projects Current ... Configuration MainModule.cs 19 13
确实,我没有引用FluentValidation Version = 2.0.0.0,但我确实引用了FluentValidation Version = 3.4.0.0。
根据元数据......
IValidatorFactory
和ValidatorFactoryBase
在Assembly FluentValidation.dll中定义。NinjectValidatorFactory
在Assembly Ninject.Web.Mvc.FluentValidation.dll中定义。
在我的References文件夹中,我有FluentValidation v3.4.0.0和Ninject.Web.Mvc.FluentValidation v3.0.0.0。
我不明白为什么编译器认为我需要FluentValidation Version = 2.0.0.0。
我做错了什么,或者这是Nuget包的问题?
看起来问题是FluentValidation曾经是一个有符号的程序集,但现在是一个无符号程序集。但是,Ninject.Web.Mvc.FluentValidation仍然认为FluentValidation已签名。
如果你在ILSpy中查看这两个程序集,你会注意到以下内容:
- Ninject.Web.Mvc.FluentValidation使用以下属性引用FluentValidation:FluentValidation,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = a82054b837897c66
- 但是,最新版本的FluentValidation具有不同的属性:FluentValidation,Version = 3.4.0.0,Culture = neutral,PublicKeyToken = null
请注意,PublicKeyToken已更改为null(无符号)。
希望很快就会解决这个问题。同时,选项是回滚到之前的FluentValidation或通过新的fork修复引用。
更新
刚刚将bug report发布到Ninject.Web.Mvc.FluentValidation。希望这可以确保快速解决问题。
更新2
万一有人错过了,下面@dismissile的评论包含一个很好的解决方案。我试一试,它几乎可以工作。这里有一个细微的变化,更详细:
- 删除所有包含“FluentValidation”的Nuget包。
- 使用Nuget安装FluentValidation-Signed。
- 使用Nuget安装FluentValidation.MVC3-Signed(或MVC4-Signed)
- 使用Package Manager控制台,输入以下内容:
Install-Package Ninject.Web.Mvc.FluentValidation -IgnoreDependencies
注意:我不需要手动将绑定重定向添加到我的Web.config中(尽管Nuget包自动添加了一个)。
DanM正确识别了该问题。 Here是项目协调员的评论
“继续推进主要的nuget包将不再被强烈命名。
如果您绝对需要强命名,可以使用单独的软件包FluentValidation-signed,但建议您使用未签名的版本。“Jeremy Skinner
以上是关于使用Nuget更新FluentValidation后NinjectValidatorFactory出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Web API 中使用 FluentValidation 执行异步 ModelState 验证?
在 .NET Core 中使用 FluentValidation 和依赖注入