Kit*_*Kit 6 c# debugging exception intellitrace fluentvalidation
每当我运行附带调试器的以下任一单元测试时,我都会VerificationException
在此时获得一个内部FluentValidation代码(如果需要,将在稍后发布整个堆栈跟踪):
at FluentValidation.Resources.LocalizedStringSource.CreateFromExpression(Expression`1 expression, IResourceAccessorBuilder resourceProviderSelectionStrategy)
in ...\FluentValidation\Resources\LocalizedStringSource.cs:line 66
Run Code Online (Sandbox Code Playgroud)
测试是:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我在单一解决方案,单项目场景中引用了这些程序集,目标是4.0.30319运行时:
其他一些观点:
SecurityRulesAttribute
从回答类似的问题有谁知道我如何防止这种情况VerificationException
,解决它,和/或为什么会造成这种情况?似乎有这么少的装配,不应该有任何冲突的装载.我还将FluentValidation卫星程序集移开了,但仍然得到了异常.
Kit*_*Kit 12
好的,我知道了.首先,我还要感谢杰里米· 斯金纳对和我一起工作来重现问题.他的帮助促使我尝试进一步调整我的环境.
要防止出现此问题,您必须在Visual Studio 2010 Ultimate中禁用IntelliTrace,或者必须将FluentValidation添加到IntelliTrace应从收集数据中排除的模块列表中.我的网络搜索似乎表明它是一个IntelliTrace错误.Jim Nakashima在他的博客文章中说:
问题是IntelliTrace本身有一个错误,当IntelliTrace集合设置为"高"(这是Cloud IntelliTrace场景中的默认值)时,标记为SecurityTransparent的程序集中具有布尔输出参数的方法将失败.
如果您的方法的签名包含布尔输出参数并且您已将程序集安全性设置为SecurityTransparent,您将在自己的代码中看到这一点.
我查看了我的堆栈跟踪并简要介绍了FluentValidation源代码,但没有看到这一点.我怀疑它可能是与LINQ表达式相关的类似IntelliTrace检测错误.
无论如何,这是如何解决问题: