Laden...

sharpDox - Ein Dokumentationstool für C# | Version 1.2

Letzter Beitrag vor 5 Jahren 223 Posts 132.926 Views

Ich schreib Dir das mit Absicht nicht per PN Sebastian; aber zZt sind Deine Reaktionen oft ziemlich niveaulos oder zumindest sehr herablassend wenn eine Anforderung Deinerseits durch einen Entwickler nicht 100% die gleiche Auffassung hat. Ich denke das muss nicht sein, oder?

Die Anforderung JS aktiviert zu haben finde ich nicht schlimm und wird der Sache keinen Abbruch tun.
highlightJS verwende ich bei der QuickIO.NET auch; das passt schon.

Die Verwendung von JavaScript für elementare Funktionen ist wohl mittlerweile nicht mehr eine Frage der persönlichen Vorliebe, sondern - egal wie man selber dazu steht und obwohl es sicher auch gute Gründe gibt, die für deaktiviertes JavaScript sprechen - ganz offensichtlich ein genereller Trend. Das sieht man schon daran, dass Mozilla in einer der letzten Firefox-Versionen die Option, JavaScript zu deaktivieren, aus dem normalen Einstellungsdialog entfernt hat, mit der Begründung, dass mit deaktivierter Einstellung mittlerweile zu viele Webseiten nicht korrekt funktionieren bzw. nicht korrekt dargestellt werden. Insofern scheint es also weitgehend akzeptierter Standard geworden zu sein, dass Webseiten JavaScript zwingend voraussetzen.

Hinweis von herbivore vor 10 Jahren

Das Thema JavaScript sollten wir in diesem Thread bitte nicht weiter vertiefen, siehe dazu auch Lizenzbedingungen für die Projekte / Spezielle Regeln für Projekte-Threads.

Hi
Also ich habe deine neuste version 0.9.8.4 mal ausprobiert und bin schon positiv überzeugt.
Aber ich bin mir nicht 100% sicher ob ichs falsch bediene oder da ein Fehler drin ist.
Denn zum Beispiel das Schlüsselwort static wird komplett ignoriert. (In Klassendiagrammen wird nichts unterstrichen und in den Funktionsköpfen die du anzeigst wenn man die Methoden einer Klasse anklickt wird static einfach weggelassen). Ist das gewollt?

Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!

Hallo an Alle!

Danke für euer Feedback. Habe auf Grund der Rückmeldungen direkt ein Update hinterhergeschoben.

Siehe ersten Beitrag für Details.

Denn zum Beispiel das Schlüsselwort static wird komplett ignoriert.

Da war in der Tat ein Fehler. Habe es in der neuen Version korrigiert. Wird jetzt in der Syntax angezeigt. Methoden die statisch sind werden zur Zeit nicht im Klassendiagramm markiert. WIrd in der nächsten Version erledigt.

Jedenfalls würde ich dort verdeutlichen, welche Dateien man verwenden kann - z. B. mit einem Filter im OpenFileDialog.

Drin

Ich hab dann noch ein paar kleine Sachen:

  • "Void" ist groß geschrieben (siehe Anhang).
  • Enums, Structs, Interfaces usw. haben die gleichen Icons im TreeView wie Klassen
  • Der SVG-Output scheint einen kleinen Bug zu haben (siehe Anhang). Die Funktion ist diese hier.
  • Wenn <exception>-Dokumentationen angegeben sind, wäre es ziemlich gut, wenn sharpDox diese auch bei der Methode anzeigt (siehe ebenfalls verlinkter Code/Anhang)
  • Wie wäre es mit Syntax-Highlighting für die Metoden-Signaturen?

Alles behoben bzw. umgesetzt 😃

Grüße Geaz

CustomColor (HTML) ist in der Auswahl komplett leer (weiß) und stürzt beim Klick kommentarlos ab.
Und ich weiß nicht wie ich eine eigene Summary einfüge, um zB die ChangeList der Versionen, wie es SandCastle macht, zu erstellen.

Aber ansonsten finde ich das jetzt so gut, dass ich die Doku von QuickIO.NET darauf umgestellt habe: http://quickIO.NET/help

Ein paar Sachen vergisst er aber. zB der private/internal Inhalt interner Klassen: http://quickio.net/help/#type/NETCompatibility
Besser wäre, wenn interne Klasse absolut nicht auftauchen. Kann man ja eh nicht nutzen.

Und welche Build-Methode nimmt er? Kann das sein, dass er das nicht beachtet?
Meine Projekte haben mehrere Build-Stränge zwischen 2.0 und .NET 4.0.

Weiteres:
* die Reihenfolge im TreeView scheint nicht alphabetisch zu sein.
* be größeren Klassen springt das SVG ganz unten ziemlich hin und her. http://quickio.net/help/#type/QuickIODirectory
Würde ich größer machen bzw. resizable.
* zudem bei Mouse Zoom verändern zoomen alle SVGs einer Seite
* kann man das SVG der Methoden deaktivieren, also die Sequenzdiagramme? Ich will nicht unbedingt, dass jeder in der Doku genau sieht was ich (für ein Sch*) mache, wenn er kein Zugriff auf den Source hat (bei Open Source egal)
* Die Parameter einer Methode sind von deren Beschreibung nicht deutlich genug hervorgehoben finde ich
* Kann man mehrere Sprachen zeitgleich bauen?

Hallo Abt,

bitte lad die Version ncoh einmal runter. Dann ist das Problem mit den CustomColors behoben.
Wenn du mit eigener Summary eine eigene "Startseite" meinst, dann reicht es wenn du im Solutionpfad eine readme.md erstellst und mit Inhalt füllst. Kannst dafür die Markdown-Syntax nutzen.

Ein paar Sachen vergisst er aber. zB der private/internal Inhalt interner Klassen

Das dürfte eigentlich nicht passieren. Werde ich zur nächsten Version fixen. Wenn du internal Member nicht mit drin haben möchtest, kannst du diese auch einfach rausfiltern.

Kann man mehrere Sprachen zeitgleich bauen?

Wenn du in mehrere Sprachen dokumentiert hast, wird für jede Sprache eine Dokumentation erstellt.

Build-Methoden werden bisher nicht beachtet.

Aber ansonsten finde ich das jetzt so gut, dass ich die Doku von QuickIO.NET darauf umgestellt habe

Das freut mich zu hören! 😃

Deine weiteren Punkte habe ich mit auf die Liste für die nächste Version genommen. Danke für dieses fixe Feedback!

Gruß
Geaz

Interne Klassen / Methoden kannst direkt ausfiltern. Kann niemand nutzen 😉

Interne Klassen / Methoden kannst direkt ausfiltern. Kann niemand nutzen 😉 Wenn die Doku für zum Beispiel für (firmen)interne Arbeiten verwendet wird, ist das doch durchaus sinnvoll, denke ich. Man kann es doch in der jetzigen Version einstellen, vielleicht sollte man einfach nur die Standardeinstellung anpassen. Für manche open source-Projekte wäre das u. U. auch sinnvoll, dann man ja eventuell nicht alleine an einem Projekt arbeitet. Und sich eine schöne Doku anzuschauen ist (IMO) besser, als sich die Code-
Annotations anschauen zu müssen. Zumindest um in das Projekt "reinzukommen".

Ich bin sicherlich nicht der einzige, der für mehrere Framework-Versionen kompiliert. Ich mache das, indem ich mehrere Projektdateien habe, die alle auf die selben Dateien referenzierten und jeweils nur mit verschiedenen Präprozessor-Konstanten kompilieren. Ich weiß nicht, wie sharpDox das macht, bzw. ich vermute, dass du einfach die Standard-Release-Builds kompilierst, welche ja (bei mir zumindest) die richtigen Konstanten definiert haben. Leider ist mir nicht ganz klar, welches Projekt letztendlich für die gerenderte Doku verwendet wird. Ziemlich schön wäre es, wenn man die Projekte mit "Aliasen" versehen könnte, sodass man später zwischen den einzelnen Projekten der Solution in der Doku umschalten könnte. Die Aliase dienen dann dazu, um wie bei der MSDN-Doku die entsprechende Framework-Version (= einzelnes Projekt) auswählen zu können.
Ist aber nur eine Idee, die sicherlich verbesserungswürdig ist. Erstmal sollten denke ich die Kernkomponenten fertig werden. Ich wollte sowas nur mal erwähnt haben.

Edit:
Wenn ich diese URL sehe:
http://www.sharpdox.de/doc/index.html#type/Templater
Was ist denn, wenn ich zwei Typen habe, die "Templater" heißen und einfach nur in verschiedenen Namespaces sind?
Vielleicht sollte man lieber den vollqualifizierten Namen haben, wie es auch die neue, Roslyn-Gestütze Reference-Source macht?
http://referencesource.microsoft.com
Das würde ich auch semantisch angebrachter finden.
Die Doku von Sharpdox selbst ist auf meinem Handy (Lumia 925 mit WP8.1, IE11) leider unbenutzbar. Nicht jeder surft mobil auf eine Doku (vermutlich bin ich der einzige), aber solltest du zu viel Zeit haben, könntest du das UI ja ein bisschen mehr responsive machen.

Das sind aber alles nur meine 2 Cent.

Ein paar Sachen vergisst er aber. zB der private/internal Inhalt interner Klassen

Liegt wohl nicht an den internal/private sondern an den "nested classes". Muss mal sehen wie ich die am besten darstelle.

Was ist denn, wenn ich zwei Typen habe, die "Templater" heißen und einfach nur in verschiedenen Namespaces sind?

Der volle Name ist leider keine Option. Hatte ich vorher mal so. Das Problem ist, dass bei Typen oder Mitgliedern dieser sehr lang werden kann. Deswegen erstelle ich jetzt einen kurzen Namen der, über das ganze Projekt hinweg, eindeutig ist. Sollte noch ein Typ "Templater" vorhanden sein würde die Url z.b. bla.de/index.html#type/Templater2 heißen.

Zu den verschiedenen Builds:
Ich finde, dass ist ein super Punkt der jedoch noch eruiert werden müsste. Denn wie man hier sieht sind alleine schon bei zwei Personen zwei verschiedene Herangehensweisen zu finden. Leider ist es mir nicht möglich mit dem Tool alle möglichen Verfahren abzudecken die sich jemand dafür ausdenkt.

Momentan ist es so, dass wenn eine Solution Dokumentation gebaut wird einfach alle Projekte einer Solution berücksichtigt werden.

Bei mir sieht das so aus mit den verschiedenen .NET Frameworks:
http://quickio.codeplex.com/SourceControl/latest#rel/v1.0.1.0/source/QuickIO/QuickIO.csproj

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <Framework Condition="'$(Framework)' == ''">NET45</Framework>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>TRACE;DEBUG;NET20_OR_GREATER;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45;NET45_OR_GREATER</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <DocumentationFile>\Debug\QuickIO.xml</DocumentationFile>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Framework Condition="'$(Framework)' == ''">NET45</Framework>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE;NET20_OR_GREATER;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45;NET45_OR_GREATER</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <DocumentationFile>_Output\Debug\NET45\SchwabenCode.QuickIO.xml</DocumentationFile>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <!--SEVERAL FRAMEWORK SUPPORT -->
  <PropertyGroup Condition="'$(Framework)' == 'NET20'">
    <DebugType>pdbonly</DebugType>
    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DefineConstants>NET20;NET20_OR_GREATER</DefineConstants>
    <OutputPath>_Output\$(Configuration)\$(Framework)</OutputPath>
    <DocumentationFile>_Output\$(Configuration)\$(Framework)\SchwabenCode.QuickIO.xml</DocumentationFile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Framework)' == 'NET20'">
    <DebugType>pdbonly</DebugType>
    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DefineConstants>NET20_OR_GREATER;NET30;NET30_OR_GREATER</DefineConstants>
    <OutputPath>_Output\$(Configuration)\$(Framework)</OutputPath>
    <DocumentationFile>_Output\$(Configuration)\$(Framework)\SchwabenCode.QuickIO.xml</DocumentationFile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Framework)' == 'NET35'">
    <DebugType>pdbonly</DebugType>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DefineConstants>NET20_OR_GREATER;NET30_OR_GREATER;NET35;NET35_OR_GREATER</DefineConstants>
    <OutputPath>_Output\$(Configuration)\$(Framework)</OutputPath>
    <DocumentationFile>_Output\$(Configuration)\$(Framework)\SchwabenCode.QuickIO.xml</DocumentationFile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Framework)' == 'NET40'">
    <DebugType>pdbonly</DebugType>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DefineConstants>NET20_OR_GREATER;NET30_OR_GREATER;NET35_OR_GREATER;NET40;NET40_OR_GREATER</DefineConstants>
    <OutputPath>_Output\$(Configuration)\$(Framework)</OutputPath>
    <DocumentationFile>_Output\$(Configuration)\$(Framework)\SchwabenCode.QuickIO.xml</DocumentationFile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Framework)' == 'NET45'">
    <DebugType>pdbonly</DebugType>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DefineConstants>NET20_OR_GREATER;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45;NET45_OR_GREATER</DefineConstants>
    <OutputPath>_Output\$(Configuration)\$(Framework)</OutputPath>
    <DocumentationFile>_Output\$(Configuration)\$(Framework)\SchwabenCode.QuickIO.xml</DocumentationFile>
  </PropertyGroup>
  <!--<PropertyGroup Condition="'$(Framework)' == 'NET451'">
    <DebugType>pdbonly</DebugType>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DefineConstants>NET20_OR_GREATER;NET30_OR_GREATER;NET35_OR_GREATER;NET40_OR_GREATER;NET45_OR_GREATER;NET451;NET451_OR_GREATER</DefineConstants>
    <OutputPath>_Output\$(Configuration)\$(Framework)</OutputPath>
    <DocumentationFile>_Output\$(Configuration)\$(Framework)\$(MSBuildProjectName).xml</DocumentationFile>
  </PropertyGroup>-->

Und weiter unten dann

 <!-- BUILD LOGIC TO SUPPORT SEVERAL .NET VERSIONS -->
  <Target Name="AfterBuild">
    <MSBuild Condition="'$(Framework)' == 'NET30'" Projects="$(MSBuildProjectFile)" Properties="Framework=NET20" RunEachTargetSeparately="true" />
    <MSBuild Condition="'$(Framework)' == 'NET35'" Projects="$(MSBuildProjectFile)" Properties="Framework=NET30" RunEachTargetSeparately="true" />
    <MSBuild Condition="'$(Framework)' == 'NET40'" Projects="$(MSBuildProjectFile)" Properties="Framework=NET35" RunEachTargetSeparately="true" />
    <MSBuild Condition="'$(Framework)' == 'NET45'" Projects="$(MSBuildProjectFile)" Properties="Framework=NET40" RunEachTargetSeparately="true" />
    <!--<MSBuild Condition="'$(Framework)' == 'NET451'" Projects="$(MSBuildProjectFile)" Properties="Framework=NET45" RunEachTargetSeparately="true" />-->
  </Target>

Hat den Vorteil, dass ich nicht mehrere Solutions pflegen muss und alles mit einem Knopfdruck erstellt wird.

Ich würde auch nicht alle Verfahren abdecken; aber mein Vorgehen ist zB das "Standardverhalten von MSBuild" 😛: es fängt mit dem niedrigsten an und baut dann alles nach und nach.
Da aber sharpDox mir Async-Dokumentationen erstellt gehe ich davon aus, dass die .NET Version für die Doku verwendet wird, die aktuell im Projekt eingestellt ist.

Wenn jemand das mit mehreren Solutions abdeckt, dann soll er halt mehrmals eine Config für jede Solution haben.

Deswegen erstelle ich jetzt einen kurzen Namen der, über das ganze Projekt hinweg, eindeutig ist. Sollte noch ein Typ "Templater" vorhanden sein würde die Url z.b. bla.de/index.html#type/Templater2 heißen. Hat das dann den folgenden Nebeneffekt?

Klasse: A.Templater --> type/Templater
Klasse: B.Templater --> type/Templater2

Klasse A.Templater wird in einen Namespace "C" verschoben und die Doku wird neu erstellt.

Klasse: B.Templater --> type/Templater (vorher type/Templater2)
Klasse: C.Templater --> type/Templater2 (vorher type/Templater)

Oder machst du was, damit ein bereits in einem vorherigen Build benutzter Name nicht noch einmal an einen andern Typen vergeben wird?
(Externe?) Verlinkungen, die ursprünglich auf A.Templater zeigten, zeigen nun auf B.Templater, obwohl sie in einem 404 enden sollten.

Ich weiß natürlich nicht, in welcher Reihenfolge du die Typen abarbeitest, ich gehe aber davon aus, dass sich diese beeinflussen lässt. Ob das nun mit dem Namespace-Namen oder irgendeiner Buid-Reihenfolge ist, spielt für das Problem ja keine Rolle.

Das Problem ist, dass bei Typen oder Mitgliedern dieser sehr lang werden kann. Ich sehe hier kein Problem. Beim Reference-Source könenna uch sehr lange URLs zustande kommen.
ht****tp://referencesource.microsoft.com/#PresentationFramework.Aero/src/Themes/Aero/Microsoft/Windows/Themes/ProgressBarHighlightConverter.cs#31

nicht mehrere Solutions pflegen muss und alles mit einem Knopfdruck erstellt wird. Bei meiner Herangehensweise habe ich auch nur eine Solution mit mehreren Projekten, die ebenfalls alle gleich (nacheinander) erstellt werden. Der Vorteil dabei ist, dass ich nicht nur für das Desktop-.NET, sondern auch für Silverlight, WP bzw. PCL und anderen Framework-Derivaten kompilieren kann, die auch teilweise leicht unterschiedliche Verweise haben. Das geht mit reinen Build-Konfigurationen/Compilerkonstanten in einem Projekt leider nicht so ohne Weiteres.

Ich glaub der erste Quote war nicht ich sondern Gaez.

Bzgl. dem Build redest Du nun aber von Plattformen, nicht von Framework-Versionen.
Du musst das evtl. deutlicher ausdrücken. Willst Du gegen verschiedene .NET Versionen arbeiten, oder gegen verschiedene Projekttypen.
Im Endeffekt ist aber auch das nur - wie bei mir - ein Unterschied der Precompiler Directives. Musst das using eben auch noch in ein #if packen; Projektverweise spielen hier eh keine Rolle.

In SandCastle kannst Du hier auf die wirkliche DLL verweisen; das geht hier eben nicht.

Bzgl. dem Build redest Du nun aber von Plattformen, nicht von Framework-Versionen. Die Plattformen verwenden fast alle verschiedene Framework-Derivate, wie z. B. Silverlight oder WP8.
Projektverweise spielen hier eh keine Rolle. Wie will ich dann Code eines Projektes nur mit Hilfe von Präprozessordirektiven für z. B. Silverlight compilen? Das geht nur mit Setup separatem Projekt - oder habe ich da was übersehen?
Aber ja - ich hab mich dort vermutlich nicht ganz korrekt ausgedrückt. Ich meine sowohl Framework-Versionen als auch Plattformen.

Diese Fachsimpelei ist zwar interessant, aber leider in diesem Thread OT. Wir können die Unterhaltung aber gerne wo anders weiterführen.

Eine Möglichkeit, um diese in der Doku gesondert zu behandeln (siehe Anhang) wäre außerordentlich schön - so wie es in der MSDN geht. Man müsste aber schauen, wie man die verschiedenen Herangehensweise für die Cross-Compilation unter einen Hut bekommt.

Hallo zusammen,

habe ein kleines Update veröffentlich, dass ein paar Bugs fixed und die HTML Doku etwas verbessert (Darstellung von Klassendiagrammen verbessert und Informationen zu Mitgliedern wenn diese ausgeklappt werden sollten übersichtlicher sein). Hoffentlich 😃

Gruß
Geaz

Danke.

mir ist grad aufgefallen, dass die Reihenfolge des Menus immer noch nicht passt.
Der "Unternamespace" "Transfer.Events" ist vor dem Mutter-Namespace "Transfer" zu finden.
http://quickio.net/help

Kann man in den Footer noch irgendwie was eigenes rein setzen?
Bla bla "latest release on ... xx", eigenes Impressung, Haftung etc...

Grüße

Jep, habe ich noch auf der Liste. Wird im nächsten Release behoben.
Zudem habe ich den Wunsch für den benutzerdefinierten Footer aufgenommen.

Zudem ist mir gerade aufgefallen, dass es ein Problem gibt mit dem Klassendiagramm auf der rechten Seite. Falls ein Element "zulang" ist, dann wird das Diagramm zu klein.

Gruß
Geaz

P.S.: @Abt: Kann es sein das dein Server die css Dateien lange cached oder hast du vergessen eine neue hochzuladen? Die Seite wird zwar mit den neuen Elementen aus Version 0.9.8.6 gerendert, aber mit dem css von Version 0.9.8.5

Ja kann gut sein.
Beitreibe meine Seiten auf Azure und hab nen CDN (CloudFlare, spart mir 80-90% an Last bei statischen Seiten) vorgeschalten.
Die CSS-Datei aufm Server ist 58071 Bytes groß; eine andere zuverlässigere Angabe hab ich nicht.

Du kannst das aber mit Parametern steuern.
zB in Deinem HTML style.css?version=0986

Dann wird das Style immer noch gecached; aber durch den Parameter bei Bedarf aktualisiert.

Neue Version online! Diesmal mit erweiterten SVG Klassendiagrammen für die HTML Ausgabe.
Siehe Anhang für eine kleine Vorschau.

Changelog:

  • extended svg class diagram (visualization of implementing types, base types, uses and users)
  • improved svg panning and zooming
  • added custom footer for the html output
  • added version details to css and js for caching
  • some css fixes
  • added markdown controls for config sections
  • sorting of types and members fixed

Danke. Klappt super.

Wie bildet sich bei mir die Style Version
<link rel="stylesheet" type="text/css" href="../assets/css/style.css?version=0931"/>
Weil die Version von sDox ist ja 0987.

PS: mir fällt auf: dem Autor kann man keinen Link hinterlegen in der Fußzeile 8) 😁

Hi,
Die überarbeiteten Klassendiagramme sind Klasse
Mir ist aber etwas aufgefallen. Ich kann kein genaues Muster erkennen aber wenn ich im Klassendiagramm Methoden anklicke kommt sehr oft "Seite nicht gefunden" als Fehler.
Das passiert sowohl im Chrome als auch im Opera oder Firefox.
Jedoch im Opera immer. Bei den anderen Browsern nur manchmal.

Nehmen wir an eine Klasse hat ein Member _solution. da Klicke ich drauf
da kommt dann

file:///C:/Users/Don/Desktop/Dokum/Calc09114/Html/default/index.html#type/Calculate?_solution

da steht dann die "Seite nicht gefunden" Fehlermeldung und wenn ich aber die Seite neu lade wird die Seite mit ausgeklapptem Text von _solution plötzlich angezeigt.

Das habe ich jetzt mit meinen 3 Browsern auf meinen 3 PCs ausprobiert und immer das gleiche.

Edit:
Im Opera steht offenbar nach dem "?" in der URL kein Parameter dahinter also in diesem Beispiel fehlt das _solution nach dem ?

Edit2: Hab glaube die Ursache aber trotzdem eigenartig

Im Firefox kommt auch kein Parameter und das Fragezeichen wird auch nicht geschrieben.> Fehlermeldung:

Die Dateien unter /C:/Users/Don/Desktop/Dokum/Calc09114/Html/default/method/RechnerOperatorBaum.TermParser.TryParse(System.String, RechnerOperatorBaum.NodeCollection&).html konnten nicht gefunden werden.

die Dazugehörige URL

file:///C:/Users/Don/Desktop/Dokum/Calc09114/Html/default/index.html#type/NodeMapper2[Hierfehlt der Parameter]

Das Problem steckt hier:

Ich bin mir auch nicht sicher wie da in den Funktionskopf der angeklickten Methode das "&" Zeichen hineingeraten sein kann denn in meinem Projekt habe ich das nicht in der Quelldatei:

public Boolean TryGetNode(String s, Node& nodeToken)

Da wird natürlich jetzt der übergebene Parameter unterbrochen und die Seite nicht gefunden

Ich bin mir jetzt nicht sicher ob die beiden Fälle mit _solution und TryGetNode() ähnliche Ursachen haben

Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!

Ich hab mir die vorherigen Beiträge nicht durch gelesen, daher entschuldigt bitte, wenn sich manche Hinweise wiederholen.

SharpDox habe ich mir nochmal neu herunter geladen und ausprobiert.

Seit der letzten Version, die ich vor Monaten mal gesehen habe, bin ich positiv überrascht.
Ich finde, die GUI sieht klasse aus, die Textboxen mit den farblich verschiedenen Waterproof-Schriften, die Icons dahinter, etc. finde ich toll. ^^

Auch die Web-Ausgabe sieht toll aus.

Ein paar kleine Punkte habe ich aber trotzdem:

Hauptfenster:

  • Fehlt eine Eingabe oder gibt es irgendwo einen Fehler, fände ich gut, wenn du zusätzlich zum roten Balken unten das betroffene Feld irgendwie dezent markierst. Dann springt der Fehler ins Auge und ist schnell behoben. WPF hat dazu ja auch Möglichkeiten, die das schon einfach integrieren lassen.
  • Wenn ich das Html-DropDown öffne, dann verschwindet das vollständig, weil das Fenster zu klein ist. Da fände ich schön, wenn alles Andere zusammen klappt, automatisch so weit runter scrollt, dass alles gut zu lesen ist, oder sich die Größe des Fensters an den Inhalt anpasst. Ich würde die zweite Variante bevorzugen, dass es automatisch scrollt, kombiniert damit, dass alles ANdere sich schließt. So bleibt dann auch der Überblick, wenn da mal mehr dazukommt.

HTML-Ausgabe:

  • Scrolle ich in der Übersicht schnell nach unten und ich lande dabei in dem UML-Diagramm, dann ist das auf einmal ganz klein gezoomt, obwohl ich das gar nicht wollte. Da wäre cool, wenn das erst gezoomt wird, wenn ich mit dem Scrollen beginne, wenn ich die Maus über dem UML-Fenster habe
  • Das UML-Fenster in der Größe verstellbar, das wäre klasse. Gerade bei großeren Diagrammen macht es das dann deutlich einfacher.
  • Wenn ich das UML-Diagramm ziehe und dabei mit der Maus aus dem Fenster fahre, dann finde ich, sollte das Diagramm weiterhin gezogen werden. Wird in das UML-Fenster geklickt und gehalten, dann lässt sich das DIagramm so weit ziehen, wie man lustig ist, solange die Taste nicht los gelassen wurde. Dabei denke ich auch an größere Diagramme, die man verschieben muss um bestimmte Teile gut im Auge haben zu können.

Ist an sich nur Kleinkram, Verbesserungsideen.
Mehr Zeit zum Testen finde ich leider nicht, aber ich werde es in Zukunft aktiv nutzen, gerade für OpenSource-Projekte ^^

Gruß

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Und noch eine Kleinigkeit habe ich:
In der HTML Ansicht einer Klasse hast du ja oben
[Felder] [Ereignisse] [Methoden] [Eigenschaften]
Wenn ich jetzt z.B. 30-40 Felder oder Methoden oder so habe dann stoßen wir auf das Problem, dass wenn ich da drauf klicke und die Dropdownliste anzeige, dass hier natürlich nicht alle auf den Bildschirm Passen.
Scrolle ich nun nach unten so scrollt aber die Liste nicht mit. Also sehe ich niemals die unteren Einträge.
Ideal wäre es wenn die Dropdownliste hier scrollbar wäre. Das ist aber nicht sooo tragisch weil die Methoden ja auch so nochmal aufgelistet sind.

Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!

Ok, ich hab ne Exception:

Dem Log entnommen:

Fehlermeldung:
System.IndexOutOfRangeException: Der Index war außerhalb des Arraybereichs.
bei SharpDox.Model.Repository.SDType.get_NameWithTypeArguments()
bei System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() bei System.Collections.Generic.List1..ctor(IEnumerable1 collection) bei System.Linq.Enumerable.ToList[TSource](IEnumerable1 source)
bei SharpDox.Model.Repository.SDType.GetTypeArgumentText()
bei SharpDox.Model.Repository.SDType.get_NameWithTypeArguments()
bei SharpDox.Model.Repository.SDType.get_Fullname()
bei SharpDox.Build.Parser.TypeParser.AddParsedInterfaces(SDType sdType, IEnumerable1 implementedInterfaces) bei SharpDox.Build.Parser.TypeParser.GetParsedType(IType type, Boolean isProjectStranger) bei SharpDox.Build.Parser.TypeParser.AddParsedNestedTypes(SDType sdType, IEnumerable1 nestedTypes)
bei SharpDox.Build.Parser.TypeParser.ParseTypeToModel(SDType sdType, IType type)
bei SharpDox.Build.Parser.TypeParser.GetParsedType(IType type, Boolean isProjectStranger)
bei SharpDox.Build.Parser.TypeParser.ParseProjectTypes(CSharpProject project)
bei SharpDox.Build.Context.Step.ParseStep.ParseTypes()
bei SharpDox.Build.Context.Step.ParseStep.ParseSolution(CSharpSolution solution, List`1 excludedIdentifiers)
bei SharpDox.Build.Context.BuildContext.BuildDocumentation()

Ich habe dein Programm auf System.Windows.Forms los gelassen.
Wenn ich mich nicht irre, dann habe ich das von http://referencesource.microsoft.com/#System.Windows.Forms.

Es hat anfangs ziemlich langsam gearbeitet und brach dann ab.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Erst einmal vielen Dank für die Rückmeldungen! Es freut mich, dass ich Feedback bekomme und, dass das Tool immer mehr Anklang findet 😃

@Abt: Die Version des CSS ist die Versionsnummer des HTML-Plugins. Diese ist eine andere als die des Tools selber. Wegen der Verlinkung des Autors werde ich mir was einfallen lassen 😉

@thetruedon: Ich glaube, dass du da direkt zwei Bugs gefunden hast 😃 Einmal scheint es im Opera tatsächlich ein Problem mit dem JS zu geben. Werde ich für die nächste Version fixen. Das was du da gefunden hast (das mit dem "&") ist noch etwas anderes. Das werde ich mir mal genauer ansehen. Danke für die Analyse!

Die Listen in dem Header werde ich so anpassen, dass diese unabhängig von der Seite selber scrollbar sind.

@Palladin007: Danke auch für dein Feedback und die Verbesserungsvorschläge! Werde schauen was ich davon für die nächste Version schaffe 😃

Zu dem Bug: Das scheint ein Problem mit der eingebundenen NRefactory Version zu sein. Wenn ich eine neuere einbinde wird die Dokumentation bei mir korrekt gebaut. Werde die neue Version von sharpDox mit einem NRefactory Update ausliefern.

So, dass war es von meiner Seite. Falls ihr noch weitere Dinge findet oder euch noch etwas auffällt, immer her damit. 😃

Beste Grüße

Die Icons der HTML-Doku beginnen mit Großbuchstaben. Im Quelltext werden sie allerdings komplett kleingeschrieben referenziert, was dazu führt, dass es z. B. bei den github-Pages (oder jedem anderen Linux-Webserver?) ein 404 gibt.

Bei Enums fände ich es schön, wenn man irgendwo den tatsächlichen Wert eines Enum-Members stehen hätte. Ich bin wahrscheinlich der einzige Mensch auf dem Planeten, der das brauchen würde, deshalb würde ich es - wenn du es überhaupt machst - abschaltbar machen.

Bei Enums fände ich es schön, wenn man irgendwo den tatsächlichen Wert eines Enum-Members stehen hätte. Ich bin wahrscheinlich der einzige Mensch auf dem Planeten, der das brauchen würde, deshalb würde ich es - wenn du es überhaupt machst - abschaltbar machen.

nö das wäre auch für mich interessant bzw. für alles Win32 nahes, da hier doch viel mit Hex-Enums gearbeitet wird.

Die Icons der HTML-Doku beginnen mit Großbuchstaben. Im Quelltext werden sie allerdings komplett kleingeschrieben referenziert, was dazu führt, dass es z. B. bei den github-Pages (oder jedem anderen Linux-Webserver?) ein 404 gibt.

Hast du deine Doku mit der neusten Version gebaut? Hatte genau das Problem nämlich in der neusten Version behoben (bei Git musst du die alten Icons erst einmal löschen und dann neu hinzufügen, da er sonst die Änderung bei der Namensgebung der Icons nicht erkennt).

Das andere werde ich mir auch auf die Liste schreiben.

Gruß

Ich bekomme eine neue Exception:

Fehlermeldung:
2014-05-02 09:23:41,360: ERROR – System.InvalidOperationException: Fehler beim Vergleichen von zwei Elementen im Array. ---> System.ArgumentException: Mindestens ein Objekt muss IComparable implementieren.
bei System.Collections.Comparer.Compare(Object a, Object b)
bei System.Collections.Generic.ArraySortHelper1.InternalBinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer1 comparer)
bei System.Collections.Generic.ArraySortHelper1.BinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer1 comparer)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Collections.Generic.ArraySortHelper1.BinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer1 comparer)
bei System.Collections.Generic.List1.BinarySearch(Int32 index, Int32 count, T item, IComparer1 comparer)
bei SharpDox.Build.Parser.TypeParser.AddParsedTypeParameters(SDType sdType, IEnumerable1 typeParameters) bei SharpDox.Build.Parser.TypeParser.ParseTypeToModel(SDType sdType, IType type) bei SharpDox.Build.Parser.TypeParser.GetParsedType(IType type, Boolean isProjectStranger) bei SharpDox.Build.Parser.TypeParser.ParseProjectTypes(CSharpProject project) bei SharpDox.Build.Context.Step.ParseStep.ParseTypes() bei SharpDox.Build.Context.Step.ParseStep.ParseSolution(CSharpSolution solution, List1 excludedIdentifiers)
bei SharpDox.Build.Context.BuildContext.BuildDocumentation()

Diesmal habe ich ein eigenes Projekt genommen, das noch recht klein ist.
Hauptsächlich Interfaces, die ich mir in eine Doku legen wollte um den Überblick leichter halten zu können.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Ist es eigentlich gewollt, dass ich wenn ich ein Klassen- oder Sequenzdiagramm per Mausrad "zoome" gleichzeitig auch alle anderen Diagramme mitzoome?
Ich meine es ist jetzt grundsätzlich nicht störend aufgefallen aber sieht irgendwie wie ein ungewollter Seiteneffekt aus.

Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!

Der Fehler von Palladin007 wird in der nächsten Version behoben sein.

@thetruedon: Der Fehler sollte, wie das mit den Icons, in der letzten Version behoben worden sein. Bitte tausch mal deine komplette Doku aus, damit sowas nicht passiert. Scheint als wäre da noch irgendwo altes JS mit drin.

Gruß

Wie kommt man denn bei der neuen Version an die Klassendiagramme?
Die sind immer nur in der HTML mit dabei, aber nicht einzelnd

Ich glaube, das geht nicht.

Aber vielleicht kann der Entwickler das noch einbauen, oder über ein Plugin lässt sich das bestimmt auch machen.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

Das sind SVG-Informationen, keine Bilder alá JPEG....

Aktuell sind die Diagramme nur in der HTML Doku als SVG enthalten. In der kommenden Version
werde ich versuchen eine Funktion zum speichern einzelner Diagramme einzubauen.

Sollte man nicht warten können oder dies nicht ausreichen, ist es in der Tat möglich ein eigenes Plugin zu schreiben, dass z.B. lediglich alle Diagramme in ein Ausgabeverzeichnis speichert.

Grüße

Ja das wäre schön, wenn das funktionieren würde. Was vielleicht auch sinnvoll ist, wäre die Größenverstellung der einzelnen Bereiche, sodass man die Klassendiagramme größer machen kann und mehr sieht.

btw. super Arbeit und spitzen Programm, danke dafür!

Ich bekomme eine neue Exception:

Fehlermeldung:
2014-05-02 09:23:41,360: ERROR – System.InvalidOperationException: Fehler beim Vergleichen von zwei Elementen im Array. ---> System.ArgumentException: Mindestens ein Objekt muss IComparable implementieren.
bei System.Collections.Comparer.Compare(Object a, Object b)
bei System.Collections.Generic.ArraySortHelper1.InternalBinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer1 comparer)
bei System.Collections.Generic.ArraySortHelper1.BinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer1 comparer)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Collections.Generic.ArraySortHelper1.BinarySearch(T[] array, Int32 index, Int32 length, T value, IComparer1 comparer)
bei System.Collections.Generic.List1.BinarySearch(Int32 index, Int32 count, T item, IComparer1 comparer)
bei SharpDox.Build.Parser.TypeParser.AddParsedTypeParameters(SDType sdType, IEnumerable1 typeParameters) bei SharpDox.Build.Parser.TypeParser.ParseTypeToModel(SDType sdType, IType type) bei SharpDox.Build.Parser.TypeParser.GetParsedType(IType type, Boolean isProjectStranger) bei SharpDox.Build.Parser.TypeParser.ParseProjectTypes(CSharpProject project) bei SharpDox.Build.Context.Step.ParseStep.ParseTypes() bei SharpDox.Build.Context.Step.ParseStep.ParseSolution(CSharpSolution solution, List1 excludedIdentifiers)
bei SharpDox.Build.Context.BuildContext.BuildDocumentation()

Diesmal habe ich ein eigenes Projekt genommen, das noch recht klein ist.
Hauptsächlich Interfaces, die ich mir in eine Doku legen wollte um den Überblick leichter halten zu können.

Genau das passiert mir auch bei allen meinen Projekten : (

Danke für die Information. Der Fehler wurde bereits für die kommende Version behoben.
Diese wird wahrscheinlich noch diese Woche erscheinen.

Version 0.9.8.8 online!
Sollten einige Verbesserungen dabei sein 😃

  • added token support for descriptions and articles
  • added .sdnav as input file (breaking changes with previous .sdnav files - please adjust them - see "advanced tutorial")
  • added static/readonly keyword support
  • added const values support
  • added author and project link in html export
  • changed diagram zoom in html export
  • made diagram container resizeable
  • improved print in html export
  • improved svg in html export
  • many css and js fixes

Hi,

irgendwas stimmt jetzt am Logo nicht mehr. Ist riesig.
Mit der Version davor gings: http://quickio.net/help

Ui, in der Tat. Das ist ein Fehler der durch eine CSS-Änderung enstanden ist.
Falls du möchtest, kannst du einfach die folgende Änderung in die style.css eintragen. Dann sollte es behoben sein:

#sitetitle img {
    height: 50px;
}

EDIT:

Kannst dir jetzt auch einfach noch einmal das neue Release runterladen. Habe dort schnell die Änderung eingebaut.

Lokal funktionierts, danke.
Online muss ich den nächsten Cache-Zyklus abwarten 😉

Hallo Geaz,

ich hab noch das Problem mit der readme.md.

Was muss ich machen, damit diese in die Doku kommt? Ich habe sie im Solutionordner aber sie taucht nach dem Build nirgends auf.

Kann ich auch mehrere MDs hinzufügen?
Home.md
VersionHistory.md
License.md
....?

Wenn du mit eigener Summary eine eigene "Startseite" meinst, dann reicht es wenn du im Solutionpfad eine readme.md erstellst und mit Inhalt füllst. Kannst dafür die Markdown-Syntax nutzen.

Hallo Abt,

in der letzten Version hat sich ein wenig verändert. Deshalb wird dies nun anders bewerkstelligt. Schau einfach mal hier rein:
http://doc.sharpdox.de/#article/de.advanced-tutorial

Kurz:
Wenn du deine Solution-Datei als Input zum Bau der Doku nutzt, muss die Datei nicht mehr "readme.md" heißen, sondern "default.sdpd".

Du kannst auch weitere Seiten hinzufügen (Version History usw.). Damit diese im Menü angezeigt und genutzt werden, musst du eine eigene Navigationsdatei erstellen und diese dann zum Bauen deiner Doku nutzen. (Siehe Punkt "Navigation" im oberen Link).

Falls das deine Fragen nicht beantworten sollte, sag einfach bescheid.

Problem doch gelöst.
Die SDA-Verweise sind offensichtlich Case-Sensitive.

Danke für die Info.

Ich tu mich ehrlich gesagt etwas schwer, da die Beschreibung - für mich - nicht 100% nachvollziehbar ist.
Ich hab mir jedoch mit Hilfe von Deinem Source auf https://github.com/Geaz/sharpDox/tree/master/Documentation angeschaut, wie Du das gemacht hast und das auch nachgebildet.

Ich bekomme jedoch beim Bauen wahrscheinlich einen Fehler.
Jedenfalls wird die Leiste, die unter dem "Bauen"-Button ist, Rot. Ich sehe aber keine Fehlermeldung.

Die Navigation habe ich als Startprojekt gewählt (default.sdnav):
-Home#home -Version History#versionhistory -FAQ#faq -License#license -Examples -QuickIO.NET API#QuickIONET.sln

Ein Teil wird offensichtlich doch gebaut, denn ich bekomme den "Home"-Button in der HTML auch mit korrektem Text angezeigt. Aber wie gesagt schlägt das offensichtlich alles fehl.

Probier einmal:

-Home#home
-Version History#VersionHistory
-FAQ#faq
-License#license
-Examples
-QuickIO.NET API#QuickIONET.sln

Kann gut sein, dass ich hier dummerweise case sensitive arbeite.

EDIT: War ich wohl zu spät 😃

Hab den Beitrag bereits editiert gehabt; war das Case-Sensitive-Verhalten. Danke 😃

Aber: der Markdown scheint nicht korrekt implementiert zu sein.

* Single Linebreak

XXXXXXXXX.
YYYYYYYYY. ZZZZZZZZZZZ.

wird

XXXXXXXXX.YYYYYYYYY. ZZZZZZZZZZZ.

* Header-Varianten ab ### (h3) sind alle gleich

= h1, ## = h2, ### = h3 - aber #### die weiteren entsprechen alle H3.

Und wie kann ich im Markdown auf SDA-Dateien verweisen?
Nur "#license" geht jedenfalls nicht 😉

Hallo Abt,

In Markdown wird ein Zeilenumbruch durch zwei oder mehr Leerzeichen in der vorangegangenen Zeile erstellt. Willst du einen Absatz musst du zwei Zeilenumbrüche machen. Ist bei Wikipedia gut erklärt. Schau mal dort.

Bei den Überschriften gehen ich davon aus, dass es ein CSS Problem ist. Werde ich mir später mal anschauen.

Einen Artikel verlinken kannst du z.B. so:
License

Siehe dazu auch den Punkt "Links": http://doc.sharpdox.de/#article/de.advanced-tutorial

Grüsse

ok, dann scheint das in dem Trackingtool, mit dem ich sonst "Markdown" betrieben hab, einfach anders zu ticken 😉
Danke für die Hinweise.

Hi,

ist Dir schon aufgefallen, dass das erzeugte HTML des Markdown nicht kompatibel mit dem IE 10 ist?

  • Icons werden nict angezeigt
  • Listen-Punkte ebenfalls nicht
  • Footer wird bei der Hälfte abgeschnitten

Wenn man die Methoden auflistet, dann kann man ja eine anklicken. Evtl wäre es schön, dass man sieht, dass sich da was aufklappen kann (die Beschreibung der Parameter)

Im Titel, wo Fields() Methods() Properties() steht, sind rechts zwei Buttons.
Da im IE keine Icons angezeigt werden, sehe ich nicht, was die Buttons tun. Das eine wird "Drucken" sein, weil sich der Druckdialog öffnet. Trotzdem wärs schön, wenn die Icons tun und/oder wenigstens ein Tooltip integriert ist.

Hallo Abt,

danke für die Meldung. Ich habe im dev Branch bereits einige Anpassungen für den IE vorgenommen. Diese sollten hoffentlich auch die Probleme im IE10 beheben. Werde das vor dem nächsten Release noch einmal testen.

Grüße