Λάβετε μέσω προγραμματισμού σχόλια περίληψης κατά την εκτέλεση

Λάβετε μέσω προγραμματισμού σχόλια περίληψης κατά την εκτέλεση

Μια λύση - Χρήση προβληματισμού στο Program.DLL/EXE μαζί με το αρχείο Program.XML

Αν ρίξετε μια ματιά στο αδερφικό αρχείο .XML που δημιουργήθηκε από το Visual Studio, θα δείτε ότι υπάρχει μια αρκετά επίπεδη ιεραρχία /members/member. Το μόνο που έχετε να κάνετε είναι να κρατήσετε κάθε μέθοδο από το DLL σας μέσω του αντικειμένου MethodInfo. Μόλις έχετε αυτό το αντικείμενο, στραφείτε στο XML και χρησιμοποιήστε το XPATH για να λάβετε το μέλος που περιέχει την τεκμηρίωση XML για αυτήν τη μέθοδο.

Προηγείται επιστολή των μελών. Το έγγραφο XML για μεθόδους προηγείται από το "M:" για την κλάση από το "T:" κ.λπ.

Φορτώστε τον αδελφό σας XML

string docuPath = dllPath.Substring(0, dllPath.LastIndexOf(".")) + ".XML";

if (File.Exists(docuPath))
{
  _docuDoc = new XmlDocument();
  _docuDoc.Load(docuPath);
}

Χρησιμοποιήστε αυτό το xpath για να λάβετε το μέλος που αντιπροσωπεύει τη μέθοδο XML docu

string path = "M:" + mi.DeclaringType.FullName + "." + mi.Name;

XmlNode xmlDocuOfMethod = _docuDoc.SelectSingleNode(
    "//member[starts-with(@name, '" + path + "')]");

Τώρα σαρώστε τους παιδικούς κόμβους για όλες τις σειρές του "///"Μερικές φορές η σύνοψη /// περιέχει επιπλέον κενά, αν αυτό σας ενοχλεί, χρησιμοποιήστε αυτό για να αφαιρέσετε

var cleanStr = Regex.Replace(row.InnerXml, @"\s+", " ");

Η σύνοψη XML δεν αποθηκεύεται στη διάταξη .NET - προαιρετικά εγγράφεται σε ένα αρχείο XML ως μέρος της κατασκευής σας (υποθέτοντας ότι χρησιμοποιείτε το Visual Studio).

Συνεπώς, δεν υπάρχει τρόπος να "βγάλετε" τις περιλήψεις XML κάθε μεθόδου μέσω αναστοχασμού σε μια μεταγλωττισμένη διάταξη .NET (είτε .EXE είτε .DLL) - επειδή απλά τα δεδομένα δεν υπάρχουν για να τα βγάλετε. Εάν θέλετε τα δεδομένα, θα πρέπει να δώσετε εντολή στο περιβάλλον κατασκευής σας να εξάγει τα αρχεία XML ως μέρος της διαδικασίας κατασκευής και να αναλύσει αυτά τα αρχεία XML κατά τη διάρκεια εκτέλεσης για να λάβετε τις συνοπτικές πληροφορίες.


Θα μπορούσατε να «τεκμηριώσετε» τη μέθοδό σας χρησιμοποιώντας το System.ComponentModel.DataAnnotations.DisplayAttribute χαρακτηριστικό, π.χ.

[Display(Name = "Foo", Description = "Blah")]
void Foo()
{
}

στη συνέχεια χρησιμοποιήστε την αντανάκλαση για να τραβήξετε την περιγραφή κατά το χρόνο εκτέλεσης.