2009-12-07 15 views
12

Sto utilizzando Doxygen per generare alcuni documenti API per un progetto C# su cui sto lavorando. Ho un bel po 'di funzionalità "interna" in questo progetto e non voglio che Doxygen produca queste firme nell'html generato che produce.Doxygen con modificatore di accesso interno C#

Ho tentato di abilitare HIDE_FRIEND_COMPOUNDS ma questo risulta ancora nelle mie classi interne esposte nella documentazione generata.

Qualcuno sa come fare?

risposta

1

doxygen ha diversi metodi per escludere il codice dalla documentazione impostando le opzioni nel file di configurazione.

Se i metodi sono privati ​​quindi impostare EXTRACT_PRIVATE = NO

È inoltre possibile specificare di escludere i modelli, per esempio, se le lezioni private si trovano in una directory chiamata nascosta, è possibile escludere tutti i file in quella directory impostando.

EXCLUDE_PATTERNS = */hidden/* 

Inoltre è possibile evitare di includere codice non documentato impostando.

HIDE_UNDOC_CLASSES = YES 

e

HIDE_UNDOC_MEMBERS = NO 
+0

Queste sono classi interne C# che sono diverse dalle classi private. Hanno un ambito di assemblaggio: solo gli altri codici all'interno dello stesso assieme possono vederli. Non voglio che queste classi siano visibili nella documentazione, voglio solo vedere le classi pubbliche visibili. –

4

questo è un vecchio ingresso, ma ho avuto lo stesso problema.

Un metodo che funziona per me è semplicemente utilizzare la funzionalità 'predefine' di doxygen. Se si predefinisce 'internal = private' (che equivale a fare '#define internal private'), Doxygen vedrà tutte le proprietà 'internal' come 'private' - e quindi ignorarle se richiesto.

È un kludge, ma funziona.

9

Addon alla risposta di Mac H, è necessario impostare questi parametri di configurazione aggiuntivi per farlo funzionare:

# 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

** RELATED **: apparentemente, Doxygen non genererà una pagina per le classi 'public static' a meno che non si imposti' EXTRACT_STATIC = YES'. Apparentemente doxygen pensa che 'static' significa la stessa cosa in C# che significa in C (cioè file-private) che è un po 'stupido dato che anche in C++, il linguaggio nativo di doxygen,' static' spesso non significa questo. Per qualche ragione, senza questa opzione, tali classi saranno comunque elencate (con riepilogo) nell'elenco delle classi, ma senza un collegamento (non viene generata alcuna pagina di classe) a partire dalla v1.8.7. (P.S. wow questi bug hanno almeno 4 anni ?!) – Qwertie

0

appena incontrato l'argomento ... utilizzare \ keyword doxygen interna, è progettato solo per questo .

0

Impostazione

HIDE_UNDOC_CLASSES = YES 

lavori per me, anche con EXTRACT_PRIVATE e PREDEFINED sui valori di default. Non sono sicuro del motivo. Mi aspetterei che siano impostati su NO (quindi non c'è documentazione disponibile per i membri privati) e internal=private (quindi la documentazione viene rimossa anche dalle classi interne), ma non è questo il caso. Le classi internal e private non sono più menzionate nella documentazione generata.

0

Doxygen a quanto pare pensa che il valore predefinito per le classi C# e le strutture sia pubblico, non interno e le documenterà come tali. Tuttavia, se si utilizza esplicitamente il modificatore di accesso C# internal, Doxygen lo rispetta (in una certa misura).Così, in esecuzione Doxygen su questa fonte:

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

si ottiene questo elenco classe in uscita di 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. 

Tuttavia, si ha ancora ottenere le classi in modo esplicito interni e le strutture nella lista di Doxygen di classi sotto "Namespace Reference:"

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

Ma notare che il "Altro ... "il collegamento alla documentazione effettiva (così come il link disponibile nella classe associata/nome della struttura) non è disponibile per i primi due.

Quindi, è possibile ottenere alcuni del comportamento che si sta cercando utilizzando esplicito modificatore di accesso internal C# 's, ma non necessariamente tutte del comportamento che si sta cercando. (A titolo di confronto, VSDocMan elabora il codice sorgente sopra esattamente nel modo in cui lo si desidera: solo la classe e la struttura esplicitamente pubbliche sono documentate, senza menzionare né le classi o le strutture interne esplicitamente, né implicitamente.)

Problemi correlati