3

を使用してソース コードをコンパイルする場合、 /doccsc.exeオプションを使用して、ソース ファイル内の xml ドキュメント コメントを外部 xml ファイルに保存できます。

私が知りたいのは、コンパイラがコードの非公開メンバーの xml コメントをそのファイルに含める理由です。ソース コードに既にドキュメントがあるので、そのプロジェクトで作業している間、xml ドキュメント ファイルにあるものは何も必要ありません。

また、別のプロジェクトで dll を使用する場合、いずれにせよ非パブリック メンバーを使用することはできません。では、なぜすべてのプライベート メンバーと内部メンバーのドキュメントが含まれているのでしょうか?

また、それを防ぐ方法があれば教えていただきたいです。

4

2 に答える 2

5

文書化されている内部メンバーを理解できます。そうすれば、同じアセンブリ内で記述しているコードの文書を参照する方が簡単な場合があります。(もちろん、InternalsVisibleToは常に存在します。)プライベートメンバーの場合、正当化するのは少し難しいと思います。

Sandcastleを使用してオフラインドキュメントを生成する場合は、パブリックメンバーのみ(および要約部分のみ)を含む新しいXMLファイルを生成するようにSandcastleに依頼できます。SHFBでどのように見えるかをすぐに思い出せませんが、Noda Timeプロジェクトファイルでは、これが関連するセクションであると思います。

  <ComponentConfig id="IntelliSense Component" enabled="True">
    <component id="IntelliSense Component" 
               type="SandcastleBuilder.Components.IntelliSenseComponent" 
               assembly="{@SHFBFolder}SandcastleBuilder.Components.dll">
      <output includeNamespaces="false" namespacesFile="Namespaces" 
              folder="{@OutputFolder}\..\PublicApi" />
    </component>
  </ComponentConfig>
于 2013-02-09T10:05:30.280 に答える
1

これは、xml ドキュメントをフィルター処理するための私の VBScript です。

strInputFile、strOutputFile を入力および出力 XML ドキュメント ファイルに変更します。また、「arrWhiteList = Array ...」行を変更して、ドキュメントが必要なすべてのタイプをリストします。

option explicit

const strInputFile = "C:\Temp\YourModule.XML"
const strOutputFile = "C:\Temp\YourModule.filtered.XML"

Dim arrWhiteList
arrWhiteList = Array( "MyNamespace.Type1", "MyNamespace.Type2", "MyNamespace.Type3" )

Function isNameOk( strName )
    Dim className, i

    for each className in arrWhiteList
        i = InStr(strName, className)
        if i = 3 Then
            isNameOk = True
            exit function
        end if
    Next
    isNameOk = false
end function

Sub Main()
    Dim objXml, dicToRemove
    Set objXml = CreateObject("Msxml2.DOMDocument.6.0")
    objXml.Load strInputFile

    Set dicToRemove = CreateObject( "Scripting.Dictionary" )

    Dim node, strName
    for each node in objXml.documentElement.SelectNodes( "//member" )
        strName = node.getAttribute( "name" )
        if not isNameOk( strName ) then
            dicToRemove.add node, ""
        end if
    Next

    Dim nodeMembers, arrKeys
    Set nodeMembers = objXml.documentElement.SelectSingleNode( "//members" )
    arrKeys = dicToRemove.Keys

    for each node in arrKeys
        nodeMembers.removeChild node
    next

    objXml.save strOutputFile
End Sub

Call Main()
于 2014-07-20T15:42:33.470 に答える