2017-01-07 2 views
0

Ich schreibe einen Spieleeditor und ein Spiel in C#. Es gibt zwei Anwendungen: Der Spieleeditor ist ein Winforms/SFML-Hybrid, und das Spiel selbst ist eine Windows-Anwendung, die einfach eine einfache Spielschleife in SFML mit einem hübschen Standardprogramm.cs ausführt.Starten/Debuggen einer C# -Anwendung aus einer anderen

Von innerhalb des Editors möchte ich in der Lage sein, die ausführbare Spieldatei zu starten, um die Änderungen zu testen. Vorzugsweise würde der Effekt ähnlich dem Starten beider Anwendungen aus Visual Studio über die übliche Methode mit mehreren Startprojekten sein.

Nun, ich vermute, es gibt ein paar Möglichkeiten:

  • Einführung Program.cs in einer Art von einem Hintergrund-Thread. Ich möchte das nicht machen, weil ich Prozessisolierung bevorzugen würde.
  • Starten Sie die ausführbare Datei über einen Pfad mit Process.Start(). Ich bin mir nicht sicher, ob dies die gleiche Debugging-Unterstützung wie üblich bietet. Ich habe nicht mit dem Debug-Modus-Aufruf auf Process genug gespielt, um zu wissen, ob das was ich suche oder nicht.
  • Eine andere einfache Methode, die mir nicht bewusst ist?

Was ist das Standardverfahren, um so etwas zu tun?

Bearbeiten: Ich wurde gebeten, zu erklären, wie dies ein Duplikat von Attach debugger in C# to another process ist Ich sah diese Frage zuvor und immer noch geschrieben, weil dieser eine generische Debugging-Anwendung konzentrierte. Ich habe hier etwas Spezialisierteres, weil ich beide Apps direkt kontrolliere; Außerdem beruht der hier gewählte Ansatz nicht auf Interop, wie einige der Antworten dort gezeigt haben.

+0

Es mir nicht klar ist, wie diese als die der anders ist Kannst du helfen zu klären? –

+0

Platziere in deiner Lösung die 2 Projekte (game_editor und game_itself). Fügen Sie in den Referenzen von game_editor die ausführbare Datei game_itself hinzu. Erstelle im Game_Itself einen öffentlichen Einstiegspunkt, der es erlaubt, das Spiel zu starten und es aus einem Hintergrundthread des Game_Editor aufzurufen. Sie werden dann "fast" isoliert sein. – Graffito

+1

Wie @Graffito schreibt, lädt aber die andere Assembly das Spiel in diesem Fall in eine andere Appdomain. Dann läuft es immer noch im selben Prozess, ist aber standardmäßig isoliert und wenn Sie möchten, können Sie einfach Kommunikation (Funktionsaufrufe) über die App-Domains hinzufügen. – thehennyy

Antwort

0

@thehennyy hatte einen guten Vorschlag. Ich wähle hier eine AppDomain als Grad der Isolation als akzeptablen Kompromiss.

Hier ist die Lösung: „Gewinde Einführung Program.cs in irgendeiner Art von Hintergrund“

 var playtestDomain = AppDomain.CreateDomain("playtest"); 
     var assemblyPath = typeof(actual_game.Program).Assembly.Location; 
     playtestDomain.ExecuteAssembly(assemblyPath); 
Verwandte Themen