我有一段代码获取JSON响应并检查是否存在.error字段
extension UIImage {
func getPixelColor(pos: CGPoint) -> UIColor {
let pixelData = self.cgImage!.dataProvider!.data
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x) ) * 4
let r = CGFloat( data[pixelInfo] ) / CGFloat(255.0)
let g = CGFloat( data[pixelInfo+1] ) / CGFloat(255.0)
let b = CGFloat( data[pixelInfo+2] ) / CGFloat(255.0)
let a = CGFloat( data[pixelInfo+3] ) / CGFloat(255.0)
return UIColor(red: r, green: g, blue: b, alpha: a)
}
}
当它没有使用.NET Native工具链编译时成功运行,但在使用它生成时会产生错误(在jsonResponse.error上)。
这是什么原因?与本机代码有任何其他类似的不兼容行为?
编辑:事实证明,即使JSON中存在“错误”键,我们仍然会收到错误。例外是:
dynamic jsonResponse = JsonConvert.DeserializeObject(responseString);
if (jsonResponse.error != null) { error = jsonResponse.error; }
else
{
success = true;
}
答案 0 :(得分:3)
为动态关键字提供动力的子系统具有各种不能在.NET Native上运行良好的极端情况。这个特殊问题已于2月份向我们报告,您可以在CoreFX GitHub here上看到一些讨论。
一般的想法是,动态关键字会导致大量机制漫游API并且框架的某些部分没有适当的暗示说出来#34;这不是你的事情。需要思考。&#34;因为我们的编译器分析说你在运行时不需要这个类型,但是这个特定的组件确实如此,我们最终会抛出这个异常。
异常中的链接试图帮助构建运行时指令(将其视为.NET Native编译器的提示),以便我们知道您在运行时需要类型信息。对于这种特殊情况,它看起来像:
<Type Name="Microsoft.CSharp.RuntimeBinder.CSharpGetMemberBinder" Dynamic="Required All"/>
如果将其添加到文件Properties \ Default.rd.xml中,我希望此错误消失。您可能会遇到此类型的其他错误,但它们应该能够以类似的方式解决。
我们已经在我们这边记录了一个错误,以便在将来某个时候解决这个问题,但在此期间您需要这个解决方法。