使用C#内部访问修饰符进行氧气处理

时间:2009-12-07 19:30:02

标签: c# doxygen

我正在使用Doxygen为我正在开发的C#项目生成一些API文档。我在这个项目中有相当多的“内部”功能,并且不希望Doxygen在它生成的生成的html中产生这些签名。

我已尝试启用HIDE_FRIEND_COMPOUNDS,但这仍会导致我的内部类在生成的文档中公开。

有谁知道怎么做?

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

这是一个旧条目,但我遇到了同样的问题。

对我有用的方法是简单地使用doxygen的'predefine'功能。 如果你预定义'internal = private'(相当于做'#define internal private'),那么Doxygen会将所有'内部'属性视为'私有' - 所以如果请求则忽略它们。

这是一个kludge - 但它有效。

答案 2 :(得分:1)

doxygen有几种方法可以通过在配置文件中设置选项来从文档中排除代码。

如果您的方法是私有的,请设置EXTRACT_PRIVATE = NO

您还可以指定排除模式,例如,如果您的私有类位于名为hidden的目录中,则可以通过设置排除该目录中的所有文件。

EXCLUDE_PATTERNS = */hidden/* 

此外,您可以通过设置避免包含未记录的代码。

HIDE_UNDOC_CLASSES = YES

HIDE_UNDOC_MEMBERS = NO

答案 3 :(得分:0)

刚刚遇到主题...使用\ internal doxygen关键字,它专为此而设计。

答案 4 :(得分:0)

设置

HIDE_UNDOC_CLASSES = YES

适用于我,即使默认值为EXTRACT_PRIVATEPREDEFINED也是如此。不确定原因。我希望它们必须设置在NO上(因此私有成员没有可用的文档)和internal=private(因此文档也从内部类中删除),但事实并非如此。 internal类在生成的文档中不再提及。

答案 5 :(得分:0)

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;
    }
}

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

但请注意,实际文档的“更多...”链接(以及相关类/结构名称中可用的链接)不适用于前两个。

因此,您可以使用C#的显式internal访问修饰符来获取您正在寻找的部分行为,但不一定所有行为正在找。 (通过比较,VSDocMan完全按照您希望的方式处理上面的源代码:只记录显式公共类和结构,没有提及显式或隐式内部类或结构。)