10

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

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

using System.Windows.Markup

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

[assembly: XmlnsDefinition("http://schemas.test.com/test", "MyTest.ClassLibrary")]

我构建项目,转到 MyTest.TestApplication.App.Xaml,然后将命名空间定义添加到 Application 元素。只要我输入 xmlns:t=",我就会得到一个程序集名称和 uri 的智能感知列表,但不是http://schemas.test.com/test。如果我仍然添加命名空间定义,如下所示:

xmlns:t="http://schemas.test.com/test"

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

<t:TestClass x:Key="myTest" />

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

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

[assembly: XmlnsDefinition("bluh", "WpfCustomControlLibrary1")]

到 WpfCustomControlLibrary1.AssemblyInfo.cs,构建项目,在 MyTest.TestApplication 中引用它,当我开始在 App.xam 中输入 xmlns:b=" 时,intellisense 会在最顶部显示带有“bluh”的命名空间列表.

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

xmlns:t="clr-namespace:MyTest.ClassLibrary;assembly=MyTest.ClassLibrary"

所以..这里发生了什么?

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

4

2 回答 2

1

我认为“ClassLibrary”作为程序集名称存在问题。刚刚花了一些时间,因为 Resharper 回来了

System.TypeLoadException : Could not load type 'BMN.Utils.Logging.ConfigLogger' 
from assembly 'ClassLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.

将程序集名称更改为 BMN.Utils.Logging.UnitTests 解决了这个问题。

于 2014-09-22T13:50:30.667 回答
0

由于“bluh”有效,请尝试:

[assembly: XmlnsDefinition(@"http://schemas.test.com/test", "MyTest.ClassLibrary")]

也许斜杠正在使编译器关闭。

于 2013-11-12T15:28:00.807 回答