2009-12-16 12 views
11

Ich bin daran interessiert, etwas zu mono beizutragen, egal ob es sich um eine Dokumentation oder um etwas anderes handelt. Als ersten Schritt habe ich den Quellbaum heruntergeladen, um den Code durchzugehen. Ich dachte jedoch, wenn jemand genug Zeit hätte, um die Projektstruktur zu verstehen, die allen hier helfen würde. Gibt es einen Hinweis darauf, wo die Projektstruktur gut erklärt wird?Learning Mono Quellcode

HINWEIS: Dies ist kein Duplikat der Frage https://stackoverflow.com/questions/1655090/mono-source-code-walkthrough-tutorial, die Antwort auf diese Frage genügt nicht meine Erwartung.

Antwort

28

Sie sollten checked out (Subversion Kasse URLs here) haben:

  • Stamm/libgdiplus

    Dies ist eine Bibliothek von System.Drawing verwendet.

  • Stamm/mono

    Dies ist, was wir die Mono Laufzeit nennen. Enthält hauptsächlich C-Quellcode. Unter diesem Verzeichnis finden Sie:

    • Daten/: ein paar Konfigurationsdateien für andere Version (1.x, 2.x, ...).
    • msvc */: Visual Studio-Lösungsdateien zum Erstellen der Mono-Laufzeitumgebung.
    • libgc/: die Boehm Garbage Collector Quellen.
    • mono/: Mono-Laufzeitquellen.
      • mini/: JIT-Quellcode
      • Metadaten/: das sind fast alle von der Mono-Laufzeit verwendete Funktionen (Marshalling, Thread-Pool, Buchse I/O, Datei-I/O, Konsole I/O, Anwendungsdomänen, GC, Leistungsindikatoren, ...). Es ist mehr oder weniger eine C-Datei.
      • util: verschiedene Funktionen.
      • io-layer/: Win32-I/O-Emulationsfunktionen.
  • Stamm/mcs

    Dies ist, wo der C# -Compiler, die Klassenbibliotheken, Klassenbibliotheken Tests und andere Tools sind.

    • Klasse/: Ein Ordner pro Baugruppe. Jeder von ihnen enthält den Quellcode für jede Assembly, die in Verzeichnisse mit dem Namespace-Namen aufgeteilt ist (dh System/System.Configuration usw.) und normalerweise auch ein Testverzeichnis.Die einzige Namensausnahme ist mscorlib deren entsprechender Ordner corlib heißt.

      Zum Beispiel, wenn Sie den Quellcode für System.Net.HttpWebRequest sehen wollen, die in der System.dll ist Montage, gehen Sie zu trunk/mcs/Klasse/System/System.Net und dort sollte eine Datei namens HttpWebRequest.cs mit dem Code, den Sie suchen.

    • mcs/: Die Quellen für die C# Compiler (mcs, gmcs, SMCs, dmcs ...)

    • Werkzeuge/: Das sind ein paar Werkzeuge für die Entwicklung verwendet (sn, Wsdl , ...), Dokumentation (Monodoc) usw. Die meisten Namen der Tools entsprechen den MS-Namen.

Es gibt viel mehr Verzeichnisse um, aber die sind, wo Sie für die C und C# -Code aussehen sollte. Auch schlug ich Stamm für die Kasse vor, da Sie die aktuellsten Quellen auf diese Weise erhalten.

Update: Mono wohnt jetzt in github und mcs in das mono Repository integriert.

+0

Vielen Dank für die Beschreibung der Verzeichnisstruktur, wissen Sie auch, ob es eine Website gibt, die dies beschreibt? – markmnl

+0

Es gibt https://github.com/mono/mono/blob/master/README.md – Gonzalo

4

Gonzalo gab einen guten Überblick über die verschiedenen Module.

Da Sie auch erwähnt haben, dass Sie zur Dokumentation beitragen möchten, werden Sie ein paar weitere Informationen benötigen.

Zuerst wird die Dokumentation in XML-Dateien innerhalb von mcs/class/[assembly]/Documentation/, z.B. mcs/class/corlib/Documentation. Die Absicht ist, mehrere menschliche Sprachen zu unterstützen (obwohl derzeit nur Englisch bearbeitet wird), so dass innerhalb Dokumentation ein Sprachverzeichnis ist, normalerweise en. Innerhalb von en gibt es ns-*.xml Dateien, z.B. mcs/class/corlib/Documentation/en/ns-System.xml enthält die Dokumentation für den Namespace System. Innerhalb von en befinden sich auch "dotted namespace" -Verzeichnisse, und in diesen sind XML-Dateien, eine pro Typ, zum Beispiel mcs/class/corlib/Documentation/en/System.Collections.Generic/IEnumerable`1.xml.

Dies wird auch in der Dokumentation mdoc(5) im Abschnitt FILE/DIRECTORY STRUCTURE beschrieben. Wenn Sie die Dokumentation gefunden haben, müssen Sie das XML-Format kennen, das auch in der Dokumentation mdoc(5) im Abschnitt NamespaceName/TypeName.xml File Format beschrieben wird. Der verwendete XML-Dialekt ist eine Variante der ECMA 335XML documentation, geändert, um eine Datei pro Typ zu haben (anstelle von allen Typen innerhalb einer einzigen monolithischen Datei). Dies ist auch eine Obermenge von C# XML documentation (siehe Annex E. Documentation Comments, Seite 487).

Schließlich gibt es die Frage des Hinzufügens neuer Typen/Mitglieder zu dem mcs/class/[Assembly]/Documentation Verzeichnis. Wenn Sie Mono erstellt haben, können Sie das Makefile-Ziel doc-update verwenden.Dies führt die entsprechende Assembly durch mdoc(1) und aktualisieren Sie die entsprechenden Dateien in der Dokumentation Verzeichnis.

Wenn Sie weitere Fragen zur Dokumentation haben, zögern Sie nicht, auf der Mailingliste mono-docs-list zu fragen.