构建API结构时,模块的成员范围限定为错误的命名空间

时间:2015-11-17 09:05:09

标签: .net vb.net dll structure hierarchy

我正在使用 Visual Studio 2013 ,尝试开发具有此成员结构的自己的API:

enter image description here

问题是Extensions模块的成员在Elektro.Xml.Extensions中公开,但在Elektro.Xml中公开:

enter image description here enter image description here

为什么会这样?以及如何解决它?。

Extensions.vb

Public Module Extensions

#Region " Public Extension Methods "

#Region " Type Conversion "

    <Extension>
    Public Function ToXDocument(ByVal sender As XmlDocument) As XDocument
       ...
    End Function

#End Region

#End Region

End Module

XmlUtil.vb

Public NotInheritable Class XmlUtil

#Region " Public Methods "

    Public Shared Function XmlBeautifier(...) As String
        ...
    End Function

#End Region

End Class

2 个答案:

答案 0 :(得分:2)

这是标准的,而不是&#34;修复&#34;。有关详细信息,请参阅Visual Basic Language Specification的第7.7节:

  

标准模块的成员具有两个完全限定名称,一个没有标准模块名称,另一个具有标准模块名称。命名空间中的多个标准模块可以定义具有特定名称的成员;对这两个模块之外的名称的无限制引用是不明确的。例如:

Namespace N1
    Module M1
        Sub S1()
        End Sub

        Sub S2()
        End Sub
    End Module

    Module M2
        Sub S2()
        End Sub
    End Module

    Module M3
        Sub Main()
            S1()       ' Valid: Calls N1.M1.S1.
            N1.S1()    ' Valid: Calls N1.M1.S1.
            S2()       ' Not valid: ambiguous.
            N1.S2()    ' Not valid: ambiguous.
            N1.M2.S2() ' Valid: Calls N1.M2.S2.
        End Sub
    End Module
End Namespace

答案 1 :(得分:0)

检查github中的随机第三方API(我通常会发现新技术并获取知识)我发现要解决这个问题,开发人员可以将HideModuleName属性设置为模块和VOILÀ