3

Windows Phone 8 C#プロジェクト(MyApp)、WP7.1から移行。ソリューションにネイティブのWindowsランタイムコンポーネントライブラリ(AppLib)を追加し、参照を作成しました。その中には公開されたrefクラス(MyClass)があります。OnLoaded(メインのXAMLページの)C#コードにそれへの参照があります。すべてがコンパイルされます。つまり、コンポーネントのメタデータが生成されます。

実行しようとすると、プロジェクトは例外で失敗するかTypeLoadException、次のメッセージで入力します。

タイプ名または名前空間がメタデータファイルに見つかりませんでした。(HRESULTからの例外:0x8000000F)

AppLib.DLLとAppLib.winmdの両方がXAPにあります。winmdには、タイプに関する情報が含まれており、適切な名前空間にも含まれています。他に何を確認する必要がありますか?

例外として、AppLib.dllはデバッガーのモジュールウィンドウに表示されません。なんらかの理由でDLLの読み込みに失敗したようです。

任意の名前空間で新しいクラスを試してみました-同じ問題です。問題はクラスレベルではなくDLLレベルにあるようです。

4

1 に答える 1

4

WinMD ファイルの名前は、パブリック型およびアクティブ化可能な型が宣言されている名前空間の名前のプレフィックスである必要があります。たとえば、WinMD の名前がAppLib.winmdの場合、MyClass型は名前空間AppLibまたはその名前空間内にネストされた他の名前空間で定義する必要がありますAppLib::Something

また、「最も一致する」WinMD で宣言する必要があるため、型に名前が付けられていて、パッケージにA.winmdABwinmdA.B.MyClassの両方がある場合は、型をABwinmdで定義する必要があります。

Windows ランタイムは、型の名前を使用して、どの WinMD ファイルがその型を定義しているかを判断します。「XAML はローカル名前空間で参照を見つけることができません」に対する私の回答も参照してください。

于 2012-11-05T21:38:09.727 に答える