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

时间:2012-06-12 21:01:01

标签: windows-8 visual-studio-2012 microsoft-metro

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

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

名称“LayoutAwarePage”在名称空间“using using:A.B.Product.Client.Common”中不存在。

班级的定义是:

namespace A{ namespace B { namespace Product { namespace Client { namespace Common

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

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

如果需要任何其他信息,请与我们联系。

2 个答案:

答案 0 :(得分: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

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

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

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

答案 1 :(得分:3)

我有一个类似的错误,但后来我关闭了VS,删除了.suo,并重新加载了项目,一切正常。