2009-12-07 8 views
12

Estoy usando Doxygen para generar algunos documentos API para un proyecto de C# en el que estoy trabajando. Tengo bastante funcionalidad "interna" en este proyecto y no quiero que Doxygen produzca estas firmas en el html generado que produce.Doxygen con el modificador de acceso interno C#

He intentado habilitar HIDE_FRIEND_COMPOUNDS pero esto todavía da como resultado que mis clases internas estén expuestas en la documentación generada.

¿Alguien sabe cómo hacer esto?

Respuesta

1

doxygen tiene varios métodos para excluir el código de la documentación mediante el establecimiento de opciones en el archivo de configuración.

Si sus métodos son privadas continuación, establezca EXTRACT_PRIVATE = NO

También puede especificar para excluir a los patrones, por ejemplo, si sus clases privadas se encuentran en un directorio llamado oculto, puede excluir todos los archivos de ese directorio mediante el establecimiento.

EXCLUDE_PATTERNS = */hidden/* 

También puede evitar la inclusión de código no documentado mediante la configuración.

HIDE_UNDOC_CLASSES = YES 

y

HIDE_UNDOC_MEMBERS = NO 
+0

Estas son clases internas de C# que son diferentes a las clases privadas. Tienen alcance de conjunto: solo otros códigos dentro del mismo conjunto pueden verlos. No quiero que estas clases sean visibles en la documentación, solo quiero que las clases públicas sean visibles. –

4

Esta es una entrada antigua, pero no tenía el mismo problema.

Un método que funciona para mí es simplemente usar la función 'predefinida' de doxygen. Si predefine 'internal = private' (que es equivalente a hacer una '#define private interna'), Doxygen verá todas las propiedades 'internas' como 'privadas', por lo que las ignorará si así lo solicita.

Es un kludge, pero funciona.

9

Complemento a la respuesta de Mac H, usted tiene que establecer estos parámetros de configuración adicionales para hacer que funcione:

# 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

** RELACIONADO **: aparentemente, Doxygen no generará una página para las clases 'públicas estáticas' a menos que configure' EXTRACT_STATIC = YES'. Aparentemente doxygen piensa 'estático' significa lo mismo en C# que significa en C (es decir, archivo-privado) que es muy tonto ya que incluso en C++, el lenguaje nativo de doxygen,' static' a menudo no significa eso. Por alguna razón, sin esta opción, dichas clases seguirán enumeradas (con sumario) en la lista de clases, pero sin un vínculo (no se genera ninguna página de clase) a partir de v1.8.7. (P.S. wow estos errores tienen al menos 4 años de edad?!) – Qwertie

0

encontré con el tema ... usar \ doxygen palabra clave interna, que está diseñado sólo para eso .

0

Configuración

HIDE_UNDOC_CLASSES = YES 

funciona para mí, incluso con EXTRACT_PRIVATE y PREDEFINED en los valores por defecto. No estoy seguro del motivo Esperaría que estén configurados en NO (por lo que no hay documentación disponible para miembros privados) y internal=private (por lo que la documentación también se elimina de las clases internas), pero ese no es el caso. Las clases internal y private ya no se mencionan en ninguna parte de la documentación generada.

0

Parece que Doxygen cree que el valor predeterminado para las clases y estructuras C# es público, no interno, y los documentará como tal. Sin embargo, si utiliza explícitamente el modificador de acceso C# internal, Doxygen lo respeta (hasta cierto punto).Por lo tanto, correr Doxygen en esta fuente:

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

que obtiene esta lista de clase en la producción de 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. 

Sin embargo, usted todavía consigue las clases de forma explícita internos y estructuras en la lista de Doxygen de clases en "Referencia del espacio de nombres:"

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

Pero tenga en cuenta que el "Más ... "el enlace a la documentación real (así como también el enlace disponible en el nombre de clase/estructura asociado) no está disponible para los dos primeros.

Por lo tanto, se puede obtener alguna del comportamiento que busca mediante el uso explícito modificador de acceso internal C# 's, pero no necesariamente todas del comportamiento que busca. (A modo de comparación, VSDocMan procesa el código fuente anterior exactamente de la manera en que lo desea: solo se documenta explícitamente la clase pública y la estructura, sin mención explícita ni implícita de las clases o estructuras internas).

Cuestiones relacionadas