2013-01-14 18 views
3

我在WP8應用程序中有一個C++運行時組件,如果更改名稱空間名稱,每次嘗試實例化類時都會收到「TargetInvocation」異常命名空間。在Windows Phone中更改C++組件的名稱空間名稱會導致異常

舉個例子,如果我創建默認的C++ Windows運行時組件,標題是這樣的:

#pragma once 

namespace CppComponent1 
{ 
    public ref class WindowsPhoneRuntimeComponent sealed 
    { 
    public: 
     WindowsPhoneRuntimeComponent(); 
    }; 
} 

如果我在.H和在.cpp改變CppComponent1CppComponent2,然後嘗試在我的C#代碼實例化一個對象WindowsPhoneRuntimeComponent,我得到以下錯誤:

A first chance exception of type 'System.TypeLoadException' occurred in Unknown Module. 
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.ni.dll 
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in Microsoft.Phone.ni.dll 

如何更改本機模塊的名稱空間的WP8應用程序?謝謝!

回答

6

聲明組件的Windows元數據(WinMD)文件的名稱必須是聲明公共類型的名稱空間的前綴。 (我公司提供的命名空間規則in an answer to another question稍微更詳細的解釋。)

如果從CppComponent1命名空間重命名爲CppComponent2,還需要重命名由構建從生產到CppComponent1.winmdCppComponent2.winmd文件WinMD。

+1

我無法找到設置來更改'.winmd'文件的名稱。事實上,我根本找不到「.winmd」文件。我是否需要進入並手動編輯文件,或者有沒有辦法在Visual Studio GUI中進行設置? – staticfloat

+1

在項目屬性中,在鏈接器 - > Windows元數據下,請參閱Windows元數據文件屬性。它默認爲'$(OutDir)$(RootNamespace).winmd'。我看不到'$(RootNamespace)'在哪裏定義;它可能會在目標中定義。如果我沒有記錯,它默認爲('$(ProjectName)')的名稱。 –

+2

太棒了!你可以通過點擊你的C++項目來改變'$(RootNamespace)'宏,點擊ALT-ENTER打開「屬性」窗口(與右鍵單擊項目並單擊「屬性」不同的「屬性」)並更改「Root Namespace」的值!您可能需要使用此信息更新您的答案,以便其他搜索此人的人可以找到它。 – staticfloat

相關問題