使用.Net native構建UWP應用程序時出現MissingMetadataException

.net-native entity-framework-core linq visual-studio-2015 win-universal-app

我有這個UWP應用程序,它使用一個項目(UWP類庫),它本身使用EF7和SQLite。

我嘗試使用.Net本機工具鏈在發布模式下構建應用程序,構建成功完成(經過很長時間後,盡可能多地佔用內存),但應用程序在離開啟動畫面後崩潰。

在對SO進行了一些建議之後,我嘗試了.Net本機的調試模式,構建就像在發布模式下一樣,但是在輸出窗口上出現了很多錯誤,它與這個UWP - .NET Native工具的情況相同鏈編譯錯誤

我跟著@Matt Whilden的建議,我擺脫了那些錯誤,然後再次嘗試。

這次我遇到了這個著名的MissingMetadataException

在此處輸入圖像描述

輸出窗口顯示:

Exception thrown: 'System.AggregateException' in System.Private.Threading.dll
Exception thrown: 'System.ArgumentException' in System.Linq.Expressions.dll
Exception thrown: 'System.ArgumentException' in System.Linq.Expressions.dll
Exception thrown: 'System.ArgumentException' in System.Linq.Expressions.dll
The thread 0x2a30 has exited with code 0 (0x0).
Exception thrown: 'System.Reflection.MissingMetadataException' in System.Private.Reflection.Core.dll
Additional information: 'Microsoft.Extensions.Caching.Memory.MemoryCacheOptions' is missing

元數據。有關詳細信息,請訪問http://go.microsoft.com/fwlink/?LinkID=392859

我嘗試在執行期間跟踪我的代碼,我發現它是由我的DbContext首次調用DbSet表引起的

public long GetLastTimeStamp()
{
      //-----> Here is the line causing the error
      var sortedArticles = DbContext.Articles.OrderByDescending(article => article.ArticlePubDate).ToList();

      if (sortedArticles != null && sortedArticles.Count != 0)
      {
           DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local);

           TimeSpan elapsedTime = sortedArticles.First().ArticlePubDate - epoch;
           return (long)elapsedTime.TotalSeconds;
      }
      else
      {
          return 0;
      }
}

上面的這個方法在Async方法中調用,只是為了知道。

我拼命想通過這樣做來調用.ToList():

var sortedArticles = DbContext.Articles.ToList().OrderByDescending(article => article.ArticlePubDate).ToList();

但仍然得到相同的錯誤。

這真是令人沮喪,我不知道如何解決這個問題,不知道我應該怎樣以及如何更改Default.rd.xml ,任何人都可以幫忙告訴我如何正確實現這個構建?

一般承認的答案

請嘗試在Default.rd.xml中添加類型“Microsoft.Extensions.Caching.Memory.MemoryCacheOptions”(已存在於您的項目中)。

比照https://blogs.msdn.microsoft.com/dotnet/2014/05/21/net-native-deep-dive-help-i-hit-a-missingmetadataexception/

例如:

<?xml version="1.0" encoding="utf-8"?>
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
   <Application>
      <Type Name="Microsoft.Extensions.Caching.Memory.MemoryCacheOptions" Dynamic="Required All" />
   </Application>
</Directives> 


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow