为什么C#编译器在XML文档中包含非公共成员?

Şaf*_*Gür 2 c# compiler-construction documentation documentation-generation xml-documentation

使用时编译源代码时csc.exe,可以使用/ doc选项将源文件中的xml文档注释保存到外部xml文件中.

我想知道的是编译器为什么在该文件中包含我的代码的非公共成员的xml注释.由于我已经在源代码中有文档,因此在处理该项目时,我不需要xml文档文件中的任何内容.

如果我将dll用于另一个项目,我无论如何都不能使用非公共成员.那为什么它包含所有私人和内部成员的文档?

我还想知道是否有办法防止这种情况发生.

Jon*_*eet 5

我可以理解内部成员被记录在案 - 这样可以更容易地浏览文档以查找您在同一程序集中编写的代码.(当然,总有InternalsVisibleTo.)对于私人会员,我认为这有点难以证明.

如果您使用Sandcastle生成脱机文档,您可以要求它生成一个只包含公共成员的新XML文件 - 并且只生成摘要部分.我记不起它在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>
Run Code Online (Sandbox Code Playgroud)