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 をターゲットにした後、単体テストがスローされます

検証例外

操作により、ランタイムが不安定になる可能性があります。

例外ダイアログが示唆する

アプリケーションがクラス ライブラリの競合する 2 つのバージョンを読み込んでいないことを確認してください。

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

おそらく関連している

インストール後の System.Security.VerificationException VS 2012

ただし、構成を 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 に答える