6

我有类似的代码

using FluentValidation;

public class FreeformValidator : AbstractValidator<Freeform>
{
    public FreeformValidator() // <-- VerificationException on this line
    {
        RuleFor(ff => ff.Text).Must(BeLongEnough).WithMessage("Must be at least {0} characters.", ff => ff.MinLength);
    }
}

由单元测试运行。在针对 .Net 4 的 VS 2010 下,单元测试运行良好。更新到 VS 2012 并以 .Net 4.5 为目标后,单元测试抛出

验证异常

操作可能会破坏运行时的稳定性。

异常对话框建议

确保您的应用程序没有加载类库的两个冲突版本。

AbstractValidator来自 FluentValidation。正在测试的项目和单元测试项目都参考 FluentValidation 3.3.1.0。这两个项目现在也以 .Net 4.5 为目标。

这两个项目都以 AnyCPU 为目标。该代码在 Windows 7 64 位上运行。

更新

这是单元测试代码

[TestMethod]
public void FreeformValidation_MinLength()
{
    Freeform fa = new Freeform();
    fa.Required = true;
    fa.MinLength = 3;
    fa.MaxLength = 10;
    FreeformValidator fv = new FreeformValidator();

    fa.Text = "AB";
    ValidationResult results = fv.Validate(fa);
    Assert.AreEqual(1, results.Errors.Count, "Expected MinLength to fail.");
    Assert.AreEqual("Must be at least 3 characters.", results.Errors[0].ErrorMessage, "Expected MinLength to fail.");
}

更新 2

可能相关

安装 VS 2012 后的 System.Security.VerificationException

但是,将配置切换到 x86 并重新运行测试会导致相同的 Exception

似乎不适用的类似问题

运行带有附加调试器的测试时,如何防止出现 VerificationException?

如果没有调试器,单元测试会以同样的方式失败,并且将 FluentValidator 添加到 IntelliTrace 排除列表没有帮助。

操作可能会破坏运行时的稳定性?

我没有强命名程序集,也没有 AllowPartiallyTrustedCallers 属性。

更新 3

PEVerify 发现测试项目的 DLL 或被测试的 DLL 都没有问题。

4

2 回答 2

5

看起来CLR 团队特别建议了一个修复程序:

修复了 .net 4.5 反射错误 将 CLR 团队建议的修复应用于 AbstractValidator 和 DelegateValidator 类型。

https://github.com/thecodejunkie/FluentValidation/commit/ddc1d7235b9c122c06fd224e8490b94791a715c0

于 2012-08-17T17:55:00.643 回答
3

我们今天在测试升级到 VS2012 RTM 并使用 FluentValidation 包时遇到了同样的问题。

我们暂时使用的解决方案是将以下内容添加到 FluentValidation src 中的 'src/CommonAssemblyInfo.cs' 中并重建它:

[assembly: SecurityRules(SecurityRuleSet.Level1, SkipVerificationInFullTrust = true)]

感谢讨论: http: //fluentvalidation.codeplex.com/discussions/391890

于 2012-08-17T03:06:25.297 回答