更新Nuget包后,使用NinjectValidatorFactory出现错误的问题

9
我在我的NinjectModule中有以下代码行: ```

我在我的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都定义在程序集FluentValidation.dll中。
NinjectValidatorFactory定义在程序集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包的问题?
2个回答

11

看起来问题在于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或通过新的分支修复引用。

更新

刚刚向Ninject.Web.Mvc.FluentValidation发布了一个错误报告。希望这将确保问题得到快速解决。

更新2

如果有人错过了,@dismissile下面的评论包含一个好的解决方案。我试过了,基本上可以工作。这里稍微变化一下,加入更多细节:

  1. Remove all Nuget packages that contain "FluentValidation".
  2. Use Nuget to install FluentValidation-Signed.
  3. Use Nuget to install FluentValidation.MVC3-Signed (or MVC4-Signed)
  4. Using Package Manager Console, enter the following:

    Install-Package Ninject.Web.Mvc.FluentValidation -IgnoreDependencies
    
注意:我不需要手动将绑定重定向添加到我的Web.config文件中(尽管Nuget包已自动添加了一个)。

@DanM 这个问题有任何更新吗?我无法回滚到以前的版本,因为旧版的FluentValidation与.NET 4.5不兼容。 - Dismissile
@Dismissile,请查看Umair Ahmed的回答。你能否使用“FluentValidation-signed”呢?同时,在错误报告(https://github.com/ninject/ninject.web.mvc.fluentvalidation/issues/3)上留下评论也无妨。 - devuxer
3
我能够解决这个问题,方法如下:安装FluentValidation-Signed和FluentValidation.MVC4-Signed。 安装Ninject.MVC3。 进入包管理器控制台并安装Ninject.Web.Mvc.FluentValidation -IgnoreDependencies。 然后创建了一个3.2到3.4.6的绑定重定向,这样Ninject程序集就不再抱怨需要特定的程序集了。 - Dismissile
@Dismissile,抱歉回复晚了。非常好的解决方案。谢谢。我会更新我的答案。 - devuxer
1
提到绑定重定向很有用。我查看了“Ninject.Web.Mvc.FluentValidation”包,它只有一个类,其余都是NuGet工具...在这种情况下,似乎值得在您的项目中创建自己的“NinjectValidatorFactory”类,因为它没有太多功能并且不太可能需要大量更改。 - Pricey
显示剩余3条评论

2
问题已被DanM正确识别。这是项目协调员的评论(此处)

“从现在开始,主要的NuGet包将不再加强命名。

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


感谢澄清FluentValidation已经停止使用强命名和原因。+1。 - devuxer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接