大佬教程收集整理的这篇文章主要介绍了Windows Phone 8.1 C#app:仅在发布模式下的真实设备上发生严重崩溃(ExecutionEngineException),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public struct Token : IDictionary<String,Token> { public readonly object Value; public Token(String str) { Value = str; } public Token(IDictionary<String,Token> Dict) { Value = Dict; } /* IDictionary<String,Token> implementation is here */ }
不要问我它做了什么.实现无关紧要,您可以在所有方法/属性中抛出NotImplementedException.它被放置在单独的便携式类库中.
然后想象一下这个结构的用法:
var token = new Token("111"); var kvp = new KeyValuePair<String,Token>("aaa",token); var val = kvp.Value.Value; var t = val.GetType(); // XXX
这段代码几乎无处不在:
>在桌面应用程序/ Windows服务中(尚未尝试’metro’应用程序)
>在任何模式下的WinPhone 8.1模拟器上(发布,调试,有或没有调试器)
>在调试模式下,在真正的WinPhone 8.1设备上(在Lumia 625上试过)
但是当我在RELEASE模式下在真正的WP 8.1设备(Lumia 625,最新更新)上运行此代码时,我在第XXX行获得了ExecutionENGIneException异常,并显示消息未知模块中出现未处理的类型为“System.ExecutionENGIneException”的异常.此异常无法捕获,并且不包含任何详细信息 – 应用程序只是崩溃.
这是一个错误吗?或者WinPhone的已知限制?为什么它适用于模拟器?所有这些奇怪的“条件”都很重要:
>令牌必须是结构,而不是类
>它必须实现IDictionary< K,V>,而不是任何其他接口(试过IList< Token>,ICollection)
>它必须放在单独的便携式类库中.如果我在WP 8.1项目中移动它 – 它工作正常
>令牌实例必须放在KeyValuePair< K,V>内.如果你只做token.Value.GetType() – 它工作正常
public struct Token : IDictionary<String,Token> { /* IDictionary<String,Token> implementation is here */ } public static class Test { //[MethodImpl(MethodImplOptions.NoOptimization)] public static void Method() { var Dict = new Dictionary<String,Token> { { "qwe",new Token() } }; var arr = Dict.ToArray(); // XXX } }
IDictionary< String,Token>的实现无关紧要,例外情况发生在第XXX行.它们(令牌定义和用法)可以位于一个程序集中.
我还注意到将MethodImpl(MethodImplOptions.NoOptimization)属性添加到使用Token的方法中可以解决问题,因此即使考虑到我不是.NET大师,我也99%确定它是编译器中的错误(C# ARM,MDIL,NGEN,无论如何都与优化有关.
以上是大佬教程为你收集整理的Windows Phone 8.1 C#app:仅在发布模式下的真实设备上发生严重崩溃(ExecutionEngineException)全部内容,希望文章能够帮你解决Windows Phone 8.1 C#app:仅在发布模式下的真实设备上发生严重崩溃(ExecutionEngineException)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。