2017-04-03 48 views
2

缺少財產我有一段代碼,獲取一個JSON響應,並檢查是否有.error場建設與.NET本地工具鏈導致的錯誤,在動態對象

dynamic jsonResponse = JsonConvert.DeserializeObject(responseString); 
if (jsonResponse.error != null) { error = jsonResponse.error; } 
else 
{ 
    success = true; 
} 

這成功地當它運行沒有使用.NET Native工具鏈進行編譯,但在使用它構建時會產生錯誤(在jsonResponse.error上)。

這是什麼原因?任何其他類似與本機代碼不兼容的行爲?

編輯:事實證明,即使JSON中存在「錯誤」鍵,我們仍然會出現錯誤。例外情況是:

System.Reflection.MissingMetadataException: ''Microsoft.CSharp.RuntimeBinder.CSharpGetMemberBinder' is missing metadata. For more information, please visit http://go.microsoft.com/fwlink/?LinkID=392859' 

回答

3

動態關鍵字的子系統有各種各樣的情況,在.NET本機上運行得不好。這個特定的問題在2月份向我們報告,您可以在CoreFX GitHub here上看到一些討論。

總體思路是動態關鍵字會導致大量機器在API中漫遊,並且框架的某些部分沒有適當的暗示說「這不是您需要反思的事情。 「因爲我們的編譯器分析表明在運行時你不需要這種類型,但是這個特定的組件確實會拋出這個異常。

異常中的鏈接試圖幫助構建運行時指令(將其視爲對.NET Native編譯器的提示),以便我們知道在運行時需要類型信息。對於這種特殊的情況下,它看起來像:

<Type Name="Microsoft.CSharp.RuntimeBinder.CSharpGetMemberBinder" Dynamic="Required All"/> 

如果您添加到該文件屬性\ Default.rd.xml我希望這個錯誤消失。您可能會遇到這種類型的其他錯誤,但它們應該能夠以類似的方式解決。

我們已經記錄了一個錯誤,希望在未來的某個時候解決這個問題,但在此期間您需要使用此解決方法。