2009-02-26 12 views
17

Ist es möglich, eine Klassenzusammenfassung zur Laufzeit in C# zu erhalten? Ich möchte Klassenzusammenfassung durch Reflexion erhalten und dann in die Konsole schreiben. nach Klasse Zusammenfassung ich meine Zusammenfassung Kommentare vor Klassendefinition, so etwas wie diese:Ist es möglich, eine Klassenzusammenfassung zur Laufzeit zu erhalten?

/// <summary> 
/// some description 
/// </summary> 
class SomeClass 
{ 
} 

Ich weiß nicht, ob diese Kommentare den Code nach dem Kompilieren verfügbar sind, aber wenn sie vielleicht gibt es eine Möglichkeit, sie zu erhalten in Code.

Vielen Dank im Voraus für Hilfe.

Antwort

6

ich einmal mit diesem eine Weile zurück, verwirrt, und verwendet diese Jungs Lösung. Funktionierte ziemlich gut:

http://jimblackler.net/blog/?p=49

+0

Es funktionierte auch für mich. – empi

+2

Um Ihre Antwort ein wenig zu erarbeiten: diese Lösung macht tatsächlich eine Umgehung virtuell Verknüpfung mit dem generierten XML-Dokument. So funktioniert es für Ihren eigenen Code sowie die meisten der Drittanbieter-Bibliotheken (OSS und Es gibt jedoch einige Fälle, in denen Sie das xml doc nicht erhalten können und es daher generell nicht möglich ist. – mbx

+1

Bitte geben Sie die relativen Details Ihres Links an, es wäre bedauerlich, wenn der Link in der Zukunft stünde, was diese Antwort nutzlos macht - Zumal es die akzeptierte Antwort ist. – Rob

1

Sie können, wenn Sie eine XML-Dokumentationsdatei ausgeben. Der Prozess würde die Verwendung von Reflektion umfassen, um alle öffentlichen Member des Typs abzurufen, und dann mithilfe von XPath die Dokumentation aus dem generierten XML-Dokument lesen.

UPDATE: Um das XML-Dokument in Ihre dll/exe einzufügen, fügen Sie es einfach als eingebettete Ressource hinzu und kompilieren Sie es zweimal, wenn sich die Dokumentation ändert.

+0

+1 für diese Lösung. Ich habe eine Klasse, die das XML liest. Es ist auch gut, wenn Sie einen Kommentar zu einer öffentlichen Methode verfehlen, wird er gewarnt, damit Sie ihn nicht verpassen. – Yogurtu

3

Nein, sie sind nicht durch Reflexion verfügbar. Siehe msdn:

Die XML-Dokument-Kommentare sind keine Metadaten. Sie sind nicht in der kompilierten Assembly enthalten und daher sind sie nicht zugänglich durch Reflexion.

0

Nein, diese Kommentare sind nicht in Ihrer kompilierten Assembly enthalten.

Visual Studio kann eine XML-Datei in Ihrem Ausgabeordner (\ bin \ your_project.xml) erstellen, die diese Kommentare enthält. Wenn Ihre Anwendung mit dieser XML-Datei verteilt würde, könnten Sie programmatisch darauf zugreifen.

3

Sie können nicht auf diese zur Laufzeit zugreifen, da diese vom Compiler als Kommentare betrachtet werden.

Wenn Sie jedoch ein Attribut verwenden möchten, um Informationen anzugeben und während der Laufzeit über Reflektion darauf zuzugreifen, können Sie das tun.

Siehe Creating Custom Attributes (C# Programming Guide) für die Attributerstellung und Accessing Attributes With Reflection (C# Programming Guide) für den Laufzeitzugriff.

Beispiel von MSDN:

Author.cs:

public class Author : System.Attribute 
{ 
    private string name; 
    public double version; 

    public Author(string name) 
    { 
     this.name = name; 
     version = 1.0; 
    } 
} 

SampleClass.cs:

[Author("H. Ackerman", version = 1.1)] 
class SampleClass 
{ 
    // H. Ackerman's code goes here... 
} 
+0

Es ist eine Lösung, aber wenn Sie das verwenden, müssen Sie zweimal Ihre Hilfe schreiben. Eins im Attribut und anderes in der Zusammenfassung, wenn Sie es auf Intellicense lesen möchten. :( – Yogurtu

5

Ich halte das Jolt.NET Projekt auf CodePlex und haben eine Funktion implementiert, die diese sehr Aufgabe ausführt. Weitere Informationen finden Sie in der Bibliothek Jolt.

Im Wesentlichen ermöglicht die Bibliothek das programmatische Suchen und Abfragen einer XML-Dokumentendokumentdatei für eine Assembly mithilfe der Metadatentypen in System.Reflection (d. H.MethodInfo, PropertyInfo, etc ...).