使用 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 或通過新的分叉修復引用。
更新
剛剛向 Ninject.Web.Mvc.FluentValidation發布了一個錯誤報告。希望這將確保問題得到快速解決。
更新 2
以防萬一有人錯過,下面@dismissile 的評論包含一個很好的解決方案。我試了一下,效果很好。這是一個更詳細的細微變化:
- 刪除所有包含“FluentValidation”的 Nuget 包。
- 使用 Nuget 安裝 FluentValidation-Signed。
- 使用 Nuget 安裝 FluentValidation.MVC3-Signed(或 MVC4-Signed)
- 使用包管理器控制台,輸入以下內容:
Install-Package Ninject.Web.Mvc.FluentValidation -IgnoreDependencies注意:我不需要手動將綁定重定向添加到我的 Web.config(儘管 Nuget 包自動添加了一個)。