【问题标题】:WPF Namespace confusionWPF 命名空间混淆
【发布时间】:2012-09-06 06:31:18
【问题描述】:

我有两个需要从 WPF 窗口访问的 clrnamespace,它们的名称有冲突

xmlns:ns1="clr-namespace:Namespace1.Namespace2.Namespace3.Namespace4;assembly="
xmlns:ns2="clr-namespace:Namespace2;assembly=Namespace2"

当我去使用 Namespace2 中的任何东西时,例如

<Canvas>
  <ns2:MyControl ... />
</Canvas>

我得到以下编译错误

The type or namespace name 'MyControl' does not exist in the namespace 'Namespace1.Namespace2' (are you missing an assembly reference?)

我知道命名空间的命名不是很好,但是更改前者需要远离系统其他地方使用的结构,而更改后者需要更改系统的其他部分。

有人对解决这个问题有什么建议吗?

【问题讨论】:

  • xmlns:ns1 行中,您实际上是省略了程序集的名称,还是只是这里的错字?
  • 我实际上省略了名字。它在同一个程序集中。我知道我可以忽略它,但我觉得把它留在里面更明确。
  • @jamesj:根据this discussion,甚至不总是可以忽略它。
  • 能否请您显示实际代码。上面有错误,可能是输入错误,也可能是确切的问题。
  • @jamesj:不过,我想知道xmlns:ns2 是否在命名空间名称前没有clr-namespace: 的情况下实际声明。

标签: c# wpf xaml namespaces


【解决方案1】:

如果您找不到使用“xmlns:”的解决方案,那么您可以考虑使用XmlnsDefinition 将多个 clrnamespaces 映射到由 URI 标识的 XML 命名空间,然后使用该 URI 引用一组 clr 命名空间.

XmlnsDefinition 放入每个包含要分组的CLR 类型的程序集的AssemblyInfo.cs

[XmlnsDefinition("http://www.mycompany.com/appname", "Namespace1.Namespace2.Namespace3.Namespace4")]

[XmlnsDefinition("http://www.mycompany.com/appname", "Namespace2")]

然后在你的 XAML 中你可以这样做:

xmlns:ns="http://www.mycompany.com/appname"

然后它应该允许您使用公共前缀访问类型。


另一方面,也许您忘记在项目中添加对 Namespace2 DLL 的引用?

如果以上都不起作用,您能否再描述一下您的项目结构,例如您能显示 MyControl 代码吗...它所在的位置...并显示代码的命名空间语句。

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 2014-04-14
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多