Tag XML consigliati per i commenti relativi alla documentazione C#
I commenti della documentazione C# usano elementi XML per definire la struttura della documentazione di output. Una conseguenza di questa funzionalità è che è possibile aggiungere qualsiasi XML valido nei commenti della documentazione. Il compilatore C# copia questi elementi nel file XML di output. Anche se è possibile usare qualsiasi formato XML valido nei commenti (incluso qualsiasi elemento HTML valido), la documentazione del codice è consigliabile per vari motivi.
Di seguito vengono illustrati alcuni consigli, scenari di uso generale e altre operazioni che occorre conoscere quando si usano i tag nel formato documentazione XML nel codice C#. Anche se possibile inserire tag nei commenti della documentazione, questo articolo descrive i tag consigliati per i costrutti di linguaggio più comuni. In tutti i casi, è consigliabile attenersi alle raccomandazioni seguenti:
- Per mantenere una certa coerenza, tutti i tipi visibili pubblicamente e i loro membri devono essere documentati.
- I membri private possono anche essere documentati con commenti XML. Ciò espone tuttavia il funzionamento interno della libreria che potrebbe essere riservato.
- Come minimo, i tipi e i relativi membri devono avere un tag
<summary>
. - Il testo della documentazione deve essere scritto usando frasi complete che terminano con un punto.
- Le classi parziali sono completamente supportate e le informazioni sulla documentazione verranno concatenate in una singola voce per ciascun tipo. Se entrambe le dichiarazioni di un membro parziale contengono commenti alla documentazione, i commenti sulla dichiarazione di implementazione vengono scritti nel codice XML di output.
La documentazione XML inizia con ///
. Quando si crea un nuovo progetto, i modelli inseriscono alcune linee ///
iniziali. L'elaborazione di questi commenti presenta alcune restrizioni:
- La documentazione deve essere in codice XML ben formato. Se il formato XML non è corretto, il compilatore genera un avviso. Il file di documentazione contiene un commento che indica che si è verificato un errore.
- Alcuni tag consigliati hanno un significato speciale:
- Il tag
<param>
viene usato per descrivere i parametri. Se usato, il compilatore verifica che il parametro esista e che tutti i parametri siano descritti nella documentazione. Se la verifica ha esito negativo, il compilatore genera un avviso. - L'attributo
cref
può essere associato a qualsiasi tag per fare riferimento a un elemento di codice. Il compilatore verifica l'esistenza di questo elemento. Se la verifica ha esito negativo, il compilatore genera un avviso. Il compilatore rispetta eventuali direttiveusing
quando esegue la ricerca di un tipo descritto nell'attributocref
. - Il tag
<summary>
è usato da IntelliSense all'interno di Visual Studio per visualizzare altre informazioni su un tipo o su un membro.Nota
Il file XML non fornisce informazioni complete sul tipo e sui membri, ad esempio, non contiene alcuna informazione sul tipo. Per ottenere informazioni complete su un tipo o un membro, è possibile usare il file della documentazione insieme al reflection sul tipo o sul membro effettivo.
- Il tag
- Gli sviluppatori sono liberi di creare set di tag personalizzati. Il compilatore copia questi tag nel file di output.
Alcuni dei tag consigliati possono essere usati in qualsiasi elemento del linguaggio. Altri hanno un utilizzo più specifico. Infine, alcuni tag vengono usati per formattare il testo nella documentazione. Questo articolo descrive i tag consigliati organizzati in base al loro uso.
Il compilatore verifica la sintassi degli elementi seguiti da un * singolo nell'elenco seguente. Visual Studio fornisce IntelliSense per i tag verificati dal compilatore e tutti i tag seguiti da ** nell'elenco seguente. Oltre ai tag elencati qui, il compilatore e Visual Studio convalidano i tag <b>
, <i>
, <u>
, <br/>
e <a>
. Il compilatore convalida anche <tt>
, che è un formato HTML deprecato.
- Tag generali usati per più elementi: questi tag sono il set minimo per qualsiasi API.
- Tag usati per i membri: questi tag vengono usati per documentare metodi e proprietà.
<returns>
: il valore di questo elemento viene visualizzato in IntelliSense in Visual Studio.<param>
*: il valore di questo elemento viene visualizzato in IntelliSense in Visual Studio.<paramref>
<exception>
*<value>
: il valore di questo elemento viene visualizzato in IntelliSense in Visual Studio.
- Formattazione dell'output della documentazione: questi tag forniscono istruzioni di formattazione per gli strumenti che generano la documentazione.
- Riutilizzo del testo della documentazione: questi tag forniscono strumenti che semplificano il riutilizzo dei commenti XML.
<inheritdoc>
**<include>
*
- Generazione collegamenti e riferimenti: questi tag generano collegamenti ad altra documentazione.
- Tag per tipi e metodi generici: questi tag vengono usati solo su tipi e metodi generici
<typeparam>
*: il valore di questo elemento viene visualizzato in IntelliSense in Visual Studio.<typeparamref>
Nota
Non è possibile applicare a uno spazio dei nomi i commenti relativi alla documentazione.
Se si vuole che nel testo di un commento alla documentazione vengano visualizzate parentesi angolari, usare la codifica HTML di <
e >
, ovvero rispettivamente <
e >
. Questa codifica viene mostrata nell'esempio seguente.
/// <summary>
/// This property always returns a value < 1.
/// </summary>
Tag generali
<summary>
<summary>description</summary>
Il tag <summary>
deve essere usato per descrivere un tipo o un membro del tipo. Utilizzare <osservazioni> per aggiungere informazioni supplementari alla descrizione di un tipo. Usare l'attributo cref per abilitare strumenti della documentazione come DocFX e Sandcastle per creare collegamenti ipertestuali interni alle pagine della documentazione per gli elementi di codice. Il testo per il tag <summary>
viene visualizzato in IntelliSense e nella finestra Visualizzatore oggetti.
<remarks>
<remarks>
description
</remarks>
Il tag <remarks>
viene usato per aggiungere informazioni su un tipo o un membro del tipo, integrando le informazioni con <summary>. Queste informazioni vengono visualizzate nella finestra Visualizzatore oggetti. Questo tag può includere spiegazioni più lunghe. Si potrebbe scoprire che l'uso delle sezioni CDATA
per il markdown rende la scrittura più conveniente. Strumenti come docfx elaborano il testo markdown nelle sezioni CDATA
.
Membri del documento
<restituisce>
<returns>description</returns>
Il tag <returns>
deve essere usato nel commento della dichiarazione di metodo per descrivere il valore restituito.
<param>
<param name="name">description</param>
name
: nome di un parametro di metodo. Racchiudere il nome tra virgolette ("). I nomi per i parametri devono corrispondere alla firma dell'API. Se uno o più parametri non sono coperti, il compilatore genera un avviso. Il compilatore genera anche un avviso se il valore diname
non corrisponde a un parametro formale nella dichiarazione del metodo.
Il tag <param>
viene usato nel commento di una dichiarazione di metodo per descrivere uno dei parametri del metodo. Per documentare più parametri, usare più tag <param>
. Il testo per il tag <param>
viene visualizzato in IntelliSense, nel Visualizzatore oggetti e nel report Web commento codice.
<paramref>
<paramref name="name"/>
name
: nome del parametro a cui fare riferimento. Racchiudere il nome tra virgolette (").
Il tag <paramref>
consente di indicare che una parola nei commenti del codice, ad esempio in un blocco <summary>
o <remarks>
, fa riferimento a un parametro. È possibile elaborare il file XML in modo da formattare la parola in modo specifico, ad esempio in grassetto o in corsivo.
<exception>
<exception cref="member">description</exception>
- cref = "
member
": riferimento ad un'eccezione disponibile dall'ambiente di compilazione corrente. Il compilatore controlla che l'eccezione specificata esista e convertemember
nel nome canonico dell'elemento nel file XML di output.member
deve essere racchiuso tra virgolette (").
Il tag <exception>
consente di specificare le eccezioni che possono essere generate. Questo tag può essere applicato alle definizioni di metodi, proprietà, eventi e indicizzatori.
<value>
<value>property-description</value>
Il tag <value>
consente di descrivere il valore che rappresenta una proprietà. Quando si aggiunge una proprietà tramite la procedura guidata per il codice nell'ambiente di sviluppo di Visual Studio .NET, viene aggiunto un tag <summary> per la nuova proprietà. È necessario aggiungere manualmente un tag <value>
per descrivere il valore rappresentato dalla proprietà.
Formattazione dell'output della documentazione
<para>
<remarks>
<para>
This is an introductory paragraph.
</para>
<para>
This paragraph contains more details.
</para>
</remarks>
Il tag <para>
viene usato all'interno di un tag, ad esempio <summary>, <remarks> o <returns> e consente di aggiungere struttura al testo. Il tag <para>
crea un paragrafo con spaziatura doppia. Utilizzare il tag <br/>
se si desidera un singolo paragrafo con spaziatura.
<list>
<list type="bullet|number|table">
<listheader>
<term>term</term>
<description>description</description>
</listheader>
<item>
<term>Assembly</term>
<description>The library or executable built from a compilation.</description>
</item>
</list>
Il blocco <listheader>
viene usato per definire la riga di intestazione di una tabella o di un elenco di definizioni.
Quando si definisce una tabella:
- Si deve solo specificare una voce per
term
nell'intestazione. - Ogni elemento dell'elenco viene specificato tramite un blocco
<item>
. Per ciascunitem
, è sufficiente fornire una voce perdescription
.
Quando si crea un elenco di definizioni:
- Si deve specificare una voce per
term
nell'intestazione. - Ogni elemento dell'elenco viene specificato tramite un blocco
<item>
. Ogniitem
deve contenere un elementoterm
edescription
.
Gli elenchi e le tabelle possono contenere un numero qualsiasi di blocchi <item>
.
<c>
<c>text</c>
Il tag <c>
consente di indicare che il testo all'interno di una descrizione deve essere contrassegnato come codice. Usare <code> per indicare più righe come codice.
<code>
<code>
var index = 5;
index++;
</code>
Il tag <code>
viene usato per indicare più righe di codice. Usare <c> per indicare che il testo a riga singola all'interno di una descrizione deve essere contrassegnato come codice.
<Esempio>
<example>
This shows how to increment an integer.
<code>
var index = 5;
index++;
</code>
</example>
Il tag <example>
consente di specificare un esempio di come usare un metodo o un altro membro della libreria. Un esempio prevede in genere l'uso del tag di <codice>.
Riuso del testo della documentazione
<inheritdoc>
<inheritdoc [cref=""] [path=""]/>
Ereditare i commenti XML da classi di base, interfacce e metodi simili. L'uso di inheritdoc
elimina la copia indesiderata e incolla di commenti XML duplicati e mantiene automaticamente sincronizzati i commenti XML. Quando si aggiunge il tag <inheritdoc>
a un tipo, tutti i membri ereditano anche i commenti.
cref
: specificare il membro da cui ereditare la documentazione. I tag già definiti nel membro corrente non vengono sovrascritti da quelli ereditati.path
: query di espressione XPath che restituisce un set di nodi da visualizzare. È possibile usare questo attributo per filtrare i tag da includere o escludere dalla documentazione ereditata.
Aggiungere i commenti XML nelle classi o nelle interfacce di base e consentire a inheritdoc di copiare i commenti per implementare le classi. Aggiungere i commenti XML ai metodi sincroni e consentire a inheritdoc di copiare i commenti nelle versioni asincrone degli stessi metodi. Se si desidera copiare i commenti da un membro specifico, usare l'attributo cref
per specificare il membro.
<include>
<include file='filename' path='tagpath[@name="id"]' />
filename
: nome del file XML che contiene la documentazione. Il nome file può essere qualificato con un percorso relativo al file del codice sorgente. Racchiuderefilename
tra virgolette singole (' ').name
: percorso dei tag ditagpath
che porta al tagfilename
. Racchiudere il percorso tra virgolette singole (' ').name
: Identificatore del nome contenuto nel tag che precede i commenti;name
ha sempre unid
.id
: ID del tag che precede i commenti. Racchiudere l'ID tra virgolette (").
Il tag <include>
consente di fare riferimento ai commenti di un altro file per la descrizione dei tipi e dei membri del codice sorgente, L'inclusione di un file esterno è un'alternativa all'inserimento dei commenti della documentazione direttamente nel file del codice sorgente. Inserendo la documentazione in un file separato, è possibile applicare alla documentazione il controllo del codice sorgente separatamente dal codice sorgente. Una persona, ad esempio, può avere il file di codice sorgente estratto e un'altra il file della documentazione estratto. Il tag <include>
usa la sintassi XML XPath. Per informazioni sulla personalizzazione dell'utilizzo di <include>
, consultare la documentazione relativa a XPath.
Ad esempio, il codice sorgente seguente usa il tag <include>
per includere le osservazioni. Il percorso del file è relativo all'origine.
namespace MyNamespace;
public class MyType
{
/// <returns>This is the returns text of MyMethod. It comes from triple slash comments.</returns>
/// <remarks>This is the remarks text of MyMethod. It comes from triple slash comments.</remarks>
/// <include file="MyAssembly.xml" path="doc/members/member[@name='M:MyNamespace.MyType.MyMethod']/*" />
public int MyMethod(int p) => p;
}
L'origine XML per il file di inclusione è illustrata nell'esempio seguente. È strutturato come il file XML generato dal compilatore C#. Il file XML può contenere testo per più metodi o tipi, purché un'espressione XPath possa identificarle.
<?xml version="1.0"?>
<doc>
<members>
<member name="M:MyNamespace.MyType.MyMethod">
<param name="p">This is the description of the parameter p of MyMethod. It comes from the included file.</param>
<summary>This is the summary of MyMethod. It comes from the included file.</summary>
</member>
</members>
</doc>
L'output XML per questo metodo è illustrato nell'esempio seguente:
<member name="M:MyNamespace.MyType.MyMethod(System.Int32)">
<summary>This is the summary of MyMethod. It comes from the included file.</summary>
<returns>This is the returns text of MyMethod. It comes from triple slash comments.</returns>
<remarks>This is the remarks text of MyMethod. It comes from triple slash comments.</remarks>
<param name="p">This is the description of the parameter p of MyMethod. It comes from the included file.</param>
</member>
Suggerimento
Il team di runtime .NET usa ampiamente il tag <include>
nella documentazione. È possibile visualizzare molti esempi cercandoli nel repository dotnet/runtime
.
Generare collegamenti e riferimenti
<see>
<see cref="member"/>
<!-- or -->
<see cref="member">Link text</see>
<!-- or -->
<see href="link">Link Text</see>
<!-- or -->
<see langword="keyword"/>
cref="member"
: riferimento a un membro o a un campo disponibile per essere chiamato dall'ambiente di compilazione corrente. Il compilatore verifica l'esistenza dell'elemento di codice specificato e passamember
al nome dell'elemento nel file XML di output. Racchiudere member tra virgolette ("). È possibile fornire testo di collegamento diverso per un "cref", tramite un tag di chiusura separato.href="link"
: collegamento selezionabile a un URL specificato. Ad esempio,<see href="https://github.com">GitHub</see>
produce un collegamento selezionabile con testo GitHub che collega ahttps://github.com
.langword="keyword"
: parola chiave del linguaggio, ad esempiotrue
o una delle altre parole chiave valide.
Con il tag <see>
è possibile specificare un collegamento nel testo. Usare <seealso> per indicare che il testo deve essere inserito in una sezione Vedere anche. Usare l'attributo cref per creare collegamenti ipertestuali interni alle pagine della documentazione per gli elementi di codice. È possibile includere i parametri di tipo per specificare un riferimento a un tipo o a un metodo generico, ad esempio cref="IDictionary{T, U}"
. Inoltre, href
è un attributo valido che funziona come collegamento ipertestuale.
<seealso>
<seealso cref="member"/>
<!-- or -->
<seealso href="link">Link Text</seealso>
cref="member"
: riferimento a un membro o a un campo disponibile per essere chiamato dall'ambiente di compilazione corrente. Il compilatore verifica l'esistenza dell'elemento di codice specificato e passamember
al nome dell'elemento nel file XML di output.member
deve essere racchiuso tra virgolette (").href="link"
: collegamento selezionabile a un URL specificato. Ad esempio,<seealso href="https://github.com">GitHub</seealso>
produce un collegamento su cui è possibile fare clic con testo GitHub che collega ahttps://github.com
.
Il tag <seealso>
consente di specificare il testo da visualizzare in una sezione Vedere anche. Usare <see> per specificare un collegamento nel testo. Non è possibile nidificare il tag seealso
all'interno del tag summary
.
Attributo cref
L'attributo cref
in un tag della documentazione XML indica un "riferimento al codice". Specifica che il testo all'interno del tag è un elemento di codice, ad esempio un tipo, un metodo o una proprietà. Gli strumenti per la creazione di documentazione, come DocFX e Sandcastle, usano attributi cref
per generare automaticamente collegamenti ipertestuali alla pagina in cui è documentato il tipo o il membro.
attributo href
L'attributo href
indica un riferimento a una pagina Web. È possibile usarlo per fare riferimento direttamente alla documentazione online relativa all'API o alla libreria.
Tipi e metodi generici
<typeparam>
<typeparam name="TResult">The type returned from this method</typeparam>
TResult
: nome del parametro di tipo. Racchiudere il nome tra virgolette (").
Il tag <typeparam>
deve essere usato nel commento per una dichiarazione di tipo o metodo generico per descrivere un parametro di tipo. Aggiungere un tag per ogni parametro di tipo del tipo o del metodo generico. Il testo del tag <typeparam>
viene visualizzato in IntelliSense.
<typeparamref>
<typeparamref name="TKey"/>
TKey
: nome del parametro di tipo. Racchiudere il nome tra virgolette (").
Usare questo tag per consentire ai consumer del file di documentazione di formattare la parola in un modo specifico, ad esempio in corsivo.
Tag definiti dall'utente
Tutti i tag specificati in questo articolo rappresentano i tag riconosciuti dal compilatore C#. Gli utenti comunque possono definire tag personalizzati. Alcuni strumenti, ad esempio Sandcastle, offrono supporto per altri tag, ad esempio <event> e <note> e anche supporto per la documentazione gli spazi dei nomi. Gli strumenti di creazione della documentazione interna o personalizzata possono anche essere usati con i tag standard e con più formati di output da HTML a PDF.