2015-09-08 12 views
10

Sto provando a far funzionare la mia app (per Windows 10) su nativo .NET..net-native enum.GetValues ​​trouble

Mi sono bloccato con il seguente problema: Enum.GetValues non riesce in fase di esecuzione con i metadati mancante. Sono riuscito a semplificare il test per questo problema (nella realtà il mio codice sembra diverso). In libreria portabile che ho:

public enum enumValues 
{   
    A1,  
    B1,   
    C1, 
} 

public class fff 
{ 
    public static object GetClass2Value() 
    { 
     return enumValues.B1; 
    } 
} 

Nella mia app universale di Windows che io chiamo il seguente codice:

Array aaa = Enum.GetValues(fff.GetClass2Value().GetType()); 

ricevo la seguente eccezione:

Ulteriori informazioni: 'enumlibportable.enumValues [] 'mancano i metadati.

Il problema è che non ho idea di cosa aggiungere a Default.rd.xml. Ho provato ad aggiungere diverse stringhe rd (sottotipo enum, classe enumValues, enumValues ​​[] ecc.) Usando lo strumento microsoft http://go.microsoft.com/fwlink/?LinkID=392859, ma non ho avuto fortuna.

UPDATE: so che il seguente codice funzionerà per il mio testcase Enum.GetValues(typeof(enumValue)), ma non posso utilizzare nel mio progetto reale dal momento che non si conosce il tipo esatto enum nel mio progetto reale.

+0

Suppongo il codice vero e proprio è un caso di sottoclassi/interfaccia? Puoi approfondire un po 'questo? – Nyerguds

+0

Beh, è ​​troppo lungo per spiegare il mio vero progetto, ecco perché passo molto tempo a trovare la causa del problema e preparare il campione. Ho descritto abbastanza bene il mio problema. Il problema è che l'ottimizzazione cancella i metadati enum poiché non viene fatto riferimento nell'applicazione in modo esplicito. Devo dire al compilatore di non cancellare questi metadati. –

+0

Non puoi rendere generico il tipo di reso? – Herdo

risposta

0

Può essere che si può provare questo potrebbe aiutare

Array aaa = (enumValues) Enum.Parse(typeof(enumValues), fff.GetClass2Value()); 
+0

Nel mio vero progetto non conosco il tipo esatto e potrebbero essere diversi tipi di enumerazione, purtroppo non posso usare questo approccio. E questa non è una soluzione adeguata, penso. Se aggiungo qualche enum nuovo dovrò aggiungere questa soluzione alternativa per ogni enum. Questo dovrebbe essere fatto in qualche modo attraverso le definizioni di runtime. –

5

Non ha senso per me, ma la seguente stringa RD lavorato per la mia TestCase:

<Type Name="enumlibportable.enumValues[]" Browse="Required All"/> 
+0

Una cosa che è utile è usare la direttiva eccessivamente generosa: . Questo farà sì che tutti i tipi nella tua applicazione abbiano abbastanza informazioni in modo che il riflesso di questo tipo funzioni. Funziona così bene, è incluso nel modello UWP vuoto in Proprietà \ Default.rd.xml! HTH –

+0

Ho trovato questa riga nel mio progetto, era lì e non funziona nel mio caso. Sospetto che si tratti di un bug in .NET nativo. –

Problemi correlati