Подтвердить что ты не робот

Doxygen с модификатором внутреннего доступа С#

Я использую Doxygen для создания некоторых документов API для проекта С#, над которым я работаю. У меня есть довольно "внутренняя" функциональность в этом проекте и не хочу, чтобы Doxygen создавал эти сигнатуры в сгенерированном html, который он производит.

Я попытался включить HIDE_FRIEND_COMPOUNDS, но это все еще приводит к тому, что мои внутренние классы отображаются в сгенерированной документации.

Кто-нибудь знает, как это сделать?

4b9b3361

Ответ 1

Addon to Mac H ответ, вы должны установить эти дополнительные параметры конфигурации, чтобы заставить его работать:

# The PREDEFINED tag can be used to specify one or more macro names that 
# are defined before the preprocessor is started (similar to the -D option of 
# gcc).     

PREDEFINED             = internal=private

# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
# will be included in the documentation.  

EXTRACT_PRIVATE        = NO

# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
# evaluate all C-preprocessor directives found in the sources and include 
# files.

ENABLE_PREPROCESSING   = YES

# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
# names in the source code. If set to NO (the default) only conditional 
# compilation will be performed. Macro expansion can be done in a controlled 
# way by setting EXPAND_ONLY_PREDEF to YES.

MACRO_EXPANSION        = YES

# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
# then the macro expansion is limited to the macros specified with the 
# PREDEFINED and EXPAND_AS_DEFINED tags.

EXPAND_ONLY_PREDEF     = YES

Ответ 2

Это старая запись, но у меня была такая же проблема.

Метод, который работает для меня, - это просто использовать функцию predefine для doxygen. Если вы предопределяете "internal = private" (что эквивалентно выполнению "#define internal private" ), тогда Doxygen увидит все "внутренние" свойства как 'private' - и поэтому игнорирует их, если будет запрошено.

Это kludge, но он работает.

Ответ 3

doxygen имеет несколько методов для исключения кода из документации путем настройки параметров в файле конфигурации.

Если ваши методы являются закрытыми, то установите EXTRACT_PRIVATE = NO

Вы также можете указать, чтобы исключать шаблоны, например, если ваши частные классы находятся в каталоге с именем hidden, вы можете исключить все файлы в этом каталоге, установив.

EXCLUDE_PATTERNS = */hidden/* 

Также вы можете избежать включения не документированного кода путем установки.

HIDE_UNDOC_CLASSES = YES

и

HIDE_UNDOC_MEMBERS = NO

Ответ 4

Просто наткнулся на тему... используйте ключевое слово \internal doxygen, оно предназначено именно для этого.

Ответ 5

Настройка

HIDE_UNDOC_CLASSES = YES

работает для меня, даже с EXTRACT_PRIVATE и PREDEFINED по умолчанию. Не уверен в причине. Я ожидаю, что они должны быть установлены на NO (поэтому для частных членов нет документации) и internal=private (поэтому документация также удаляется из внутренних классов), но это не так. internal и private классы больше не упоминаются нигде в сгенерированной документации.

Ответ 6

Doxygen, по-видимому, считает, что значение по умолчанию для классов С# и структур является общедоступным, а не внутренним, и будет документировать их как таковые. Однако , если вы явно используете модификатор доступа С# internal, Doxygen уважает его (в некоторой степени). Итак, запустив Doxygen в этом источнике:

namespace Test_Library
{
    /// <summary>
    /// I should be documented.
    /// </summary>
    public class ExplicitPublicClass
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    class ImplicitInternalClass
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    internal class ExplicitInternalClass
    {
        public int Field;
    }

    /// <summary>
    /// I should be documented.
    /// </summary>
    public struct ExplicitPublicStruct
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    struct ImplicitInternalStruct
    {
        public int Field;
    }

    /// <summary>
    /// I should NOT be documented.
    /// </summary>
    internal struct ExplicitInternalStruct
    {
        public int Field;
    }
}

получает этот список классов в выводе Doxygen:

C ExplicitPublicClass       I should be documented.
C ExplicitPublicStruct      I should be documented.
C ImplicitInternalClass     I should NOT be documented.
C ImplicitInternalStruct    I should NOT be documented. 

Однако вы все равно получаете явно внутренние классы и структуры в списке классов Doxygen в разделе "Справочник по пространствам имен:"

class       ExplicitInternalClass
            I should NOT be documented. 

struct      ExplicitInternalStruct
            I should NOT be documented. 

class       ExplicitPublicClass
            I should be documented. More...

struct      ExplicitPublicStruct
            I should be documented. More...

class       ImplicitInternalClass
            I should NOT be documented. More...

struct      ImplicitInternalStruct
            I should NOT be documented. More...

Но обратите внимание, что ссылка "Подробнее..." на фактическую документацию (а также ссылку, доступную в соответствующем имени класса/структуры) недоступна для первых двух.

Итак, вы можете получить некоторое поведение, которое вы ищете, используя модификатор доступа С# explicit internal, но не обязательно все поведение, которое вы ищете. (Для сравнения VSDocMan обрабатывает исходный код выше, точно так, как вы хотите: только явный публичный класс и структура документируются без упоминания явных или неявно внутренних классов или структур.)