【发布时间】:2009-12-03 21:16:47
【问题描述】:
我正在尝试使用Unity 解析TimeSpan。执行容器 Resolve 调用会产生 FatalExecutionEngineError。
检测到致命的执行引擎错误 消息:运行时遇到致命错误。错误地址位于线程 0x1bb8 上的 0x543c3dc8。错误代码为 0xc0000005。此错误可能是 CLR 或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM-interop 或 PInvoke 的用户封送错误,这可能会损坏堆栈。
在 DEBUG 中运行测试会导致调试器请求以下文件。
X:\Unity\Src\ObjectBuilder\Strategies\BuildPlan\DynamicMethod\DynamicMethodBuildPlan.cs
它在第 38 行显示以下 ExecutionEngineException。
System.ExecutionEngineException 未处理 Message="抛出了“System.ExecutionEngineException”类型的异常。" 内部异常:
测试
[TestClass]
public class Example
{
private readonly IUnityContainer container = new UnityContainer();
[TestInitialize]
public void TestInitialize()
{
container.Register<TimeSpan>(new ExternallyControlledLifetimeManager());
}
[TestMethod]
public void Test()
{
var expected = new TimeSpan();
var actual = container.Resolve<TimeSpan>();
Assert.AreEqual(expected, actual);
}
}
【问题讨论】:
-
我知道 Unity 有一些默认的 ctor 选择规则,但我至少应该看到 Unity 异常。
-
这也发生在其他结构上,例如 DateTime。
标签: .net struct unity-container fatal-error