每当我使用附加的调试器运行以下任一单元测试时,此时我会在FluentValidation内部获得VerificationException
代码(如果需要,将在稍后发布整个堆栈跟踪):
at FluentValidation.Resources.LocalizedStringSource.CreateFromExpression(Expression`1 expression, IResourceAccessorBuilder resourceProviderSelectionStrategy)
in ...\FluentValidation\Resources\LocalizedStringSource.cs:line 66
测试是:
using FluentValidation;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var c = new MyClass();
var v = new MyValidator();
v.Validate(c);
}
[TestMethod]
public void TestMethod2()
{
Exception ex = null;
var done = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(
o =>
{
try
{
TestMethod1();
}
catch (Exception e)
{
ex = e;
}
finally
{
done.Set();
}
});
done.WaitOne();
Assert.IsNull(ex);
}
}
public class MyValidator : AbstractValidator<MyClass>
{
public MyValidator()
{
RuleFor(c => c.MyProperty).GreaterThan(0);
}
}
public class MyClass
{
public int MyProperty { get; set; }
}
我在单一解决方案,单项目方案中引用了这些程序集,目标是4.0.30319运行时:
其他一些观点:
SecurityRulesAttribute
有谁知道如何阻止这种VerificationException
,解决它,和/或为什么会造成这种情况?似乎有这么少的装配,不应该有任何冲突的装载。我还将FluentValidation卫星程序集移开了,但仍然得到例外。
答案 0 :(得分:12)
好的,我知道了。首先,我要感谢Jeremy Skinner让working with me重现问题。他的帮助促使我尝试进一步调整我的环境。
要防止出现此问题,您必须在Visual Studio 2010 Ultimate中禁用IntelliTrace,或者必须将FluentValidation添加到IntelliTrace应从收集数据中排除的模块列表中。我的网络搜索似乎表明它是一个IntelliTrace错误。他Jim Nakashima中的blog post说:
问题在于IntelliTrace本身存在一个错误,当IntelliTrace集合设置为“高”(这是Cloud IntelliTrace场景中的默认值)时,标记为SecurityTransparent的程序集中具有布尔输出参数的方法将失败。 / p>
如果您的方法的签名包含布尔输出参数并且您已将程序集安全性设置为SecurityTransparent,您将在自己的代码中看到这一点。
我查看了我的堆栈跟踪并简要介绍了FluentValidation源代码,但没有看到这一点。我怀疑它可能是与LINQ表达式相关的类似IntelliTrace检测错误。
无论如何,这是解决问题的方法:
答案 1 :(得分:1)
我遇到了同样的问题,发现TypeMock 6.0是罪魁祸首。通过禁用TypeMock Isolator(菜单TypeMock - &gt;禁用TypeMock Isolator),我解决了这个问题。这当然会破坏任何与TypeMock相关的测试。
请注意,当TypeMock出现问题时,将FluentValidation添加到IntelliTrace异常并不能解决问题。
答案 2 :(得分:0)
在我的情况下,我的Asp.net MVC 3应用程序引用了FluentValidation.dll和FluentValidation.mvc.dll文件。
我删除了引用并使用nuget包管理器为MVC 3安装了FluentValidation并且它工作正常。
下载了FluentValidation.Mvc版本5.0.0.1