Falta el comentario XML para un miembro o tipo visible públicamente

381

Recibo esta advertencia: "Falta el comentario XML para el tipo o miembro visible públicamente".

¿Cómo resolver esto?

J.-BC
fuente
8
También veo esto en Visual Studio. ¿Alguien sabe de qué software proviene esta advertencia? Style Cop? Fx Cop? Análisis de código? ¿Cómo puedo apagarlo?
Coronel Panic

Respuestas:

668

5 opciones:

  • Complete los comentarios de la documentación (excelente, pero requiere mucho tiempo)
  • Desactiva la generación de comentarios (en las propiedades del proyecto)
  • Deshabilite la advertencia en las propiedades del proyecto (en 'Propiedades del proyecto' vaya a Propiedades del proyecto -> Generar> "Errores y advertencias" (sección), Suprima Advertencias (cuadro de texto), agregue 1591 (lista separada por comas)). Por defecto cambiará la Configuración activa, considere cambiar la configuración a Todos.
  • Use #pragma warning disable 1591para deshabilitar la advertencia solo para algunos bits de código (y #pragma warning restore 1591luego)
  • Ignora las advertencias (mala idea, te perderás nuevas advertencias "reales")
Jon Skeet
fuente
55
@Jon, encontró la solución: si recibe esta advertencia para el código tratado con una clase parcial, busque la "otra mitad" de la clase parcial que no se genera. Si agrega un comentario XML allí, la advertencia para el código generado desaparece. Recibí esta advertencia para la clase App en el archivo App.gics generado a partir del código XAML en un proyecto WP7. Para resolverlo, tuve que agregar un comentario XML en el archivo App.xaml.cs (que no se genera).
Marcel W
@ MarcelW: Ah, ¿entonces no es para los miembros generados? ¿O son todos internos de todos modos? Eso tendría sentido ...
Jon Skeet
77
Además, si recibe esta advertencia de un código generado automáticamente por referencia de servicio , puede hacer clic con el botón derecho en la referencia de servicio, elegir "Configurar referencia de servicio ..." y luego cambiar "Nivel de acceso para clases generadas" a Interno.
Lee Grissom
99
En caso de que deshabilite las advertencias como explica @NickJ, asegúrese de cambiarlo para todas las configuraciones, y no solo para la depuración \ liberación.
Avital
55
También puede agregar esto como un atributo de clase si desea suprimir el código de una clase completa: [System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Usage", "CS1591")]
cr1pto
92

Agregue comentarios XML a los tipos y miembros visibles públicamente, por supuesto :)

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

Necesitas estos <summary> comentarios de tipo en todos los miembros; estos también se muestran en el menú emergente de intellisense.

La razon que recibe esta advertencia es porque ha configurado su proyecto para que muestre el archivo xml de documentación (en la configuración del proyecto). Esto es útil para las bibliotecas de clases (ensamblados .dll), lo que significa que los usuarios de su .dll obtienen documentación de Intellisense para su API allí mismo en Visual Studio.

Le recomiendo que obtenga una copia del complemento GhostDoc Visual Studio. Hace que la documentación sea mucho más fácil.

Isak Savo
fuente
8
+1 por mencionar GhostDoc. Nunca lo supe, sin duda facilita la documentación.
Vivelin
77
+1 por dar el motivo de la advertencia. Encontré la configuración en Construir en las propiedades del proyecto (VS 2008) y la desactivé en uno de cada diez proyectos que misteriosamente lo revisaron sin ningún motivo.
Chuck Wilbur
30
-1 Para recomendar GhostDoc: el complemento más estúpido que he visto. Genera documentación. Ahora pausa un segundo para pensarlo. Desea que su código sea más comprensible, por lo que utiliza una herramienta que genera documentación basada únicamente en el nombre del método y los tipos de argumentos. ¿Tiene sentido para usted? El usuario puede ver el nombre y los tipos de argumentos, agregar comentarios a DateTime date- La fecha realmente no ayuda.
Gdoron está apoyando a Mónica
44
@gdoron, puede que no se te haya ocurrido, pero puedes editar la documentación que GhostDoc genera, lo que te ahorrará mucho tiempo en comparación con escribir toda la documentación desde cero.
Joel McBeth el
3
GhostDoc hace más que solo adivinar cuáles deberían ser los comentarios, aunque la mayoría de las veces está bastante cerca y solo necesita editar algunas palabras en lugar de escribir todo, y si está documentando correctamente (y usted probablemente no lo son), hay una plantilla para la mayoría de las cosas, cómo deben redactarse (para propiedades, constructores, etc.), y GhostDoc las pone, incluso más frescas: si estás en una clase secundaria, puede complete la documentación con la de la clase base como una plantilla para trabajar, en lugar de copiarla a mano - pone borrosos de excepción, etc.
BrainSlugs83
41

Suprimir advertencias para comentarios XML

(No es mi trabajo, pero lo encontré útil, así que he incluido el artículo y el enlace)

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

Aquí le mostraré cómo puede suprimir las advertencias para comentarios XML después de una compilación de Visual Studio.

Antecedentes

Si ha marcado la marca "Archivo de documentación XML" en la configuración del proyecto de Visual Studio, se crea un archivo XML que contiene todos los comentarios XML. Además, recibirá muchas advertencias también en los archivos generados por el diseñador, debido a los comentarios XML faltantes o incorrectos. Si bien a veces las advertencias nos ayudan a mejorar y estabilizar nuestro código, obtener cientos de advertencias de comentarios XML es simplemente una molestia. Advertencias

Falta el comentario XML para el tipo o miembro visible públicamente ... comentario XML en ... tiene una etiqueta param para '...', pero no hay ningún parámetro con ese nombre El parámetro '...' no tiene una etiqueta param coincidente en el comentario XML para '...' (pero otros parámetros hacen) Solución

Puede suprimir todas las advertencias en Visual Studio.

  • Haga clic con el botón derecho en el proyecto de Visual Studio / Propiedades / pestaña Crear

  • Inserte los siguientes números de advertencia en "Suprimir advertencias": 1591,1572,1571,1573,1587,1570

Sprotty
fuente
66
Solo necesitaba agregar 1591 para suprimir las advertencias de comentarios Xml.
Brian Behm
Gracias por la lista de códigos! Comencé a reunirlos uno por uno y en la 3ra compilación con advertencias, llegué a la idea de que necesito llevarlo de algún lugar como está :)
sarh
Algo no está bien, 1591 también elimina las advertencias "Obsoleto", pero MS indica que solo se trata de comentarios msdn.microsoft.com/en-us/library/zk18c1w9.aspx
Pawel Cioch
También verifiqué en MS todos los 1572,1571,1573,1587,1570, y no los configuré, son errores más específicos, digamos que ha configurado /// <summary> y luego comete un error en los parámetros, usted debería recibir advertencia
Pawel Cioch
26

Hay otra forma de suprimir estos mensajes sin la necesidad de ningún cambio de código o bloques de pragma. Uso de Visual Studio: vaya a las propiedades del proyecto> Compilación> Errores y advertencias> Suprimir advertencias: agregue 1591 a la lista de códigos de advertencia.

ingrese la descripción de la imagen aquí

ekhanna
fuente
Esta es, con diferencia, la mejor, más fácil y más rápida respuesta de implementación que he visto hasta ahora para este problema. Es una repetición de otra respuesta anterior, pero esta es mucho más visualmente descriptiva y proporciona una respuesta instantánea rápida. Muchas gracias.
David Covey
La mejor respuesta aquí. Me impide dispersar mi base de código en #pragma warning disabletodas partes, lo cual es molesto.
RoadRunner - MSFT
23

Insertar un comentario XML. ;-)

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

Esto puede parecer una broma a primera vista, pero en realidad puede ser útil. Para mí resultó útil pensar qué métodos hacen incluso para los métodos privados (a menos que sea realmente trivial, por supuesto).

Matthias Meid
fuente
55
Siempre comento métodos, pero para las propiedades (que son técnicamente métodos pero típicamente tienen implementaciones triviales y nombres evidentes) prefiero evitar el tedio y la repetición de agregar comentarios XML superfluos.
Peter Gluck
15

Esto se debe a que se ha especificado un archivo de documentación XML en las Propiedades del proyecto y Su Método / Clase es público y carece de documentación.
Tu también puedes :

  1. Deshabilitar documentación XML:

    Haga clic derecho en su proyecto -> Propiedades -> pestaña 'Construir' -> desmarque Archivo de documentación XML.

  2. ¡Siéntate y escribe la documentación tú mismo!

El resumen de la documentación XML es así:

/// <summary>
/// Description of the class/method/variable
/// </summary>
..declaration goes here..
Ajay Aradhya
fuente
Gracias. Creo que esta es la mejor forma correcta de desactivar la advertencia
Ramil Aliyev
8

Quería agregar algo a las respuestas enumeradas aquí:

Como señaló Isak, la documentación XML es útil para las bibliotecas de clases, ya que proporciona inteligencia a cualquier consumidor dentro de Visual Studio. Por lo tanto, una solución fácil y correcta es simplemente desactivar la documentación para cualquier proyecto de nivel superior (como UI, etc.), que no se implementará fuera de su propio proyecto.

Además, quería señalar que la advertencia solo se expresa en miembros visibles públicamente . Entonces, si configura su biblioteca de clases para exponer solo lo que necesita, puede sobrevivir sin documentar privatey internalmiembros.

Mike Guthrie
fuente
8

Sé que este es un hilo muy antiguo, pero es la primera respuesta en Google, así que pensé agregar esta información:

este comportamiento solo ocurre cuando el nivel de advertencia se establece en 4 en "Propiedades del proyecto" -> "Compilar" . A menos que realmente necesite tanta información, puede configurarla en 3 y eliminará estas advertencias. Por supuesto, cambiar el nivel de advertencia afecta más que solo los comentarios, así que consulte la documentación si no está seguro de lo que se perderá:
https://msdn.microsoft.com/en-us/library/thxezb7y.aspx

Marius Agur
fuente
7

En su solución, una vez que marque la opción para generar un archivo de documento XML, comenzará a verificar a sus miembros públicos, por tener el XMLDoc, si no lo hacen, recibirá una advertencia por cada elemento. si realmente no desea liberar su DLL, y tampoco necesita documentación, vaya a la sección de solución, compilación y desactívela, de lo contrario si lo necesita, complételos y si no hay importancia propiedades y campos, simplemente superólelos con instrucciones precompiladoras #pragma warning disable 1591 , también puede restaurar la advertencia: #pragma warning restore 1591

uso de pragma: en cualquier lugar del código antes del lugar donde recibe la advertencia del compilador para ... (para el archivo, póngalo en el encabezado y no necesita habilitarlo nuevamente, para el ajuste de una sola clase alrededor de una clase o para el ajuste del método un método, o ... no necesita envolverlo, puede llamarlo y restaurarlo casualmente (comenzar al principio del archivo y finalizar dentro de un método)), escriba este código:

#pragma warning disable 1591 y en caso de que necesite restaurarlo, use: #pragma warning restore 1591

Aquí un ejemplo:

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

Tenga en cuenta que la directiva pragma comienza al comienzo de la línea

hombre muerto
fuente
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
Petardo
fuente
2

Establecer el nivel de advertencia en 2 suprime estos mensajes. No sé si es la mejor solución, ya que también suprime advertencias útiles.

danpop
fuente
Supongo que, en lugar de optar por esto, deshabilitar la documentación xml reduce los riesgos.
Ajay Aradhya
2

La respuesta de Jon Skeet funciona muy bien cuando construyes con VisualStudio. Sin embargo, si está construyendo el sln a través de la línea de comando (en mi caso fue a través de Ant), entonces puede encontrar que msbuild ignora las solicitudes de supresión de sln.

Agregar esto a la línea de comando msbuild resolvió el problema para mí:

/p:NoWarn=1591
Bill Tarbell
fuente
1

Archivo > Editar > Ver proyecto (clic)

Parte inferior del arco desplegable (haga clic en Abrir / Trabajo actual > Propiedades ), abrió la página de propiedades del proyecto en "Compilar" en "Salida". Casilla de verificación "Desmarcar" documentación XML .

Reconstrucción y sin advertencias.

tom
fuente
Asegúrese de verificar también todas sus configuraciones de compilación. Lo había desmarcado para Debug pero no para Release y estaba muy confundido.
MattM
1
Esta solución no es una solución en el caso de la documentación de WebAPI. Necesita esta opción activada, pero suprima las advertencias.
Pawel Cioch
1

Debe agregar /// Comentario para el miembro para el que se muestra la advertencia.

ver abajo código

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

Muestra un comentario XML de advertencia que falta para el tipo o miembro visible públicamente '.EventLogger ()'

Agregué un comentario para el miembro y desapareció la advertencia.

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

Recibí ese mensaje después de adjuntar un atributo a un método

[webMethod]
public void DoSomething()
{
}

Pero la forma correcta fue esta:

[webMethod()] // Note the Parentheses 
public void DoSomething()
{
}
Coyolero
fuente