Не все пространства имен включены в сборку Sandcastle для документации.

У меня есть проект C # с двумя пространствами имен в одном решении. Я задокументировал все классы / функции / члены / и т. Д. В обоих пространствах имен. Поскольку этот проект представляет собой небольшой исследовательский проект, пространства имен - DocTestLibrary и DocTestLibrary.Events. Однако, когда я пытаюсь создать из него документацию через Sandcastle, он создает документацию только для пространства имен DocTestLibrary. Есть ли какие-то настройки, которые мне нужно сделать в Sandcastle, чтобы это работало? Я сомневаюсь в этом, поскольку я просмотрел большинство из них.

Странно то, что Doxygen прекрасно умеет создавать документацию.


Чтобы предоставить дополнительную информацию, я проверил журнал, который Sandcastle создает для сборки. Кажется, что эта запись приводит к тому, что остальные не отображаются.

Warn: ResolveReferenceLinksComponent2: Unknown reference link target 'T:DocTestLibrary.Events.DemoEvent'.

Я обнаружил еще кое-что.

Пространство имен DocTestLibrary состоит из двух классов:

  • TestClass
  • StaticHelper

Как следует из названия, StaticHelper - это вспомогательный класс, имеющий только статические методы. Однако Сэндкасл также отказывается обрабатывать этот файл. Обрабатывается только TestClass. Меня только сбивает с толку, что в журнале нет записи об этом.


person ThaMe90    schedule 21.10.2011    source источник


Ответы (4)


В моем проекте Sandcastle он всегда будет включать только одно пространство имен из пяти. Проблема заключалась в том, что я не отмечал Включить контейнер корневого пространства имен в разделе Файл справки.

Теперь все мои пространства имен перечислены в корневом пространстве имен.

person Noel Widmer    schedule 07.05.2015

Неужели все ваши типы DocTestLibrary.Events внутренние? По умолчанию я считаю, что Sandcastle создает документацию только для общедоступных типов.

person Jon Skeet    schedule 21.10.2011
comment
Все объявлено публичным, кроме двух приватных строк. Ничего не объявлено внутренним. - person ThaMe90; 21.10.2011
comment
@ ThaMe90: Вы понимаете, что видимость по умолчанию для невложенных классов является внутренней, а не общедоступной, верно? Так что просто class Foo - это внутренний класс. - person Jon Skeet; 24.10.2011
comment
Это был аспект, о котором я не знал о видимости по умолчанию для C #. Меня учили, что в Java значение по умолчанию было публичным. Поскольку там было только публичное, частное и охраняемое. Я даже не задумывался о возможности внутреннего использования по умолчанию. - person ThaMe90; 24.10.2011
comment
@ ThaMe90: В Java по умолчанию используется доступ к пакету (который нельзя явно объявить), а не общедоступный ... и Java и C # имеют очень разные правила. В основном в C # значение по умолчанию всегда является самым ограниченным, как вы могли бы его объявить - например, поля по умолчанию являются частными. - person Jon Skeet; 24.10.2011
comment
Ладно, я этого не знал. Спасибо, что наполнили меня информацией. :) То, что я знаю о C #, в основном самоучка, и что ж, вы часто упускаете важные моменты здесь и там. - person ThaMe90; 24.10.2011
comment
@ ThaMe90: Я настоятельно рекомендую вам получить спецификацию языка (в идеале в печатном виде, но, по крайней мере, загрузить ее), а также хорошую книгу о C #. Тем не менее, по крайней мере, похоже, что все загадки раскрыты ... - person Jon Skeet; 24.10.2011

Я обнаружил, что эту проблему можно решить, вручную установив классы, которые вы хотите задокументировать, в Edit API Filter в Project Properties -> Visibility.

person Guavaman    schedule 14.07.2015

Кажется, что эта проблема решена путем установки DocumentInternals в разделе свойств Visibility в проекте Sandcastle. Интересно, почему это так, ведь код не объявлен внутренним ...

Думаю, я еще немного поиграю ...

person ThaMe90    schedule 21.10.2011