Vererben von XML-Kommentaren von Schnittstellen in C #


78

Ich habe mich gefragt, ob jemand weiß, wie man einen XML-Kommentar der Schnittstelle mit einer Implementierung verknüpft. Das Problem ist, dass die Basiskommentare zuerst von meiner Benutzeroberfläche stammen sollen. Beispiel:

interface myinterface {

       /// <summary>
       /// Does something.
       /// </summary>
       void method1(string foo);

}

und dann ist die Implementierung:

public class myclass : myinterface {


       public void method1(string foo) {
             //do something...
       }
}

Wenn ich jetzt mit der Maus über die Methode schwebe, nachdem ich das Objekt instanziiert habe:

myclass foo = new myclass();
foo.method1("do something");

Wie kann ich die Kommentare im Hover-Popup anzeigen lassen? Gibt es eine Möglichkeit, die Schnittstellenkommentare mit der Implementierung zu verknüpfen? Ich weiß, dass es in Java einen Weg gibt, kann aber keine Lösung für C # finden.

Vielen Dank


14
+1 für das ist eine verdammt gute Frage ...
jcolebrand

3
Ich habe mich immer darüber gewundert. Es sollte ein Attribut geben, das Sie einer Klasse hinzufügen können, um die Dokumentation zu erben.
BentOnCoding


Was für eine seltsame Auslassung von VS: /
Nawfal

VS Jungs, können Sie bitte eine Zusammenfassung von Interface anzeigen, wenn diese für die eigentliche Methode nicht verfügbar ist?
Arjun_TECH

Antworten:


18

Das Verknüpfen von XML-Kommentaren ist meiner Meinung nach nicht möglich, aber Sie können ein Tool wie GhostDoc verwenden, um den XML-Kommentar von Ihrer Schnittstelle / Basisklasse in die Implementierungs- / abgeleitete Klasse zu kopieren.


1
Ja, verwenden Sie GhostDoc. Zuerst wird angezeigt, ob eine übergeordnete Klasse oder Methode überschrieben wurde, und in diesem Fall wird der Kommentar kopiert. ReSharper kopiert auch XML-Doc-Kommentare, um neue Oberklassen / Schnittstellen zu extrahieren oder Mitglieder in einer Hierarchie nach oben / unten zu verschieben.
KeithS

Benötigt dies nicht die Pro-Version? Ich kann dies nur mit der Nicht-Pro-Version tun, indem ich jeweils ein Mitglied mache, und es funktioniert nicht auf Klassenebene.
Keith

1
ReSharper kann dies auch. Wenn Sie es bereits besitzen, platzieren Sie den Cursor über einer geerbten Methode / Eigenschaft, drücken ALT+RETURNSie und Sie können "Kommentare von der Basis kopieren". ReSharper überrascht mich jeden Tag! :-)
itmuckel

9

XMLDoc definiert ein Tag <include />zum Einfügen von Kommentaren aus einer anderen Datei, die es seit Visual Studio 2003 gibt. Die größte Einschränkung ist, dass die referenzierte Datei eine Datei sein sollte, die nur XMLDoc-Dokumentation enthält, keine andere Quelldatei.

Weitere Informationen finden Sie auf der MSDN-Seite .


1
Keine richtige Antwort, aber trotzdem wirklich nützliche Informationen, also danke
Basic

7

Wenn Sie GhostDoc verwenden , hilft dies sehr beim "Transportieren" der Dokumentation von den Schnittstellen zum Implementierungscode.


1
Alle Tipps, wie dies erreicht wird (ich habe gerade Ghost Doc v4 installiert). Oder ist das eine Pro / Free-Version?
Konstantin

1
@Konstantin Ich habe immer die kostenlose Version verwendet und nie etwas Spezielles getan, um dies zu erreichen. Ich schreibe nur die Dokumente in die Schnittstelle und wenn ich dann STRG + D für eine Methode in einer implementierenden Klasse drücke (wo die Methode noch keine Dokumente hat), wird sie von der entsprechenden Methode in der Schnittstelle kopiert. Zumindest funktionierte es früher so (ohne GhostDoc in meinem aktuellen Projekt).
Fredrik Mörk

2
Dank scheint heutzutage ein Merkmal der Pro-Version zu sein.
Konstantin

6 Jahre später habe ich gerade Ghostdoc Community (kostenlos) ausprobiert und es funktioniert. Schreiben Sie das Dokument in die Schnittstelle und geben Sie einfach ///die Methode in der implementierenden Klasse ein.
Michaël Polla


0

http://blog.x-tensive.com/2008/02/fixml.html

Es ist ein Postprozessor, der bestimmte zusätzliche Optionen hat, wenn das ursprüngliche Dokumentationssystem fehlt.

Von der Website:

Kurze Zusammenfassung:

FiXml ist ein Postprozessor der XML-Dokumentation, die von C # \ Visual Basic.Net erstellt wurde. Es werden einige der ärgerlichsten Fälle im Zusammenhang mit dem Schreiben von XML-Dokumentation in diesen Sprachen behandelt: - Keine Unterstützung für das Erben der Dokumentation von der Basisklasse oder der Schnittstelle. Das heißt, eine Dokumentation für ein überschriebenes Mitglied sollte von Grund auf neu geschrieben werden, obwohl es normalerweise durchaus wünschenswert ist, zumindest einen Teil davon zu erben. - Keine Unterstützung für das Einfügen häufig verwendeter Dokumentationsvorlagen, z. B. "Dieser Typ ist Singleton - verwenden Sie seine Eigenschaft, um die einzige Instanz davon abzurufen." Oder sogar "Initialisiert eine neue Klasseninstanz".


Weiß jemand, ob X-Tensive FiXml die Quelldatei oder nur die XML-Ausgabedokumente ändern soll? Oh - es befindet sich jetzt an einer etwas anderen Stelle als Teil von Xtensive.MSBuildTasks x-tensive.com/Downloads/?Path=Freeware \ Xtensive.MSBuildTasks)
kpollock

0

Ich habe ein Befehlszeilentool erstellt, um die XML-Dokumentationsdateien nachzubearbeiten und Unterstützung für das Tag <inheritdoc /> hinzuzufügen.

Es hilft zwar nicht mit Intellisense im Quellcode, ermöglicht jedoch die Aufnahme der geänderten XML-Dokumentationsdateien in ein NuGet-Paket und funktioniert daher mit Intellisense in NuGet-Paketen, auf die verwiesen wird.

Weitere Informationen finden Sie unter www.inheritdoc.io (kostenlose Version verfügbar).


1
Ich benutze dieses Tag häufig, erinnere mich aber nicht daran, ein System von Drittanbietern installiert zu haben, um dies zu tun. Seltsam, dass es sonst niemand erwähnt.
Einseitig
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.