Asp.net-Mvc

使用 Nuget 更新 FluentValidation 後 NinjectValidatorFactory 出錯

  • January 2, 2018

我的 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 或通過新的分叉修復引用。

更新

剛剛向 Ninject.Web.Mvc.FluentValidation發布了一個錯誤報告。希望這將確保問題得到快速解決。

更新 2

以防萬一有人錯過,下面@dismissile 的評論包含一個很好的解決方案。我試了一下,效果很好。這是一個更詳細的細微變化:

  1. 刪除所有包含“FluentValidation”的 Nuget 包。
  2. 使用 Nuget 安裝 FluentValidation-Signed。
  3. 使用 Nuget 安裝 FluentValidation.MVC3-Signed(或 MVC4-Signed)
  4. 使用包管理器控制台,輸入以下內容:
Install-Package Ninject.Web.Mvc.FluentValidation -IgnoreDependencies

注意:我不需要手動將綁定重定向添加到我的 Web.config(儘管 Nuget 包自動添加了一個)。

引用自:https://stackoverflow.com/questions/12015553