2017-03-31 17 views
1

私はXamarin Project UWPを持っています。 Newtonsoft.Jsonとjson形式のデータを解析する必要があります.Nottonsoft.Json.JsonConvert.DeserializeObject()メソッドをConverterで使用します。 CustomCreationConverterとReadJson()メソッドを実装します。 最適化後のリリースでは動作しません。また、次のようなエラーがあります。 "ローカル変数または" reader "引数がこの実行ポイントで利用できないため、値を取得できません。最適化中に破棄された可能性があります。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ネイティブツールチェーンを使用してコンパイルされます。 .NETネイティブコンパイラはいくつかの最適化を行います(たとえば、どこでも参照されていないクラス、フィールドなどを削除して静的コードを生成するなど)。Reflectionは.NETの動的機能を使用します。したがって、System.Reflection.MissingMetadataExceptionを取り除くには、Runtime Directivesと書かなければならないでしょう。

.NETブログでこの問題について5つのブログ記事の優れたシリーズもあります:

  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ネイティブまたはリンカーを使用すると、アプリケーションのサイズが小さくなり、速くなります。しかし、開発者にこれらの問題を知らせ、リリースモードでも自分のアプリをテストするように指示する必要があります。 –

関連する問題