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

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

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

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


person Mike Gates    schedule 07.12.2009    source источник


Ответы (6)


Дополнение к ответу 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
person thumbmunkeys    schedule 15.07.2011
comment
СВЯЗАННО: по-видимому, Doxygen не будет генерировать страницу для public static классов, если вы не установите EXTRACT_STATIC = YES. Очевидно, doxygen считает, что static означает в C# то же самое, что и в C (т. е. файл-частный), что очень глупо, поскольку даже в C++, родном языке doxygen, static часто не означает этого. По какой-то причине без этой опции такие классы будут по-прежнему перечислены (с кратким описанием) в списке классов, но без ссылки (страница класса не создается) начиная с версии 1.8.7. (P.S. вау, этим жукам уже как минимум 4 года?!) - person Qwertie; 07.07.2014

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

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

Это кладж, но он работает.

person Mac H    schedule 09.06.2011

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

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

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

EXCLUDE_PATTERNS = */hidden/* 

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

HIDE_UNDOC_CLASSES = YES

и

HIDE_UNDOC_MEMBERS = NO
person Alon    schedule 07.12.2009
comment
Это внутренние классы C#, которые отличаются от частных классов. У них есть область сборки: их может видеть только другой код внутри той же сборки. Я не хочу, чтобы эти классы были видны в документации, мне нужны только общедоступные классы. - person Mike Gates; 08.12.2009

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

person Slava    schedule 21.11.2011

Параметр

HIDE_UNDOC_CLASSES = YES

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

person Simon A. Eugster    schedule 29.01.2014

Doxygen, по-видимому, считает, что классы и структуры C# по умолчанию являются общедоступными, а не внутренними, и будет документировать их как таковые. Однако, если вы явно используете модификатор доступа C# 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;
    }
}

gets you this Class List in Doxygen's output:

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...

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

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

person Stevens Miller    schedule 12.09.2017