Comentário XML ausente para tipo ou membro publicamente visível

381

Estou recebendo este aviso: "Faltando comentário XML para o tipo ou membro publicamente visível".

Como resolver isso?

J.-BC
fonte
8
Eu também vejo isso no Visual Studio. Alguém sabe de que software vem esse aviso? Style Cop? Fx Cop? Análise de código? Como posso desligá-lo?
Coronel Panic

Respostas:

668

5 opções:

  • Preencha os comentários da documentação (ótimo, mas demorado)
  • Desativar a geração de comentários (nas propriedades do projeto)
  • Desabilite o aviso nas propriedades do projeto (em 'Propriedades do projeto', vá para Propriedades do projeto -> Construção> "Erros e avisos" (seção), Suprimir avisos (caixa de texto), adicione 1591 (lista separada por vírgula)). Por padrão, ele mudará a Configuração Ativa, considere alterar a configuração para Todos.
  • Use #pragma warning disable 1591para desativar o aviso apenas para alguns bits de código (e #pragma warning restore 1591depois)
  • Ignore os avisos (má ideia - você perderá novos avisos "reais")
Jon Skeet
fonte
5
@ Jon, encontrou a solução: Se você receber esse aviso para código gerado com uma classe parcial, procure a "outra metade" da classe parcial que não é gerada. Se você adicionar um comentário XML, o aviso para o código gerado desaparecerá. Eu tive esse aviso para a classe App no ​​arquivo App.gics gerado a partir do código XAML em um projeto WP7. Para resolvê-lo, tive que adicionar um comentário XML no arquivo App.xaml.cs (que não é gerado).
Marcel W
@MarcelW: Ah, então não é para os membros gerados? Ou eles são todos internos, afinal? Isso faria sentido ...
Jon Skeet
7
Além disso, se você receber esse aviso de um código gerado automaticamente pela Referência de serviço , poderá clicar com o botão direito do mouse na referência de serviço, escolher "Configurar referência de serviço ..." e alterar "Nível de acesso para classes geradas" para Interno.
Lee Grissom
9
Caso você esteja desabilitando os avisos como @NickJ explaind, certifique-se de alterá-lo para todas as configurações e não apenas para debug \ release.
Avital
5
Você também pode adicionar este como um atributo de classe se você quiser código suprimir para uma classe inteira: [System.Diagnostics.CodeAnalysis.SuppressMessage ( "Microsoft.Usage", "CS1591")]
cr1pto
92

Adicione comentários XML aos tipos e membros visíveis publicamente, é claro :)

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

Você precisa desses <summary>comentários do tipo em todos os membros - eles também aparecem no menu pop-up do intellisense.

O motivo para você receber esse aviso é porque você configurou seu projeto para gerar o arquivo xml da documentação (nas configurações do projeto). Isso é útil para bibliotecas de classes (assemblies .dll), o que significa que os usuários de seu .dll estão obtendo documentação intellisense para sua API no Visual Studio.

Eu recomendo que você obtenha uma cópia do Add-in do GhostDoc Visual Studio. Torna a documentação muito mais fácil.

Isak Savo
fonte
8
+1 por mencionar o GhostDoc. Nunca soube disso, certamente torna a documentação mais fácil.
Vivelin
7
+1 por fornecer o motivo do aviso. Encontrei a configuração em Compilar nas propriedades do projeto (VS 2008) e a desabilitou em um dos dez projetos que misteriosamente a haviam verificado sem uma boa razão.
precisa saber é o seguinte
30
-1 Por recomendar GhostDoc- o AddOn mais estúpido que eu já vi. Gera documentação. Agora pare um segundo para pensar sobre isso. Você deseja que seu código seja mais compreensível, portanto, use uma ferramenta que gere documentação exclusivamente com base no nome do método e nos tipos de argumentos. Isso faz sentido para você? O usuário pode ver o nome e os tipos dos argumentos, adicionar um comentário a DateTime date- A data realmente não ajuda.
gdoron está apoiando Monica
4
@gdoron, pode não ter ocorrido a você, mas você pode editar a documentação que o GhostDoc gera, o que economizará muito tempo em comparação com a gravação de toda a documentação do zero.
Joel McBeth
3
O GhostDoc faz mais do que apenas adivinha quais devem ser os comentários - embora na maioria das vezes, seja bem próximo e você só precise editar algumas palavras em vez de digitar tudo - e se estiver documentando corretamente (e você provavelmente não são), existe um modelo para a maioria das coisas, como elas precisam ser redigidas (para propriedades, construtores, etc.), e o GhostDoc as coloca - ainda mais legal: se você estiver em uma classe infantil, ele pode preencher a documentação com que a partir da classe base como um modelo para trabalhar com, em vez de copiá-lo à mão - ele coloca nas sinopses de exceção, etc.
BrainSlugs83
41

Suprimir avisos para comentários XML

(não é o meu trabalho, mas achei útil, então incluí o artigo e o link)

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

Aqui, mostrarei como você pode suprimir avisos para comentários XML após uma compilação do Visual Studio.

fundo

Se você tiver marcado a marca "Arquivo de documentação XML" nas configurações do projeto do Visual Studio, um arquivo XML contendo todos os comentários XML será criado. Além disso, você receberá muitos avisos também nos arquivos gerados pelo designer, devido a comentários XML ausentes ou incorretos. Embora, algumas vezes, os avisos nos ajudem a melhorar e estabilizar nosso código, receber centenas de avisos de comentários XML é apenas uma dor. Advertências

Comentário XML ausente para o tipo ou membro publicamente visível… O comentário XML ativado… possui uma tag param para '…', mas não há parâmetro com esse nome O parâmetro '...' não possui tag param correspondente no comentário XML para '…' (mas outros parâmetros fazem) Solução

Você pode suprimir todos os avisos no Visual Studio.

  • Clique com o botão direito do mouse no projeto Visual Studio / Propriedades / Guia Compilar

  • Insira os seguintes números de aviso nos "Suprimir avisos": 1591,1572,1571,1573,1587,1570

Sprotty
fonte
6
Eu só precisava adicionar 1591 para suprimir os avisos de comentários em XML.
Brian Behm
Obrigado pela lista de códigos! Eu comecei a reuni-los um por um e no dia 3 de compilação com avisos cheguei a ideia de que eu preciso para levá-la de algum lugar como é :)
sarh
Algo não está certo, 1591 também remove advertências "obsoletos", mas MS indica trata-se de comentários só msdn.microsoft.com/en-us/library/zk18c1w9.aspx
Pawel Cioch
Também verifiquei no MS todos os 1572,1571,1573,1587,1570 e não os defini, são erros mais específicos, digamos que você tenha definido /// <summary> e depois cometa um erro nos parâmetros, você deve receber um aviso
Pawel Cioch
26

Há outra maneira de suprimir essas mensagens sem a necessidade de nenhuma alteração de código ou bloco de pragma. Usando o Visual Studio - Vá para propriedades do projeto> Compilar> Erros e avisos> Suprimir avisos - anexe 1591 à lista de códigos de aviso.

insira a descrição da imagem aqui

ekhanna
fonte
Essa é de longe a melhor, mais fácil e mais rápida de implementar resposta que eu já vi até agora para esse problema. É uma repetição de outra resposta acima, mas essa é muito mais visualmente descritiva, oferecendo uma resposta rápida e instantânea. Muito obrigado.
David Covey
Melhor resposta aqui. Impede-me de espalhar minha base de código em #pragma warning disabletodos os lugares, o que é apenas irritante.
RoadRunner - MSFT
23

Inserir um comentário XML. ;-)

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

Isso pode parecer uma piada à primeira vista, mas pode ser realmente útil. Para mim, foi útil pensar sobre o que os métodos fazem, mesmo para métodos privados (a menos que seja realmente trivial, é claro).

Matthias Meid
fonte
5
Eu sempre comento métodos, mas para propriedades (que são técnicas, mas geralmente têm implementações triviais e nomes evidentes), prefiro evitar o tédio e a repetição da adição de comentários XML supérfluos.
Peter Gluck
15

Isso ocorre porque um arquivo de documentação XML foi especificado nas Propriedades do projeto e Seu método / classe é público e não possui documentação.
Você também pode :

  1. Desative a documentação XML:

    Clique com o botão direito do mouse em seu projeto -> Propriedades -> guia 'Compilar' -> desmarque o arquivo de documentação XML.

  2. Sente-se e escreva a documentação você mesmo!

Resumo da documentação XML é assim:

/// <summary>
/// Description of the class/method/variable
/// </summary>
..declaration goes here..
Ajay Aradhya
fonte
Te agradece. Eu acho que dessa maneira é a melhor maneira correta de desativar o aviso
Ramil Aliyev
8

Eu queria adicionar algo às respostas listadas aqui:

Como Isak apontou, a documentação XML é útil para bibliotecas de classes, pois fornece inteligência para qualquer consumidor no Visual Studio. Portanto, uma solução fácil e correta é simplesmente desativar a documentação de qualquer projeto de nível superior (como UI, etc), que não será implementado fora de seu próprio projeto.

Além disso, eu queria ressaltar que o aviso é expresso apenas em membros publicamente visíveis . Portanto, se você configurar sua biblioteca de classes para expor apenas o que é necessário, poderá sobreviver sem documentação privatee internalmembros.

Mike Guthrie
fonte
8

Eu sei que esse é um encadeamento muito antigo, mas é a primeira resposta no google, então pensei em adicionar esta informação:

Esse comportamento ocorre apenas quando o nível de aviso está definido como 4 em "Propriedades do projeto" -> "Compilar" . A menos que você realmente precise de tanta informação, pode configurá-lo para 3 e se livrar desses avisos. Obviamente, alterar o nível de aviso afeta mais do que apenas comentários, portanto, consulte a documentação se não tiver certeza do que está perdendo:
https://msdn.microsoft.com/en-us/library/thxezb7y.aspx

Marius Agur
fonte
7

Na sua solução, depois de marcar a opção para gerar o arquivo XML Document, ele começará a verificar seus membros públicos, para obter o XMLDoc, se não houver, você receberá um aviso por cada elemento. se você realmente não deseja liberar sua DLL e também não precisa de documentação, vá para a sua solução, construa a seção e desative-a; caso contrário, se precisar, preencha-a e se não houver importância propriedades e campos, basta superá-los com instruções pré-compilador, #pragma warning disable 1591 você também pode restaurar o aviso: #pragma warning restore 1591

uso pragma: qualquer código no local antes do local para o qual você recebe o aviso do compilador ... (para arquivo, coloque-o no cabeçalho e não é necessário ativá-lo novamente, para agrupar classe única em uma classe ou para agrupar método) um método ou ... você não precisa envolvê-lo, pode chamá-lo e restaurá-lo casualmente (inicie no início do arquivo e termine dentro de um método)), escreva este código:

#pragma warning disable 1591 e caso precise restaurá-lo, use: #pragma warning restore 1591

Aqui está um exemplo:

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

Observe que a diretiva pragma começa no início da linha

deadManN
fonte
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
Petar
fonte
2

Definir o nível de aviso para 2 suprime essas mensagens. Não sei se é a melhor solução, pois também suprime avisos úteis.

danpop
fonte
Em vez de optar por isso, eu acho, desabilitar a documentação xml reduz os riscos.
Ajay Aradhya 31/03
2

A resposta de Jon Skeet funciona muito bem quando você está construindo com o VisualStudio. No entanto, se você estiver construindo o sln através da linha de comando (no meu caso, foi via Ant), poderá descobrir que o msbuild ignora os pedidos de supressão do sln.

Adicionar isso à linha de comando do msbuild resolveu o problema para mim:

/p:NoWarn=1591
Bill Tarbell
fonte
1

Arquivo > Editar > Visualizar projeto (clique)

Na parte inferior do arco suspenso (clique em Abrir / Trabalho atual > Propriedades ), abra a página de propriedades do projeto em "Build" em "Output". Caixa de seleção "Desmarcar" documentação XML .

Reconstruir e nenhum aviso.

tom
fonte
Verifique também todas as suas configurações de compilação. Eu tinha desmarcado para Debug, mas não para Release e estava muito confuso.
precisa saber é
11
Esta solução não é uma solução no caso de documentação da WebAPI. Você precisa dessa opção, mas suprime os avisos.
Pawel Cioch
1

Você precisa adicionar /// Comentário para o membro para o qual o aviso é exibido.

veja código abaixo

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

Ele exibe um aviso de aviso de falta de XML para o tipo ou membro publicamente visível '.EventLogger ()'

Eu adicionei comentário para o membro e aviso foi.

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

Recebi essa mensagem depois de anexar um atributo a um método

[webMethod]
public void DoSomething()
{
}

Mas a maneira correta era essa:

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