使用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。

根据元数据......

  • IValidatorFactoryValidatorFactoryBase在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的评论包含一个很好的解决方案。我试一试,它几乎可以工作。这里有一个细微的变化,更详细:

  1. 删除所有包含“FluentValidation”的Nuget包。
  2. 使用Nuget安装FluentValidation-Signed。
  3. 使用Nuget安装FluentValidation.MVC3-Signed(或MVC4-Signed)
  4. 使用Package Manager控制台,输入以下内容: Install-Package Ninject.Web.Mvc.FluentValidation -IgnoreDependencies

注意:我不需要手动将绑定重定向添加到我的Web.config中(尽管Nuget包自动添加了一个)。

另一答案

DanM正确识别了该问题。 Here是项目协调员的评论

“继续推进主要的nuget包将不再被强烈命名。

如果您绝对需要强命名,可以使用单独的软件包FluentValidation-signed,但建议您使用未签名的版本。“Jeremy Skinner

以上是关于使用Nuget更新FluentValidation后NinjectValidatorFactory出错的主要内容,如果未能解决你的问题,请参考以下文章

NuGet自动更新特定包

如何在 Web API 中使用 FluentValidation 执行异步 ModelState 验证?

在 .NET Core 中使用 FluentValidation 和依赖注入

使用 FluentValidation 实现数据校验验重

使用 FluentValidation 在一条规则中进行多重验证

翻译FluentValidation验证组件的使用