Windows Phone 8.1 C#app:仅在发布模式下的真实设备上发生严重
想象一下以下结构类型:
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’应用程序) 但是当我在RELEASE模式下在真正的WP 8.1设备(Lumia 625,最新更新)上运行此代码时,我在第XXX行获得了ExecutionEngineException异常,并显示消息未知模块中出现未处理的类型为“System.ExecutionEngineException”的异常.此异常无法捕获,并且不包含任何详细信息 – 应用程序只是崩溃. 这是一个错误吗?或者WinPhone的已知限制?为什么它适用于模拟器?所有这些奇怪的“条件”都很重要: >令牌必须是结构,而不是类 我创建了VS 2013解决方案来重现这种情况.它可以下载here. 解决方法
我在几个月前在Microsoft Connect创建了
error report并且一直在等待响应但是看起来微软的某些人并不想修复这个bug.
顺便说一句,我创建了一个更简单的repro: 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-cluster – 如何使群集感知的Windows服务具有高可用
- 2019年6月最新win7旗舰版/专业版激活密钥和激活方法
- 解决 安装或卸载软件时报错Error 1001 的问题
- 无法登录SKYPE SDK示例
- Windows 10 Powershell Invoke-WebRequest“Windows安全警告
- 在Windows Server 2008上安装Docker
- windows-server-2008 – 允许人力资源部门将用户输入Active
- windows server 2008 r2 环境下,实现域名和IP同时都能访问
- windows – 使用java web start实现自动更新桌面应用程序时
- 如何在Windows和Unix / Linux格式之间转换文本文件中的换行