Wie kann ich erkennen, wenn ich in der Konsole
Gibt es eine einfache Möglichkeit, um einen code-Bibliothek automatisch erkennen, wenn es aufgerufen wird, von einer Konsolenanwendung oder einer windows-Anwendung? Ich möchte meine Bibliothek nicht zu berichten, um die Windows Event log, wenn es aufgerufen wird, von einem console-Fenster, sondern Bericht an die Konsole-Fenster. Wenn jedoch, es ist nicht in einem Konsolenfenster, es sollte Bericht an das Ereignisprotokoll von Windows.
Dachte ich über das erfordert meine die logging-Komponente übergeben werden, die log-Ziel, aber es wäre nett, wenn es könnte einfach nur automatisch Griff diese zwei Ziele nativ. Ich weiß noch nicht etwas verlangen, so umfangreich wie log4net, in der Tat, wenn es notwendig wird, zu unterstützen, melden Sie sich zu einer Datenbank/Datei-und andere noch unbekannte logging-Ziele, dann kann ich empfehlen eine solche Lösung. Für jetzt aber nur meine Komponente erkennt automatisch die Umgebung und melden Sie sich zu der Konsole oder im Ereignisprotokoll nach der Umwelt wäre viel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Architektonisch, vorbei an den logging-Kontext in der Bibliothek-Komponente ist die richtige Wahl. Die Bibliothek nicht, und in der Tat, darf nicht wissen, dass viel Kontext über die Umgebung, in der er in.
Weil die Sie unterstützen möchten, diese zwei besonderen Fällen direkt in die Bibliothek, würde ich vorschlagen, ein einheitliches Vorgehen.
Selbst das scheint zu kompliziert, basierend auf Ihrer Beschreibung, obwohl. Haben Sie sich überlegt, einfach mit entsprechenden TraceListeners in Ihrer Diagnose-Kollektion, wo Sie Ihre Konsole app fügt die entsprechenden TraceListener zur Ausgabe an die Konsole und die nicht-Konsole-app fügt die entsprechenden EventLog TraceListener zur Ausgabe an das Ereignisprotokoll von Windows? Dies hat den zusätzlichen Vorteil der Arbeit gut mit allen built-in .net-logging-unterstützen ohne übernahme einer externen Abhängigkeiten (z.B. log4net).
Gerade entdeckt, daß "Konsole.Titel" wird eine leere Zeichenfolge in eine windows-Anwendung, und es wird Sie automatisch in eine Konsolenanwendung.
Immer noch ein hack wenn.
Varianten dieser Frage gebeten worden, bevor. Nämlich hier und hier.
'
Die Lösungen scheinen zu Kochen unten zu zwei Optionen
ruft Sie.
setzen Sie einen Anruf auf die Konsole in ein try-catch
block und sehen, ob es ausfällt oder
gelingt.
Meine eigene Empfehlung ist es, Ihre Bibliothek exportieren eine Schnittstelle. Das interface verfügt über eine Funktion oder Eigenschaft, die den Typ des Aufrufers. Das aufrufende Objekt hat eine Klasse, die die Schnittstelle implementiert und zurückgeben, was Art es ist. Denn Komplexität ist ein Anliegen, können Sie Steuern, dass etwas von dem, was Sie in die Schnittstelle.
Wenn eine Anwendung nicht registrieren, sich mit der Bibliothek und dann können Sie versuchen, werfen einen Fehler oder versuchen, ein Schema der automatischen Erkennung.
Über ein interface und werfen ein Fehler, den Sie machen Sie ausdrücklich auf die Programmierer, das die Bibliothek nutzt, was genau Sie erwarten. Die Interaktion zwischen den beiden wird durch die Schnittstelle definiert.
Neben der Interaktion ist flexibler als eine automatische Regelung, weil ich, als Benutzer, zu entscheiden, wie meine Berufung binäre interagiert mit deine Bibliothek eher als eine geheimnisvolle Satz von Regeln.
Ich weiß, es ist eine Art hack, aber das aufrufen der Konsole.Lesen wird eine exception werfen, wenn es keine Konsole.
Es ist eine Nebenwirkung, also kann es nicht sein, eine zuverlässige Methode zur Detektion, aber es funktioniert jetzt.