2012-11-05 36 views
3

Windows Phone 8 C#項目(MyApp),從WP7.1遷移而來。我已經將本地Windows運行時組件庫(AppLib)添加到解決方案中,並創建了一個參考。其中有一個公開封閉的參考類(MyClass)。在C#代碼中有一個引用(在主XAML頁面的OnLoaded中)。整個事情編譯 - 意味着正在生成組件的元數據。WP8:無法使用本地組件

當我試圖運行,該項目失敗,出現異常或類型TypeLoadException以下消息:

類型名或命名空間中的元數據文件沒有被發現。 (來自HRESULT的例外:0x8000000F)

在XAP中都可以找到AppLib.DLL和AppLib.winmd。 winmd包含有關類型的信息,並且也包含在正確的命名空間中。我還應該檢查什麼?

在例外時,AppLib.dll未在調試器的模塊窗口中列出。就好像DLL加載由於某種原因而失敗。

我試過在任意命名空間中使用全新的類 - 同樣的問題。看起來問題出在DLL層面,而不是課堂層面。

+0

在什麼名稱空間是您的類型('MyClass')定義? –

+0

與應用程序名稱相同 - 「MyApp」。 –

回答

4

WinMD文件的名稱必須是聲明任何公共和可激活類型的名稱空間名稱的前綴。例如,如果您的WinMD名爲AppLib.winmd,則您的MyClass類型必須在名稱空間AppLib或嵌套在該名稱空間內的其他名稱空間中定義,例如AppLib::Something

還必須在「最佳匹配」 WinMD並宣稱,因此,如果您的類型被命名爲A.B.MyClass你有兩個A.winmdABwinmd在你的包,類型必須在AB定義winmd

Windows運行時使用該類型的名稱來確定哪個WinMD文件定義類型。另請參閱我的回答"XAML cannot find reference in local namespace."

+0

將庫的名稱空間更改爲AppLib,現在我得到一個不同的異常'BadImageFormatException'。但是這將是一個不同的問題:) –

+0

你可能試圖在ARM上加載x86組件,或者在x86上加載ARM組件。 –

+0

它在仿真器上。配置管理器中的「平臺」字符串讀取應用程序中的「x86」和DLL中的「Win32」,但對於香草C#/ C++項目模板也是如此。 –