Ho questa app UWP che utilizza un progetto (libreria di classi UWP) che utilizza EF7 e SQLite.
Ho provato a creare l'app in modalità Release usando la catena di strumenti nativa .Net, la compilazione completa con successo (dopo molto tempo e dopo aver mangiato quanta più memoria possibile), ma l'applicazione si blocca subito dopo aver lasciato la schermata iniziale.
Dopo aver seguito alcuni consigli su SO ho provato il .Net nativo con la modalità Debug, la compilazione termina proprio come nella modalità Release, ma ottengo molti errori sulla finestra di output ed è lo stesso scenario di questo UWP -. Strumento nativo .NET errore di compilazione della catena
Ho seguito il consiglio di @Matt Whilden e mi sono liberato di quegli errori, poi ho provato di nuovo.
Questa volta sono stato colpito da questa famosa MissingMetadataException
:
La finestra di output mostra questo:
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
metadati. Per ulteriori informazioni, visitare http://go.microsoft.com/fwlink/?LinkID=392859
Ho cercato di seguire il mio codice, durante l'esecuzione e ho scoperto che è causato dalla prima chiamata in assoluto a una tabella DbSet
dal mio DbContext
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;
}
}
Questo metodo sopra è chiamato all'interno di un metodo Async, solo per sapere.
Ho provato, disperatamente, a chiamare .ToList () facendo:
var sortedArticles = DbContext.Articles.ToList().OrderByDescending(article => article.ArticlePubDate).ToList();
Ma ottengono ancora lo stesso errore.
Questo è davvero frustrante, non so come risolvere questo problema, non sono sicuro di cosa e come dovrei cambiare il file Default.rd.xml
, qualcuno può aiutarmi a dirmi come ottenere questa build correttamente?
Prova ad aggiungere il tipo 'Microsoft.Extensions.Caching.Memory.MemoryCacheOptions' in Default.rd.xml (già presente nel tuo progetto).
Per esempio:
<?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>