并非所有命名空间都包含在Sandcastle文档生成中。

3
我有一个C#项目,其中一个解决方案包含两个命名空间。我已经记录了这两个命名空间中所有的类、函数、成员等内容。由于这个项目是一个小型研究项目,所以这两个命名空间分别是DocTestLibraryDocTestLibrary.Events。但是,当我尝试通过Sandcastle生成文档时,它只会为DocTestLibrary命名空间创建文档。我需要在Sandcastle中进行任何设置才能使它工作吗?虽然我浏览了大部分设置,但我还是表示怀疑。
奇怪的是,Doxygen可以生成文档。
提供更多信息,我检查了Sandcastle生成的构建日志。 看起来这个条目导致其余内容无法显示。
Warn: ResolveReferenceLinksComponent2: Unknown reference link target 'T:DocTestLibrary.Events.DemoEvent'.

我还发现了其他的信息。 DocTestLibrary 命名空间包含两个类:
  • TestClass
  • StaticHelper
正如它的名称所示, StaticHelper 是一个仅包含静态方法的帮助类。然而, Sandcastle 也拒绝处理这个文件。只有 TestClass 被处理。然而奇怪的是,在日志中没有关于这一点的条目。
4个回答

13

在我的沙堡项目中,它始终只包含 5 个命名空间中的一个。问题是我没有在 帮助文件 下勾选 包含根命名空间容器

现在,所有的命名空间都列在一个根命名空间下。


2

我发现可以通过在“项目属性”->“可见性”下手动设置所需记录的类来解决此问题。


2

你的所有类型都在DocTestLibrary.Events中是内部的吗?默认情况下,我认为Sandcastle只会为公共类型生成文档。


除了两个私有字符串,一切都被声明为公共的。没有声明为内部的。 - ThaMe90
1
@ThaMe90:你明白非嵌套类的默认可见性是internal而不是public,对吧?所以只有class Foo就是一个internal类。 - Jon Skeet
那是我不知道 C# 默认可见性的一个方面。我曾经学过在 Java 中默认为 public。因为只有 public、private 和 protected。我甚至从未想过 internal 可能是默认值。 - ThaMe90
1
@ThaMe90:在Java中,默认访问级别是“包”访问(无法显式声明),而不是public...而且Java和C#有非常不同的规则。基本上,在C#中,默认始终是“你可以声明的最受限制的”,因此字段默认为private。 - Jon Skeet
好的,我不知道那个。谢谢您告诉我。 :) 我对C#的了解大部分都是自学的,所以总会漏掉一些重要的东西。 - ThaMe90
@ThaMe90:我强烈建议你获取语言规范(最好是纸质版,但至少要下载)和一本关于C#的好书。不过,至少听起来所有的谜团都已经被解释清楚了... - Jon Skeet

1

看起来通过在 Sandcastle 项目的 Visibility 属性部分设置 DocumentInternals 解决了这个问题。我想知道为什么会这样,因为没有声明任何代码是 internal 的...

我想我还要再玩一下...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接