缺少公开可见的类型或成员的XML注释


381

我收到以下警告:“缺少公开可见的类型或成员的XML注释”。

如何解决呢?


8
我在Visual Studio中也看到了这一点。有人知道此警告来自什么软件吗?风格警察?特警?代码分析?如何关闭它?
Panic Panic

Answers:


668

5个选项:

  • 填写文档注释(很棒,但是很耗时)
  • 关闭注释生成(在项目属性中)
  • 禁用项目属性中的警告(在“项目属性”中,转到“项目属性”->“生成”>“错误和警告”(部分),禁止警告(文本框),添加1591(以逗号分隔的列表))。默认情况下,它将更改活动配置,请考虑将配置更改为全部。
  • 用于#pragma warning disable 1591仅对某些代码位(及#pragma warning restore 1591之后)禁用警告
  • 忽略警告(不好的主意-您会错过新的“真实”警告)

5
@Jon,找到了解决方案:如果您收到带有部分类的Gereated代码的警告,请查找未生成的部分类的“另一半”。如果在此处添加XML注释,则会警告生成的代码分解器。我从WP7项目中的XAML代码生成的App.gics文件中对App类发出了警告。要解决此问题,我必须在App.xaml.cs文件(未生成)中添加XML注释。
Marcel W

@MarcelW:啊,那不是给生成的成员的吗?还是它们都是内部的?那将是有道理的
乔恩·斯基特

7
另外,如果您从服务参考自动生成的代码中收到此警告,则可以右键单击服务参考,选择“配置服务参考...”,然后将“生成类的访问级别”更改为“内部”。
Lee Grissom

9
如果您按照@NickJ的说明禁用警告,请确保对所有配置都进行更改,而不仅限于debug \ release。
2014年

5
如果要隐藏整个类的代码,也可以将其添加为类属性:[System.Diagnostics.CodeAnalysis.SuppressMessage(“ Microsoft.Usage”,“ CS1591”)]
cr1pto 2016年

92

向公开可见的类型和成员添加XML注释:)

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

您需要<summary>所有成员都具有这些类型的注释-这些注释也会显示在“智能感知”弹出菜单中。

收到此警告的原因是因为您已将项目设置为输出文档xml文件(在项目设置中)。这对于类库(.dll程序集)很有用,这意味着.dll的用户可以在Visual Studio中直接获取API的智能文档。

我建议您给自己一份GhostDoc Visual Studio 插件的副本。使文档编写变得容易得多。


8
+1提及GhostDoc。从来不知道这一点,它无疑使记录变得容易。
Vivelin

7
+1表示警告原因。在项目属性(VS 2008)的“生成”下找到设置,并在十分奇怪的情况下关闭了十分之一的项目,将其关闭。
查克·威尔伯

30
-1对于推荐GhostDoc-我见过的最愚蠢的插件。它生成文档。现在暂停片刻考虑一下。您希望代码更易于理解,因此您使用一种仅根据方法名称和参数类型生成文档的工具。这对您有意义吗?用户可以看到参数的名称和类型,并添加注释DateTime date- 日期确实无济于事。
gdoron支持Monica 2015年

4
@gdoron,您可能没有想到,但是您可以编辑GhostDoc生成的文档,与从头开始编写整个文档相比,它将节省大量时间。
Joel McBeth 2015年

3
GhostDoc所做的不只是猜测注释应该是什么-尽管在大多数情况下,注释很接近,并且您只需要编辑几个词而不是将整个内容输入出来,以及您是否在正确地编写文档(而且可能不是),对于大多数事情,都有一个模板,它们的措辞方式(用于属性,构造函数等),GhostDoc将它们放在-甚至更酷:如果您在子类中,则可以填写从基类为模板的工作是与该文档中,而不是手工复制它-它把在异常导语,等等
BrainSlugs83

41

禁止显示XML注释警告

(不是我的工作,但是我发现它很有用,所以我加入了文章和链接)

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

在这里,我将向您展示如何在Visual Studio构建之后抑制XML注释的警告。

背景

如果您已在Visual Studio项目设置中选中“ XML文档文件”标记,则会创建一个包含所有XML注释的XML文件。另外,由于缺少或错误的XML注释,在设计器生成的文件中也会收到很多警告。虽然有时警告可以帮助我们改善和稳定代码,但获得数百个XML注释警告只是一个痛苦。警告事项

缺少公开类型或成员的 XML注释…的 XML注释…带有参数“…”,但没有该名称的参数参数……的XML注释中没有匹配的参数…“(但其他参数)解决方案

您可以在Visual Studio中禁止显示所有警告。

  • 右键单击Visual Studio项目/属性/生成选项卡

  • 在“禁止警告”中插入以下警告编号:1591,1572,1571,1573,1587,1570


6
我只需要添加1591即可取消Xml注释警告。
Brian Behm

感谢您的代码清单!我已经开始一个一个地收集它们,并在带有警告的第三个版本中发现我需要从某个地方拿走它:)
sarh 2015年

什么是不正确,也1591删除“过时”的警告,但MS表明它是关于评论仅供msdn.microsoft.com/en-us/library/zk18c1w9.aspx
帕维尔Cioch

我还对MS全部1572,1571,1573,1587,1570进行了检查,但我不会设置它们,它们是更具体的错误,假设您设置了/// <summary>,然后在参数中犯了一个错误,您应该得到警告
Pawel Cioch '16

26

还有另一种方法可以抑制这些消息,而无需任何代码更改或编译指示块。使用Visual Studio-转到项目属性>生成>错误和警告>禁止警告-将1591附加到警告代码列表中。

在此处输入图片说明


到目前为止,这是迄今为止我针对此问题所见的最好,最简单和最快的答案。这是上面另一个答案的重复,但是这个答案在视觉上更具描述性,可以迅速给出答案。非常感谢你。
David Covey

最好的答案在这里。阻止我将代码库散布到#pragma warning disable任何地方,这很烦人。
RoadRunner-MSFT

23

插入XML注释。;-)

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

乍一看,这可能看起来像个玩笑,但实际上可能有用。对我来说,思考甚至私有方法都可以使用的方法很有帮助(当然,除非真的很琐碎)。


5
我总是注释方法,但是对于属性(从技术上来说是方法,但通常具有琐碎的实现和不言而喻的名称),我宁愿避免乏味和重复添加多余的XML注释。
Peter Gluck 2014年

15

这是因为在您的项目属性中指定了XML文档文件,并且您的方法/类是公共的,并且缺少文档。
您可以:

  1. 禁用XML文档:

    右键单击项目->属性->“构建”选项卡->取消选中XML文档文件。

  2. 自己坐下来写文档!

XML文档的摘要如下所示:

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

谢谢。我认为这种方式是禁用警告的最佳正确方法
拉米尔·阿利耶夫

8

我想在这里列出的答案中添加一些内容:

正如Isak所指出的,XML文档对类库很有用,因为它为Visual Studio中的任何使用者提供了智能感知。因此,一个简单而正确的解决方案是简单地关闭任何顶级项目(如UI等)的文档,而这些文档不会在自己的项目之外实现。

另外,我想指出的是,警告仅针对公开可见的成员。因此,如果您将类库设置为仅公开需要的内容,则无需编写文档privateinternal成员即可获得帮助。


8

我知道这是一个非常旧的线程,但这是google上的第一个响应,因此我想添加以下信息:

仅在“项目属性”->“构建”下将警告级别设置为4时,才会发生此行为。 。除非您真的需要那么多信息,否则可以将其设置为3,这样您将摆脱这些警告。当然,更改警告级别不仅会影响注释,因此,如果不确定不确定会丢失什么,请参考文档:https :
//msdn.microsoft.com/zh-cn/library/thxezb7y.aspx


7

在您的解决方案中,一旦选中了生成XML文档文件的选项,它将开始检查您的公共成员是否具有XMLDoc,如果没有,则每个元素都会收到警告。如果您确实不想发布DLL,并且也不需要文档,则转到解决方案,构建部分,然后将其关闭,否则,如果需要,请填充它们,如果不重要属性和字段,只需使用预编译器说明超越它们, #pragma warning disable 1591 您还可以恢复警告: #pragma warning restore 1591

编译指示用法:在代码中您得到编译器警告的位置之前的任何位置(对于文件,请将其放在标头中,并且您无需再次启用它,单个类环绕类或方法环绕)一个方法,或者...您不需要包装它,可以随意调用并还原它(从文件开头开始,在方法内部结束),编写以下代码:

#pragma warning disable 1591 如果需要还原它,请使用: #pragma warning restore 1591

这里是一个例子:

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

请注意,pragma指令从行首开始


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

将警告级别设置为2会禁止显示此消息。不知道这是否是最佳解决方案,因为它还会抑制有用的警告。


我想,与其选择这样做,不如禁用xml文档可以降低风险。
Ajay Aradhya '17

2

当您使用VisualStudio进行构建时,Jon Skeet的答案非常有用。但是,如果通过命令行(在我的情况下是通过Ant构建)来构建sln,则可能会发现msbuild忽略了sln抑制请求。

将其添加到msbuild命令行为我解决了这个问题:

/p:NoWarn=1591

1

文件 > 编辑 > 查看项目(单击)

下拉弓的底部(单击“ 打开/当前工作” >“ 属性”),在“输出”下的“构建”中打开项目属性页。“取消选中” XML文档复选框。

重建,没有警告。


确保还检查所有构建配置。我没有为Debug选中它,但没有为Release选中它,因此感到非常困惑。
MattM '16

1
对于WebAPI文档,此解决方案不是解决方案。您需要启用此选项,但禁止显示警告。
Pawel Cioch '16

1

您需要为显示警告的成员添加///。

见下面的代码

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

对于公开可见的类型或成员'.EventLogger()',它显示警告缺少XML注释。

我为成员添加了评论,并且警告消失了。

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

-5

将属性附加到方法后,我收到了该消息

[webMethod]
public void DoSomething()
{
}

但是正确的方法是这样的:

[webMethod()] // Note the Parentheses 
public void DoSomething()
{
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.