3.4.6.0中没有FluentValidation.Mvc.MetadataExtensions(避免System.Security.VerificationException)

时间:2013-01-07 11:53:16

标签: asp.net-mvc-3 .net-4.5 fluentvalidation

我继承了一些使用FluentValidation 3.0.0.1的代码,并且在我安装了.NET 4.5的机器上,我得到了可怕的System.Security.VerificationException : Operation could destabilize the runtime错误。阅读本文后:http://elegantcode.com/2012/08/23/net-4-5-operation-could-destabilize-the-runtime-yikes/我将FluentValidation和FluentValidation.MVC3 nuget软件包更新到最新版本3.4.6.0。

但......更新后,此代码无法编译:

rules.RuleFor(x => x.Number).DisplayName("Bla bla bla"); // <-- No DisplayName method

失败是因为它在using FluentValidation.Mvc.MetadataExtensions上进行了中继,并且这个命名空间在3.4.6.0版本的DLL中不存在

最新的FV中是否有MetadataExtensions个等价物?如果没有,我如何使用最新3.4.6.0中的内容替换DisplayNameScaffoldHiddenInput和类似方法?

(我完全不熟悉FluentValidation - 因为VerificationException而偶然发现它)

2 个答案:

答案 0 :(得分:0)

当您使用FluentValidation新版本时,您将不得不使用WithMessage而不是如下所示显示

 RuleFor(x => x.city).NotNull().WithMessage("City is required"); 

答案 1 :(得分:0)

安装最新版本不是一个选项,但我已下载3.0.0.1 source并将change应用于AbstractValidator类。

// Func<CascadeMode> cascadeMode = () => ValidatorOptions.CascadeMode; // Deleted
static Func<CascadeMode> s_cascadeMode = () => ValidatorOptions.CascadeMode; // Added
Func<CascadeMode> cascadeMode = s_cascadeMode; // Added

使用修补版本应用程序替换原始3.0.0.1后,启动时没有VerificationException