2017-03-31 50 views
1

我有Xamarin Project UWP。我需要使用Newtonsoft.Json解析json格式的數據,並使用Converter提供Newtonsoft.Json.JsonConvert.DeserializeObject()方法。我實現了CustomCreationConverter和ReadJson方法()。 在optimasation之後發佈它不起作用。我有sush錯誤: 「本地變量或」讀者「參數的值無法獲得,因爲它在此執行點不可用,它可能已在優化期間被丟棄。Newtonsoft.Json.JsonReader」Xamarin項目中的Newtonsoft.Json中的System.Reflection.MissingMetadataException

enter image description here

我想嘗試在rd.xml增加運行directivesin,但不知道我應該需要什麼補充。

+0

您提到的錯誤只能在調試器中看到,而且很可能與問題無關。它究竟如何不起作用? – Evk

+0

錯誤是System.Reflection.MissingMetadataException。它在ReadJson()方法上失敗。 – Naduxa

回答

1

UWP應用程序在發佈模式下編譯時默認使用.NET Native工具鏈進行編譯。 .NET Native編譯器會進行一些優化(例如刪除任何未在任何地方引用的類,字段等)並生成靜態代碼,但是Reflection使用.NET的動態特性。所以爲了擺脫System.Reflection.MissingMetadataException,你必須寫一些Runtime Directives

也有關於.NET博客這個問題一個很好的五大系列博客文章:

  1. .NET Native Deep Dive: Dynamic Features in Static Code

  2. .NET Native Deep Dive: Help! I Hit a MissingMetadataException!

  3. .NET Native Deep Dive: Help! I Didn’t Hit a MissingMetadataException!

  4. .NET Native Deep Dive: Making Your Library Great

  5. .NET Native Deep Dive: Optimizing with Runtime Directives

我建議閱讀所有的人,因爲它可以幫助您瞭解正在發生什麼,以及如何預防經歷今後發生類似的問題。

+1

到目前爲止,這個問題最可怕的部分是Debug構建版本和Release版本行爲有所不同。這降低了我的信心,即我們發佈的內容實際上將起作用,因爲它基本上是與我們開發和測試的應用程序不同的應用程序。這是任何標準的巨大禁止,微軟決策者驚訝地發現這是可以接受的。 – Lavamantis

+0

這同樣適用於Android和iOS,鏈接器刪除了一些不必要的代碼,如這裏。使用.NET Native或鏈接器使得應用程序的體積更小,速度更快。然而,他們應該讓開發人員瞭解這些問題,並告訴他們即使在發佈模式下也應該測試他們的應用程序 –

相關問題