我有一段代码可以获取 JSON 响应并检查是否有 .error 字段
dynamic jsonResponse = JsonConvert.DeserializeObject(responseString);
if (jsonResponse.error != null) { error = jsonResponse.error; }
else
{
success = true;
}
当它没有使用 .NET Native 工具链编译时,它会成功运行,但在使用它构建时会产生错误(在 jsonResponse.error 上)。
这是什么原因呢?还有其他类似的与本机代码不兼容的行为吗?
编辑:事实证明,即使 JSON 中存在“error”键,我们仍然会收到错误。例外情况是:
System.Reflection.MissingMetadataException: ''Microsoft.CSharp.RuntimeBinder.CSharpGetMemberBinder' is missing metadata. For more information, please visit http://go.microsoft.com/fwlink/?LinkID=392859'
支持动态关键字的子系统有各种极端情况,这些情况在 .NET Native 上运行得不太好。这个特殊问题已于 2 月份向我们报告,您可以在 CoreFX GitHub 上看到一些讨论here https://github.com/dotnet/corefx/issues/16022.
一般的想法是,dynamic 关键字会导致大量的机制在 API 中徘徊,并且框架的某些部分没有适当的暗示来说明“这不是您需要反思的事情”。因为我们的编译器分析表明您在运行时不需要这种类型,但这个特定组件需要,所以我们最终会抛出此异常。
异常中的链接试图帮助构建运行时指令(将其视为对 .NET Native 编译器的提示),以便我们知道您在运行时需要类型信息。对于这个特殊情况,它看起来像:
<Type Name="Microsoft.CSharp.RuntimeBinder.CSharpGetMemberBinder" Dynamic="Required All"/>
如果将其添加到文件 Properties\Default.rd.xml 我希望此错误消失。您可能会遇到此类其他错误,但应该能够以类似的方式解决它们。
我们已经记录了一个错误,以便在将来的某个时候解决这个问题,但同时您需要这个解决方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)