【问题标题】:WPF External assemblies name spacesWPF 外部程序集名称空间
【发布时间】:2012-11-02 06:32:54
【问题描述】:

我想知道如何在 XAML 中引用第三方项目的程序集。

有时我会看到

xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"

有时我会看到

xmlns:tn="clr-namespace:WPFTaskbarNotifier;assembly=WPFTaskbarNotifier"

URL 样式和clr-namespace 样式之间有什么区别以及分别使用的时间?

【问题讨论】:

    标签: .net wpf assemblies


    【解决方案1】:

    XAML 加载器必须知道 XAML 树中的元素引用了哪些程序集。它使用 XML 命名空间来查找此值。

    clr-namespace 风格的命名空间经过特殊格式化,XAML 加载器可以定位程序集并加载其中定义的类型。您可以使用此命名空间格式引用任何程序集。当在同一个程序集中引用类型时,您必须使用这种格式。

    URL 样式是一种更传统的 XML 命名空间样式。 URL 是supposed to point to a location where you can get information about the namespace,例如 XSD 模式等。但通常它们只是 404'd。您可以通过使用 XmlnsDefinitionAttribute 定义来允许引用程序集中类型的调用者使用这种命名空间样式。

    只需在您的 AssemblyInfo.cs 文件中为每个命名空间段放置一个:

    [assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp")]
    [assembly: XmlnsDefinition("http://www.Herp.com/2012/", "Herp.Derp")]
    

    【讨论】:

      【解决方案2】:

      两者没有区别;它们都指向同一个程序集。

      WPF 允许开发人员在程序集级别使用XmlnsDefinition 属性注册自定义命名空间。这些命名空间随后可供引用已编译程序集的其他项目使用。您还可以使用此属性将多个 CLR 命名空间合并在一起(WPF 本身会这样做),这可以简化生成的 XAML 以及对 XAML 设计器隐藏您的内部项目结构。

      但除了外观上的差异之外,这两个命名空间字符串的含义相同,并且可以互换使用。这里唯一的限制是您不能在定义它们的程序集使用这些自定义命名空间;它们是添加到最终程序集中的元数据的一部分,在此之前编译器无法使用它们。

      【讨论】:

        猜你喜欢
        • 2013-12-18
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 2018-12-26
        • 2016-03-05
        相关资源
        最近更新 更多