在Windows Phone中更改C ++组件的命名空间名称会导致异常

时间:2013-01-14 03:19:14

标签: windows-phone-8 c++-cx

我在WP8应用程序中有一个C ++运行时组件,如果我更改命名空间名称,每当我尝试在该命名空间中实例化一个类时,我都会抛出一个“TargetInvocation”异常。

例如,如果我创建默认的C ++ Windows运行时组件,标题如下所示:

#pragma once

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

如果我在.h和.cpp中将CppComponent1更改为CppComponent2,然后尝试在我的C#代码中实例化WindowsPhoneRuntimeComponent对象,则会收到以下错误:< / p>

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应用程序中更改本机模块的命名空间?谢谢!

1 个答案:

答案 0 :(得分:6)

声明组件的Windows元数据(WinMD)文件的名称必须是声明公共类型的命名空间的前缀。 (我提供了对命名空间规则in an answer to another question稍微详细的解释。)

如果将命名空间从CppComponent1重命名为CppComponent2,则还需要将构建生成的WinMD文件从CppComponent1.winmd重命名为CppComponent2.winmd