2009-04-12 14 views
1

(This question ist ziemlich ähnlich, aber die einzige Antwort scheint nicht meine Bedürfnisse zu beantworten).Wie kann die Codegenerierung in eine C# -Lösung integriert werden?

Ich denke über die Verwendung von Thrift in C# und überlege, wie genau der Build-Prozess funktionieren würde. Ermöglichen C# -Projekte in Visual Studio 2008 benutzerdefinierte Build-Aktionen, die C# -Klassen generieren?

Ich habe die "Custom Tool" -Option gefunden, aber ich bin mir nicht sicher, was ich suche ... es erlaubt nur Design-Time-Nutzung (nicht Bestandteil des Build-Prozesses, sondern mit der rechten Maustaste " Run Custom Tool ").

aktualisieren

Prebuild Ereignisse, die Fionn vorgeschlagen sind in der Tat nicht optimal, da sie Abhängigkeiten berücksichtigen nicht und den Build-Prozess verlängern. Außerdem werden sie von einer zentralen Stelle aus statt pro Datei verwaltet.

Antwort

2

Was ist, wenn Sie Ihre Code-Generation einfach zu den Pre-Build-Events bringen.

Sie werden im Abschnitt "Build Events" der Projekteigenschaften in Visual Studio gefunden.

Sie unterstützen auch einige Makros, die Sie sehen, wenn Sie die Schaltfläche "Pre-Build ... bearbeiten" verwenden.

+0

Dies ist sehr suboptimal, da es Auswirkungen darauf hat, wie VS löst, ob Projekte, die von diesem Projekt abhängen, ebenfalls neu erstellt werden sollen. –

+0

In der Tat suboptimal, trat ich dies als eine Nicht-Lösung der Frage ein. Ich habe so etwas für ein C++ Projekt gemacht, vor langer Zeit (ich glaube es war in VS 6). Warum ist diese Funktionalität für C# nicht sichtbar? – ripper234

0

MS Build ist in hohem Maße konfigurierbar. Visual Studio selbst ist auch very extensible. Sie können CodeDOM verwenden, um Klassen zu emittieren. Abhängig davon, wie viel Zeit Sie dem Anpassen von VS und dem Build-Prozess widmen möchten, gibt es sehr wenig, was Sie nicht tun können.

1

Die einfachste und sicherste Option ist die Einbindung der Generierung in die "Pre Build Events", wie Fionn erwähnt. Vorteile: Code ist immer korrekt, Nachteile: Langsam, da dies bei jedem Kompilieren bedeutet, dass Sie den Quellcode neu generieren und dann alle Abhängigkeiten neu erstellen, da der generierte Code geändert wurde.

Eine andere Möglichkeit besteht darin, die Codedateien manuell neu zu generieren, und wenn Sie eine Build-Maschine/kontinuierliche Integration haben, erstellen Sie die Codedateien neu. Vorteile: Schnellere Builds, wenn es nur wenige Änderungen gibt Nachteile: veralteter Code und Stunden verschwendetes Debugging, um zu versuchen, das Problem zu lösen.

Wenn Sie die C# -Projekthilfe lesen, scheint es, dass Sie ein Plug-in benötigen, das die gewünschte benutzerdefinierte Tool-Aktion bereitstellt. In C++ - Projekten können Sie jedoch Ihren eigenen benutzerdefinierten Schritt MS-Help definieren. Sie könnten also ein VisualStudio-Plug-in entwickeln (oder ein solches finden) oder ein C++ - Projekt zu Ihrer Lösung hinzufügen und einen benutzerdefinierten Build-Schritt zu diesem Projekt hinzufügen und dann die Ausgabe in Ihr normales C# -Projekt einfügen.

Die erste google für 'visual studio custom tool code gen' hat eine how-to write your own Custom Tool, die ein guter Ausgangspunkt wäre.

Verwandte Themen