XmlnsDefinition似乎不起作用

Bas*_*Bas 9 .net xaml xml-namespaces

我有一个包含两个项目的解决方案:名为"MyTest.TestApplication"的WPF应用程序和名为"MyTest.ClassLibrary"的类库,以及相应的默认名称空间.MyTest.TestApplication引用了MyTest.ClassLibrary.MyTest.ClassLibrary包含一个名为MyTest.ClassLibrary.TestClass的类.我想将此类的实例添加到应用程序的资源中,但使用URL作为Xml命名空间值.

所以,我打开MyTest.ClassLibrary.AssemblyInfo.cs,添加一个

using System.Windows.Markup
Run Code Online (Sandbox Code Playgroud)

指令,然后在最后我添加行

[assembly: XmlnsDefinition("http://schemas.test.com/test", "MyTest.ClassLibrary")]
Run Code Online (Sandbox Code Playgroud)

我构建项目,转到MyTest.TestApplication.App.Xaml,然后向Application元素添加名称空间定义.一旦我输入xmlns:t =",我就会得到一个intellisense的程序集名称和uris列表,但不是http://schemas.test.com/test.如果我还是添加命名空间定义,就像这样:

xmlns:t="http://schemas.test.com/test"
Run Code Online (Sandbox Code Playgroud)

并将以下内容添加到Resources元素:

<t:TestClass x:Key="myTest" />
Run Code Online (Sandbox Code Playgroud)

然后该资源没有被创建,并且Xaml编辑器抱怨名称空间http://schemas.test.com/test中不存在类TestClass .

令人沮丧的是,我添加了一个名为WpfCustomControlLibrary1的默认WPF自定义控件库,添加了该行

[assembly: XmlnsDefinition("bluh", "WpfCustomControlLibrary1")]
Run Code Online (Sandbox Code Playgroud)

到WpfCustomControlLibrary1.AssemblyInfo.cs,构建项目,在MyTest.TestApplication中引用它,并且一旦我开始输入xmlns:b ="在App.xam中,intellisense会在顶部显示名称为"bluh"的命名空间列表.

我尝试添加各种程序集和使用指令到MyTest.ClassLibrary,但我不能让Visual Studio通过架构URL找到我的程序集.令人惊讶的是,如果我将命名空间设置为程序集名称,它确实有效,如下所示:

xmlns:t="clr-namespace:MyTest.ClassLibrary;assembly=MyTest.ClassLibrary"
Run Code Online (Sandbox Code Playgroud)

那么......这里发生了什么?

编辑:令人沮丧的是,我通过简单地从WPF应用程序中删除引用,然后重新添加它,经过两个小时的搜索后终于开始工作了.啊.我猜这是某种VS2012错误?

XAM*_*eLi 0

既然“bluh”有效,请尝试:

[assembly: XmlnsDefinition(@"http://schemas.test.com/test", "MyTest.ClassLibrary")]
Run Code Online (Sandbox Code Playgroud)

也许斜杠会让编译器崩溃。