Frage

Wir haben ein Tool, das einig Code (CS-) Dateien erzeugt, die verwendet werden, das Projekt zu bauen.

EDIT: Diese Dateien sind die andere Hälfte einiger Teilklassen, so dass der Build-Prozess Zugriff auf die Quelle erfordert. Es ist nicht möglich, sie in eine DLL zu kompilieren, zum Beispiel, und legen Sie die Build-Reihenfolge.

Das Werkzeug wird während des Pre-Build-Schrittes ausführen, aber die Dateien werden in der Lösung erst nach dem Build aktualisiert, was bedeutet, dass der Build-Bedarf zweimal durchgeführt werden, um die Fehler nach einer Änderung der Eingabe zu löschen.

Beispiel:

  • Ändern Werkzeugeingabedatei
  • Ausführen Bauen
    • Tool läuft und ändert Quelldatei
  • Erstellungsfehler
  • Ausführen Bauen
    • Tool läuft und ändert Quelldatei (aber es ist doesn tatsächlich ändern, weil der Eingang gleich bleibt)
  • Build erfolgreich

Alle Ideen, wie wir mit dem Doppel Build abschaffen können, und lassen nach wie vor unser Werkzeug aus VS ausgeführt werden?

Danke Jungs!

War es hilfreich?

Lösung 3

Die Antwort erwies sich als "Use Kuchen " und Powershell

Andere Tipps

Es wäre trivial, einen VS-Makro zu schreiben, die Ihr Werkzeug ausführen würden und dann einen Build starten, so dass Sie den gesamten Prozess mit einem einzigen Tastendruck ausgeführt haben könnten, in einem schnelleren Weg, dass ein Doppel Build zu tun.

Alternativ (oder in Verbindung mit der oben), können Sie eine benutzerdefinierte Tool zum VS-Tool-Menü hinzufügen, die Ihr Werkzeug ausgeführt wird (siehe Extras-> Externe Tools). Dann einfach manuell dieses Anpassungs-Tool ausführen, bevor Sie den Build ausführen - das ist immer noch ein langwieriger Doppel Schritt, aber viel schneller und einfacher als doppelt so hoch zu bauen. (Und Sie in der Lage, wahrscheinlich Ihr Werkzeug verläßt in dem Pre-Build-Schritt ausgeführt wird, so dass der alte Doppel-Build Ansatz wird immer noch funktionieren).

Eine weitere Möglichkeit des MSBuild-Skript für Ihr Projekt Exec Ihr Werkzeug früher in dem Build-Prozess sein kann, zu bearbeiten, so dass die Änderung an die Datei wird während der Abhängigkeit Scans aufgenommen (so dass nur ein Build-Pass ist erforderlich).

Keiner von ihnen sind große Lösungen, aber hoffentlich können sie geben Ihnen einen Vorsprung, der eine akzeptable Verbesserung gegenüber jetzigen Situation ist.

Refactoring Ihre Lsg in zwei Projekte: die erste Generation ist die Cs-Datei, die zweite verwendet es (als dll).

Das erste Projekt (nennen wir es Gen) hat 2 Post-Build-Ereignisse: 1 das Werkzeug und erstellen Sie die Quelldatei ausführen können, und 2) kompilieren die Gen'ed src-Datei zur Verwendung durch das zweite Projekt:

Gen.exe 
csc.exe /target:library Gened.cs

Das zweite Projekt (nennen wir es verwenden) verweist auf die dll und nennt es.

== Gen.cs

using System.IO;
namespace sm3
{class Gen
{static string bod = "public static int var = 46;";
 static string clas = "public class Gened {" + bod + "}";
 static string ns  = "namespace sm3 {" + clas + "}";
 static void Main(string[] args)
 {StreamWriter SW;
     SW = File.CreateText("Gened.cs");
     SW.WriteLine(ns);
     SW.Close();
    }}}

== Use.cs

using System;
namespace sm3
{class Use
    {static void Main(string[] args)
        {Gened g = new Gened();
         Console.Write(Gened.var.ToString());
         Console.ReadLine();
         }}}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top