Commento XML mancante per tipo o membro visibile pubblicamente


381

Ricevo questo avviso: "Commento XML mancante per tipo o membro pubblicamente visibile".

Come risolverlo?


8
Vedo anche questo in Visual Studio. Qualcuno sa da quale software proviene questo avviso? Poliziotto di stile? Fx Cop? Analisi del codice? Come posso spegnerlo?
Colonnello Panic,

Risposte:


668

5 opzioni:

  • Compila i commenti della documentazione (ottimo, ma che richiede tempo)
  • Disattiva la generazione dei commenti (nelle proprietà del progetto)
  • Disabilita l'avviso nelle proprietà del progetto (in "Proprietà del progetto" vai su Proprietà del progetto -> Build> "Errori e avvisi" (sezione), Sopprimi avvisi (casella di testo), aggiungi 1591 (elenco separato da virgole)). Per impostazione predefinita cambierà la configurazione attiva, considera di cambiare la configurazione in Tutti.
  • Utilizzare #pragma warning disable 1591per disabilitare l'avviso solo per alcuni bit di codice (e in #pragma warning restore 1591seguito)
  • Ignora gli avvisi (cattiva idea: ti perderai nuovi avvisi "reali")

5
@Jon, ho trovato la soluzione: se ricevi questo avviso per il codice gereated con una classe parziale, cerca "l'altra metà" della classe parziale che non viene generata. Se si aggiunge un commento XML lì, l'avviso per il codice generato scompare. Ho ricevuto questo avviso per la classe App nel file App.gics generato dal codice XAML in un progetto WP7. Per risolverlo, ho dovuto aggiungere un commento XML nel file App.xaml.cs (che non viene generato).
Marcel W,

@MarcelW: Ah, quindi non è per i membri generati? O sono comunque tutti interni? Avrebbe senso ...
Jon Skeet,

7
Inoltre, se ricevi questo avviso da un codice generato automaticamente da un riferimento di servizio , puoi fare clic con il tasto destro del mouse sul riferimento di servizio, scegliere "Configura riferimento di servizio ...", quindi cambiare "Livello di accesso per le classi generate" in Interno.
Lee Grissom,

9
Nel caso in cui tu disabiliti gli avvisi come spiega @NickJ, assicurati di cambiarli per tutte le configurazioni e non solo per il debug \ release.
Avital,

5
Puoi anche aggiungere questo come attributo di classe se vuoi sopprimere il codice per un'intera classe: [System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Usage", "CS1591")]
cr1pto

92

Aggiungi commenti XML ai tipi e ai membri visibili pubblicamente ovviamente :)

///<Summary>
/// Gets the answer
///</Summary>
public int MyMethod()
{
   return 42;
}

Sono necessari questi <summary>commenti di tipo su tutti i membri, che vengono visualizzati anche nel menu a comparsa intellisense.

Il motivo per cui ricevi questo avviso è perché hai impostato il tuo progetto per l'output del file XML della documentazione (nelle impostazioni del progetto). Questo è utile per le librerie di classi (assembly .dll), il che significa che gli utenti del tuo .dll stanno ottenendo la documentazione di intellisense per la tua API proprio lì in Visual Studio.

Ti consiglio di procurarti una copia del componente aggiuntivo GhostDoc Visual Studio. Rende la documentazione molto più semplice.


8
+1 per menzionare GhostDoc. Non l'ho mai saputo, sicuramente rende la documentazione più semplice.
Vivelin,

7
+1 per aver fornito il motivo dell'avviso. Ho trovato l'impostazione in Build nelle proprietà del progetto (VS 2008) e l'ho disattivata su un progetto su dieci che misteriosamente l'aveva verificato senza motivo.
Chuck Wilbur,

30
-1 Per consigliare GhostDoc- il più stupido AddOn che abbia mai visto. Genera documentazione. Ora metti in pausa un secondo per pensarci. Volete che il vostro codice sia più comprensibile, quindi utilizzate uno strumento che generi documentazione esclusivamente in base al nome del metodo e ai tipi di argomenti. ha senso per te? L'utente può vedere il nome e i tipi degli argomenti, aggiungere commenti a DateTime date- La data realtà non aiuta.
gdoron sostiene Monica il

4
@gdoron, potrebbe non esserti verificato, ma puoi modificare la documentazione generata da GhostDoc, che ti farà risparmiare molto tempo rispetto a scrivere l'intera documentazione da zero.
Joel McBeth,

3
GhostDoc non si limita a indovinare quali dovrebbero essere i commenti, anche se la maggior parte delle volte è abbastanza vicino e devi solo modificare alcune parole invece di scrivere tutto e se stai documentando correttamente (e tu probabilmente non lo sono), c'è un modello per la maggior parte delle cose, come devono essere formulate (per proprietà, costruttori, ecc.), e GhostDoc inserisce quelle - ancora più interessanti: se sei in una classe figlio, può compila la documentazione con quella della classe base come modello su cui lavorare, invece di copiarla a mano - inserisce le eccezioni blurbs, ecc.
BrainSlugs83

41

Elimina avvisi per commenti XML

(non il mio lavoro, ma l'ho trovato utile, quindi ho incluso l'articolo e il link)

http://bernhardelbl.wordpress.com/2009/02/23/suppress-warnings-for-xml-comments/

Qui ti mostrerò come eliminare gli avvisi per i commenti XML dopo una build di Visual Studio.

sfondo

Se è stato selezionato il segno "File di documentazione XML" nelle impostazioni del progetto Visual Studio, viene creato un file XML contenente tutti i commenti XML. Inoltre, riceverai molti avvisi anche nei file generati dal designer, a causa dei commenti XML mancanti o errati. Mentre a volte gli avvisi ci aiutano a migliorare e stabilizzare il nostro codice, ricevere centinaia di avvisi di commento XML è solo una seccatura. Avvertenze

Commento XML mancante per tipo o membro visibile pubblicamente ... Il commento XML su ... ha un tag param per "...", ma non esiste alcun parametro con quel nome Il parametro "..." non ha un tag param corrispondente nel commento XML per "..." (ma altri parametri lo fanno) Soluzione

Puoi eliminare tutti gli avvisi in Visual Studio.

  • Fare clic con il tasto destro del mouse sul progetto Visual Studio / Proprietà / Scheda Crea

  • Inserire i seguenti numeri di avviso negli "Elimina avvisi": 1591,1572,1571,1573,1587,1570


6
Ho solo bisogno di aggiungere 1591 per sopprimere gli avvisi di commento Xml.
Brian Behm,

Grazie per l'elenco dei codici! Ho iniziato a raccoglierli uno per uno e al 3 ° build con avvertimenti mi è venuto in mente che ho bisogno di prenderlo da qualche parte così com'è :)
sarh

Qualcosa non è giusto, 1591 rimuove anche le avvertenze "obsoleti", ma MS indica si tratta di commenti solo msdn.microsoft.com/en-us/library/zk18c1w9.aspx
Pawel Cioch

Ho anche controllato su MS tutti 1572,1571,1573,1587,1570 e non li avrei impostati, sono errori più specifici, supponiamo che tu abbia impostato /// <summary> e poi fai un errore in params, tu dovrebbe essere avvertito
Pawel Cioch

26

C'è un altro modo per sopprimere questi messaggi senza la necessità di alcuna modifica del codice o blocchi pragma. Utilizzo di Visual Studio: accedere alle proprietà del progetto> Genera> Errori e avvisi> Elimina avvisi: aggiungere 1591 all'elenco dei codici di avviso.

inserisci qui la descrizione dell'immagine


Questa è di gran lunga la risposta migliore, più semplice e più rapida da implementare che ho visto finora per questo problema. È la ripetizione di un'altra risposta sopra, ma questa è molto più visivamente descrittiva e offre una risposta rapida e immediata. Grazie mille.
David Covey,

La migliore risposta qui. Mi impedisce di spargere la mia base di codice #pragma warning disableovunque, il che è solo fastidioso.
RoadRunner - MSFT,

23

Inserisci un commento XML. ;-)

/// <summary>
/// Describe your member here.
/// </summary>
public string Something
{
    get;
    set;
}

A prima vista può sembrare uno scherzo, ma in realtà può essere utile. Per me si è rivelato utile pensare a cosa fanno i metodi anche per i metodi privati ​​(a meno che non sia davvero banale, ovviamente).


5
Commento sempre i metodi, ma per le proprietà (che sono metodi tecnicamente ma in genere hanno implementazioni banali e nomi evidenti) preferisco evitare la noia e la ripetizione dell'aggiunta di commenti XML superflui.
Peter Gluck,

15

Questo perché è stato specificato un file di documentazione XML nelle proprietà del progetto e il metodo / classe è pubblico e privo di documentazione.
Puoi:

  1. Disabilita la documentazione XML:

    Fai clic con il pulsante destro del mouse sul tuo progetto -> Proprietà -> scheda "Crea" -> deseleziona il file di documentazione XML.

  2. Siediti e scrivi tu stesso la documentazione!

Il riepilogo della documentazione XML è il seguente:

/// <summary>
/// Description of the class/method/variable
/// </summary>
..declaration goes here..

Grazie. Penso che questo sia il modo migliore per disabilitare l'avvertimento
Ramil Aliyev il

8

Volevo aggiungere qualcosa alle risposte elencate qui:

Come ha sottolineato Isak, la documentazione XML è utile per le librerie di classi, in quanto fornisce intellisense a qualsiasi consumatore all'interno di Visual Studio. Pertanto, una soluzione semplice e corretta è semplicemente disattivare la documentazione per qualsiasi progetto di alto livello (come l'interfaccia utente, ecc.), Che non verrà implementato al di fuori del proprio progetto.

Inoltre, vorrei sottolineare che l'avvertimento si esprime solo sui membri visibili pubblicamente . Quindi, se imposti la tua libreria di classi per esporre solo ciò di cui ha bisogno, puoi cavartela senza documentare privatee internalmembri.


8

So che questo è un thread molto vecchio, ma è la prima risposta su Google, quindi ho pensato di aggiungere questo po 'di informazioni:

questo comportamento si verifica solo quando il livello di avviso è impostato su 4 in "Proprietà del progetto" -> "Crea" . A meno che tu non abbia davvero bisogno di così tante informazioni, puoi impostarlo su 3 e ti libererai di questi avvisi. Naturalmente, la modifica del livello di avviso influisce non solo sui commenti, quindi fai riferimento alla documentazione se non sei sicuro di cosa ti perderai:
https://msdn.microsoft.com/en-us/library/thxezb7y.aspx


7

Nella tua soluzione, una volta selezionata l'opzione per generare il file di documento XML, inizia a controllare i tuoi membri pubblici, per avere XMLDoc, in caso contrario, riceverai un avviso per ogni elemento. se non vuoi davvero rilasciare la tua DLL, e quindi non hai bisogno di documentazione, vai alla tua soluzione, costruisci la sezione e disattivala, altrimenti se ne hai bisogno, riempila, e se non sono importanti proprietà e campi, basta superarli con l'istruzione pre-compilatore #pragma warning disable 1591 è inoltre possibile ripristinare l'avviso: #pragma warning restore 1591

uso di pragma: qualsiasi punto del codice prima del posto in cui si riceve l'avvertimento del compilatore per ... (per il file, inserirlo nell'intestazione e non è necessario abilitarlo di nuovo, per avvolgere una classe attorno a una classe o per avvolgere il metodo un metodo o ... non è nemmeno necessario avvolgerlo, è possibile chiamarlo e ripristinarlo in modo casuale (iniziare all'inizio del file e terminare all'interno di un metodo)), scrivere questo codice:

#pragma warning disable 1591 e nel caso sia necessario ripristinarlo, utilizzare: #pragma warning restore 1591

Ecco un esempio:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using RealEstate.Entity.Models.Base;

namespace RealEstate.Models.Base
{
    public class CityVM
    {

#pragma warning disable 1591

        [Required]
        public string Id { get; set; }

        [Required]
        public string Name { get; set; }

        public List<LanguageBasedName> LanguageBasedNames { get; set; }

        [Required]
        public string CountryId { get; set; }

#pragma warning restore 1591

        /// <summary>
        /// Some countries do not have neither a State, nor a Province
        /// </summary>
        public string StateOrProvinceId { get; set; }
    }
}

Nota che la direttiva pragma inizia all'inizio della riga


2
#pragma warning disable 1591
#pragma warning disable 1591
#pragma warning disable 1572
#pragma warning disable 1571
#pragma warning disable 1573
#pragma warning disable 1587
#pragma warning disable 1570

2

L'impostazione del livello di avviso su 2 elimina questo messaggio. Non so se è la soluzione migliore in quanto elimina anche avvisi utili.


Invece di optare per questo, suppongo che disabilitare la documentazione XML riduca i rischi.
Ajay Aradhya,

2

La risposta di Jon Skeet funziona benissimo per quando costruisci con VisualStudio. Tuttavia, se stai costruendo lo sln tramite la riga di comando (nel mio caso era tramite Ant), potresti scoprire che msbuild ignora le richieste di soppressione dello sln.

L'aggiunta di questo alla riga di comando msbuild ha risolto il problema per me:

/p:NoWarn=1591

1

File > Modifica > Visualizza progetto (fai clic)

Parte inferiore dell'arco a discesa (fare clic su Apri / Lavoro corrente > Proprietà ), pagina delle proprietà del progetto aperta in "Build" in "Output". Casella di controllo "Deseleziona" Documentazione XML .

Ricostruisci e nessun avviso.


Assicurati di controllare anche tutte le tue configurazioni di build. L'avevo deselezionato per Debug ma non per Release ed ero molto confuso.
MattM

1
Questa soluzione non è una soluzione in caso di documentazione WebAPI. È necessaria questa opzione, ma sopprimere gli avvisi.
Pawel Cioch,

1

Devi aggiungere /// Comment per il membro per il quale viene visualizzato l'avviso.

vedi sotto il codice

public EventLogger()
{
    LogFile = string.Format("{0}{1}", LogFilePath, FileName);
}

Visualizza un commento XML mancante di avviso per tipo o membro visibile pubblicamente '.EventLogger ()'

Ho aggiunto un commento per il membro e un avviso sparito.

///<Summary>
/// To write a log <Anycomment as per your code>
///</Summary>
public EventLogger()
{
    LogFile = string.Format("{0}{1}", LogFilePath, FileName);
}

-5

Ho ricevuto quel messaggio dopo aver allegato un attributo a un metodo

[webMethod]
public void DoSomething()
{
}

Ma il modo corretto era questo:

[webMethod()] // Note the Parentheses 
public void DoSomething()
{
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.