XAML无法在本地命名空间中找到引用

bas*_*d99 9 microsoft-metro windows-8 visual-studio-2012

我在Win8(均为RC)上使用VS2012在C++中创建了一个新的Metro Split应用程序.所有东西都是编译和开箱即用的.然后我改变了,并将生成的命名空间更改为我自己的命名空间.经过一些考验和磨难之后,我得到了所有编译而没有任何警告,错误和消息.应用程序(因为它在项目模板中)运行正常.

但是,如果我尝试编辑生成的xaml文件(ItemsPage.xaml或SplitPage.xaml),我会在第一行得到"标记错误":

名称"LayoutAwarePage"在命名空间"using using:ABProduct.Client.Common"中不存在.

该类的定义是:

namespace A{ namespace B { namespace Product { namespace Client { namespace Common
Run Code Online (Sandbox Code Playgroud)

代码编译好,运行正常.这只发生在设计模式中.

更新:我添加了一个新的xaml文件和(在再次修复名称空间后)一切正常.

如果需要任何其他信息,请告诉我.

Jam*_*lis 6

项目生成的WinMD文件的名称必须是定义公共WinRT类型的名称空间的一些前缀.鉴于您的类型位于A.B.Product.Client.Common命名空间中,WinMD文件必须具有以下名称之一:

A.winmd
A.B.winmd
A.B.Product.winmd
A.B.Product.Client.winmd
A.B.Product.Client.Common.winmd
Run Code Online (Sandbox Code Playgroud)

还必须在WinMD文件中定义公共类型,其中包含与命名空间匹配的最长前缀.因此,如果您同时拥有A.winmdABwinmd,则A.B.MyClass必须在ABwinmd中定义类型.

那么,为什么你的代码在运行时而不是在设计器中工作?公共类型的命名规则仅适用于Windows运行时组件(对于C++,DLL文件)中定义的类型,而不适用于应用程序(EXE).

但是,为了能够实例化用户定义的类型(包括LayoutAwarePage),设计器会将项目的EXE作为DLL加载,因此必须遵循命名规则.