2015-09-08 10 views
10

私は、.NETネイティブの下で働いて(Windowsの10のために)私のアプリを作るしようとしています。.NETネイティブenum.GetValuesトラブル

私は、次の問題に捕まってしまった:Enum.GetValuesが不足しているメタデータを使用して実行時に失敗しました。私はこの問題のテストケースを単純化することができました(私のコードは違って見えます)。ポータブルなライブラリでは私が持っている:

私のユニバーサルのWindowsアプリで
public enum enumValues 
{   
    A1,  
    B1,   
    C1, 
} 

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

私は、次のコードを呼び出す:

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

私は次の例外受け取る:

追加情報:「をenumlibportable.enumValues [] 'にはメタデータがありません。

問題は、Default.rd.xmlに何を追加するかわからないということです。私はマイクロソフトのツールhttp://go.microsoft.com/fwlink/?LinkID=392859を使用して、異なる番目の文字列(列挙型のサブタイプ、enumValuesクラス、enumValues []など)を追加しようとしましたが、運がなかったしました。

UPDATE: 私は、次のコードは、私のテストケースEnum.GetValues(typeof(enumValue))のために働くことを知っているが、私は私の本当のプロジェクトの正確な列挙型を知らないので、私は私の実際のプロジェクトでそれを使用することはできません。

+0

私は実際のコードを仮定しますサブクラス化/インターフェースの場合ですか?少し詳しく教えていただけますか? – Nyerguds

+0

実際のプロジェクトを説明するには時間がかかりすぎます。そのため、問題の原因を突き止めサンプルを準備するのに多くの時間を費やしています。私は十分に私の問題を説明した。問題は、アプリケーションで明示的に参照されていないため、最適化によって列挙型メタデータが削除されることです。このメタデータを削除しないようにコンパイラに指示する必要があります。 –

+0

戻り値の型を汎用にすることはできませんか? – Herdo

答えて

0

は、あなたが、これはあなたが

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

私の実際のプロジェクトでは、正確な型がわからず、違う列挙型かもしれませんが、残念ながらこの方法を使用することはできません。そして、これは適切な解決策ではない、と私は思う。新しい列挙を追加すると、各列挙に対してこの回避策を追加する必要があります。これは、何らかの形で実行時定義を介して行う必要があります。 <アセンブリ名=「*アプリケーション*」ダイナミック=「必要なすべての」/>:便利です –

5

それは私には意味がありません役立つかもしれない試みることができるかもしれませんが、以下のRD文字列は、私のテストケースのために働い:

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

ことの一つは、過度に寛大なディレクティブを使用することです。これにより、アプリケーションのすべての型に十分な情報が与えられ、この型のリフレクションが機能するようになります。これはとてもうまく動作し、空のUWPテンプレートのProperties \ Default.rd.xmlに含まれています! HTH –

+0

私のプロジェクトでこの行が見つかりました。そこにがあり、私の場合は動作しません。私はこれが.NETネイティブのバグだと思う。 –