Tidak ada komentar XML untuk tipe atau anggota yang terlihat oleh publik

381

Saya mendapatkan peringatan ini: "Komentar XML tidak ada untuk tipe atau anggota yang terlihat secara publik".

Bagaimana cara mengatasinya?

J.-BC
sumber
8
Saya melihat ini juga di Visual Studio. Adakah yang tahu perangkat lunak apa peringatan ini berasal? Gaya Cop? Fx Cop? Analisis Kode? Bagaimana saya bisa mematikannya?
Kolonel Panic

Jawaban:

668

5 opsi:

  • Isi komentar dokumentasi (hebat, tetapi memakan waktu)
  • Matikan pembuatan komentar (dalam properti proyek)
  • Nonaktifkan peringatan di properti proyek (di 'Properti proyek', masuk ke Properti proyek -> Bangun> "Kesalahan dan peringatan" (bagian), Peringatan Penekan (kotak teks), tambahkan 1591 (daftar yang dipisahkan koma)). Secara default itu akan mengubah Konfigurasi Aktif, pertimbangkan untuk mengubah konfigurasi ke Semua.
  • Gunakan #pragma warning disable 1591untuk menonaktifkan peringatan hanya untuk beberapa bit kode (dan #pragma warning restore 1591sesudahnya)
  • Abaikan peringatan (ide buruk - Anda akan kehilangan peringatan "nyata" baru)
Jon Skeet
sumber
5
@ Jon, menemukan solusinya: Jika Anda mendapatkan peringatan ini untuk kode gereated dengan kelas parsial, cari "setengah lainnya" dari kelas parsial yang tidak dihasilkan. Jika Anda menambahkan komentar XML di sana, peringatan untuk kode yang dihasilkan tidak akan muncul. Saya mendapat peringatan ini untuk kelas App di file App.gics yang dihasilkan dari kode XAML dalam proyek WP7. Untuk mengatasinya, saya harus menambahkan komentar XML dalam file App.xaml.cs (yang tidak dihasilkan).
Marcel W
@ MarscelW: Ah, jadi ini bukan untuk anggota yang dihasilkan? Atau apakah semua itu internal? Itu masuk akal ...
Jon Skeet
7
Selain itu, jika Anda mendapatkan peringatan ini dari kode yang dibuat oleh Referensi Layanan , Anda dapat mengklik kanan pada referensi layanan, pilih "Konfigurasikan Referensi Layanan ...", lalu ubah "Level akses untuk kelas yang dihasilkan" ke Internal.
Lee Grissom
9
Jika Anda menonaktifkan peringatan sebagai @NickJ jelasd, pastikan Anda mengubahnya untuk semua konfigurasi, dan tidak hanya untuk debug \ rilis.
Avital
5
Anda juga dapat menambahkan ini sebagai atribut kelas jika Anda ingin menekan kode untuk seluruh kelas: [System.Diagnostics.CodeAnalysis.SuppressMessage ("Microsoft.Usage", "CS1591")]
cr1pto
92

Tambahkan komentar XML ke tipe dan anggota yang terlihat untuk umum :)

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

Anda memerlukan <summary>komentar jenis ini pada semua anggota - ini juga muncul di menu popup intellisense.

The Alasan Anda mendapatkan peringatan ini adalah karena Anda telah mengatur proyek Anda untuk dokumentasi file output xml (dalam pengaturan proyek). Ini berguna untuk pustaka kelas (.dll assemblies) yang berarti pengguna .dll Anda mendapatkan dokumentasi intellisense untuk API Anda di studio visual.

Saya sarankan Anda mendapatkan sendiri salinan AddIn GhostDoc Visual Studio .. Membuat dokumentasi lebih mudah.

Isak Savo
sumber
8
+1 untuk menyebutkan GhostDoc. Tidak pernah tahu tentang itu, tentu saja membuat dokumentasi menjadi lebih mudah.
Vivelin
7
+1 untuk memberi alasan peringatan. Menemukan pengaturan di bawah Build in the project properties (VS 2008) dan mematikannya pada satu dari sepuluh proyek yang secara misterius memeriksanya tanpa alasan yang jelas.
Chuck Wilbur
30
-1 Untuk merekomendasikan GhostDoc- AddOn paling bodoh yang pernah saya lihat. Ini menghasilkan dokumentasi. Sekarang berhenti sejenak untuk memikirkannya. Anda ingin kode Anda lebih dimengerti sehingga Anda menggunakan alat yang menghasilkan dokumentasi hanya berdasarkan nama metode dan tipe argumen. Apakah masuk akal untuk Anda? Pengguna dapat melihat nama dan jenis argumen, menambahkan komentar ke DateTime date- Tanggal benar-benar tidak membantu.
gdoron mendukung Monica
4
@ gdoron, ini mungkin tidak terjadi pada Anda, tetapi Anda dapat mengedit dokumentasi yang dihasilkan GhostDoc, yang akan menghemat banyak waktu Anda dibandingkan menulis seluruh dokumentasi dari awal.
Joel McBeth
3
GhostDoc melakukan lebih dari sekedar menebak apa komentar yang seharusnya - meskipun sebagian besar waktu, itu cukup dekat dan Anda hanya perlu mengedit beberapa kata daripada mengetik semuanya - dan jika Anda mendokumentasikan dengan benar (dan Anda mendokumentasikannya dengan benar) mungkin tidak), ada templat untuk sebagian besar hal, bagaimana mereka perlu diucapkan (untuk properti, konstruktor, dll.), dan GhostDoc memasukkannya ke dalam - bahkan lebih dingin: Jika Anda berada di kelas anak-anak, itu dapat isi dokumentasi dengan itu dari kelas dasar sebagai templat untuk dikerjakan, alih-alih menyalinnya dengan tangan - itu memasukkan pengecualian
pd kulit sampul
41

Menekan Peringatan untuk komentar XML

(bukan pekerjaan saya, tapi saya merasa berguna jadi saya sudah menyertakan artikel & tautan)

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

Di sini saya akan menunjukkan kepada Anda, bagaimana Anda bisa menekan peringatan untuk komentar XML setelah Visual Studio build.

Latar Belakang

Jika Anda telah memeriksa tanda "File dokumentasi XML" di pengaturan proyek Visual Studio, file XML yang berisi semua komentar XML dibuat. Selain itu Anda akan mendapatkan banyak peringatan juga di file yang dihasilkan desainer, karena komentar XML yang hilang atau salah. Meskipun terkadang peringatan membantu kita meningkatkan dan menstabilkan kode kita, mendapatkan ratusan peringatan komentar XML hanya menyusahkan. Peringatan

Hilang XML komentar untuk jenis terlihat oleh publik atau anggota ... XML komentar pada ... memiliki tag param untuk '...', tetapi tidak ada parameter dengan nama yang Parameter '...' tidak memiliki tag yang cocok param dalam komentar XML untuk '...' (tapi parameter lain lakukan) Solusi

Anda dapat menekan setiap peringatan di Visual Studio.

  • Klik kanan proyek Visual Studio / Properties / Build Tab

  • Masukkan nomor peringatan berikut dalam "Peringatan penekanan": 1591.1572.1571.1573.1587.1570

Bintik-bintik
sumber
6
Saya hanya perlu menambahkan 1591 untuk menekan peringatan komentar Xml.
Brian Behm
Terima kasih untuk daftar kodenya! Saya sudah mulai mengumpulkan mereka satu per satu dan pada bangunan ke-3 dengan peringatan saya mengetahui bahwa saya perlu mengambilnya dari suatu tempat seperti ini :)
sarh
Ada yang tidak beres, 1591 juga menghapus peringatan "Usang", tetapi MS mengindikasikan ini hanya tentang komentar msdn.microsoft.com/en-us/library/zk18c1w9.aspx
Pawel Cioch
Saya juga memeriksa MS semua 1572.1571.1573.1587.1570, dan saya tidak akan mengaturnya, itu adalah kesalahan yang lebih spesifik, katakanlah Anda telah menetapkan /// <summary> dan kemudian Anda membuat kesalahan dalam params, Anda harus mendapat peringatan
Pawel Cioch
26

Ada cara lain Anda dapat menekan pesan-pesan ini tanpa perlu perubahan kode atau blok pragma. Menggunakan Visual Studio - Buka properti proyek> Bangun> Kesalahan dan Peringatan> Peringatan Penekan - tambahkan 1591 ke daftar kode peringatan.

masukkan deskripsi gambar di sini

ekhanna
sumber
Sejauh ini, ini adalah jawaban terbaik, termudah, dan tercepat untuk mengimplementasikan jawaban yang saya lihat sejauh ini untuk masalah ini. Ini adalah pengulangan dari jawaban lain di atas, tetapi yang ini jauh lebih deskriptif secara visual memberikan jawaban instan cepat. Terima kasih banyak.
David Covey
Jawaban terbaik di sini. Mencegah saya dari menyebarkan basis kode saya ke #pragma warning disablemana - mana, yang hanya mengganggu.
RoadRunner - MSFT
23

Masukkan komentar XML. ;-)

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

Sekilas ini mungkin tampak seperti lelucon, tetapi sebenarnya bisa bermanfaat. Bagi saya ternyata berguna untuk memikirkan tentang metode apa yang dilakukan bahkan untuk metode pribadi (kecuali benar-benar sepele, tentu saja).

Matthias Meid
sumber
5
Saya selalu berkomentar metode, tetapi untuk properti (yang merupakan metode teknis tetapi biasanya memiliki implementasi sepele dan nama jelas) Saya lebih suka untuk menghindari kebosanan dan pengulangan menambahkan komentar XML berlebihan.
Peter Gluck
15

Ini karena file dokumentasi XML telah ditentukan dalam Properti Proyek Anda dan Metode / Kelas Anda bersifat publik dan tidak memiliki dokumentasi.
Anda dapat:

  1. Nonaktifkan dokumentasi XML:

    Klik kanan pada Proyek Anda -> Properti -> tab 'Bangun' -> hapus centang File Dokumentasi XML.

  2. Duduk dan tulis sendiri dokumentasi!

Ringkasan dokumentasi XML seperti ini:

/// <summary>
/// Description of the class/method/variable
/// </summary>
..declaration goes here..
Ajay Aradhya
sumber
Terimakasih. Saya pikir cara ini adalah cara terbaik yang benar untuk menonaktifkan peringatan
Ramil Aliyev
8

Saya ingin menambahkan sesuatu ke jawaban yang tercantum di sini:

Seperti yang Isak tunjukkan, dokumentasi XML berguna untuk Class Libraries, karena menyediakan intellisense kepada setiap konsumen dalam Visual Studio. Oleh karena itu, solusi yang mudah dan benar adalah dengan mematikan dokumentasi untuk setiap proyek tingkat atas (seperti UI, dll), yang tidak akan dilaksanakan di luar proyeknya sendiri.

Selain itu saya ingin menunjukkan bahwa peringatan tersebut hanya mengungkapkan anggota yang dapat dilihat oleh publik . Jadi, jika Anda mengatur perpustakaan kelas Anda hanya untuk mengekspos apa yang diperlukan, Anda dapat bertahan tanpa mendokumentasikan privatedan internalanggota.

Mike Guthrie
sumber
8

Saya tahu ini adalah utas yang sangat lama, tetapi ini adalah tanggapan pertama di google jadi saya pikir saya akan menambahkan sedikit informasi

ini : Perilaku ini hanya terjadi ketika tingkat peringatan diatur ke 4 di bawah "Properti Proyek" -> "Bangun" . Kecuali Anda benar-benar membutuhkan informasi sebanyak itu, Anda dapat mengaturnya menjadi 3 dan Anda akan menghilangkan peringatan ini. Tentu saja, mengubah tingkat peringatan memengaruhi lebih dari sekadar komentar, jadi silakan lihat dokumentasi jika Anda tidak yakin apa yang akan Anda lewatkan:
https://msdn.microsoft.com/en-us/library/thxezb7y.aspx

Marius Agur
sumber
7

Dalam solusi Anda, setelah Anda memeriksa opsi untuk menghasilkan file Dokumen XML, itu mulai memeriksa anggota publik Anda, untuk memiliki XMLDoc, jika mereka tidak, Anda akan menerima peringatan per setiap elemen. jika Anda tidak benar-benar ingin melepaskan DLL Anda, dan juga Anda tidak perlu dokumentasi kemudian, pergi ke solusi Anda, membangun bagian, dan mematikannya, jika tidak Anda perlu, maka isilah, dan jika ada yang tidak penting properti dan bidang, hanya melampauinya dengan instruksi pra-kompiler #pragma warning disable 1591 Anda juga dapat mengembalikan peringatan: #pragma warning restore 1591

penggunaan pragma: di mana saja dalam kode sebelum tempat Anda mendapatkan peringatan kompiler untuk ... (untuk file, taruh di header, dan Anda tidak perlu mengaktifkannya lagi, untuk kelas tunggal membungkus kelas, atau untuk metode membungkus suatu metode, atau ... Anda tidak perlu membungkusnya, Anda dapat memanggilnya dan mengembalikannya dengan santai (mulai dari awal file, dan berakhir di dalam suatu metode)), tulis kode ini:

#pragma warning disable 1591 dan jika Anda perlu mengembalikannya, gunakan: #pragma warning restore 1591

Berikut sebuah contoh:

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

Perhatikan bahwa arahan pragma dimulai pada awal baris

deadManN
sumber
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
sumber
2

Mengatur level peringatan ke 2 akan menekan pesan ini. Tidak tahu apakah itu solusi terbaik karena juga menekan peringatan yang bermanfaat.

danpop
sumber
Daripada memilih untuk ini, saya kira, menonaktifkan dokumentasi xml mengurangi risiko.
Ajay Aradhya
2

Jawaban Jon Skeet bekerja sangat baik ketika Anda membangun dengan VisualStudio. Namun, jika Anda sedang membangun sln melalui baris perintah (dalam kasus saya itu adalah melalui Ant) maka Anda mungkin menemukan bahwa msbuild mengabaikan permintaan supresi sln.

Menambahkan ini ke baris perintah msbuild memecahkan masalah bagi saya:

/p:NoWarn=1591
Bill Tarbell
sumber
1

File > Edit > Lihat Proyek (klik)

Bawah busur drop-down (klik Open / Current work > Properties ), buka halaman properti proyek di "Build" di bawah "Output". Kotak centang "Hapus centang" Dokumentasi XML .

Bangun kembali dan tidak ada peringatan.

tom
sumber
Pastikan juga untuk memeriksa semua konfigurasi build Anda. Saya telah menghapus centangnya untuk Debug tetapi tidak untuk Rilis dan sangat bingung.
MattM
1
Solusi ini bukan solusi untuk dokumentasi WebAPI. Anda membutuhkan opsi ini, tetapi menekan peringatan.
Pawel Cioch
1

Anda perlu menambahkan /// Komentar untuk anggota yang peringatannya ditampilkan.

lihat kode di bawah ini

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

Ini menampilkan peringatan Komentar XML yang Hilang untuk tipe yang terlihat untuk umum atau anggota '.EventLogger ()'

Saya menambahkan komentar untuk anggota dan peringatan hilang.

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

Saya mendapat pesan itu setelah melampirkan atribut ke suatu metode

[webMethod]
public void DoSomething()
{
}

Tetapi cara yang benar adalah ini:

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