Forum: PC-Programmierung Projektübergreifend kompilieren


von Christoph B. (c-sharp-frage)


Angehängte Dateien:

Lesenswert?

Guten Morgen zusammen, ich hätte da mal ein Problem…

System:
Windows 7 (64bit )mit Visual Studio 2012 Ultimate

Situation:
Derzeit habe ich ein Projekt in Visual Studio 2012 mein einer 
„Hauptform“. In zwei *.dll Dateien, die ich über „Verzweise“ eingebunden 
habe, liegen noch andere Forms, die ich über Buttons aus meiner 
Hauptform heraus starten kann (mit …show() und this.Hide()).
Aus einer dieser „Sub-Forms“ möchte ich jetzt ein völlig anderes Projekt 
kompilieren.
Im Netz habe ich die Klasse CodeDom gefunden, mit der ich Strings 
kompilieren kann. Das klappt soweit, ich kann aus einer *.cs mit dem 
StreamReader in einen String einlesen und diesen kompilieren. Wie aber 
funktioniert das mit einem gesamten Projekt, in dem noch viele weiter 
Klassen existieren?

Der Plan ist, dass ich über meine unterschiedlichen Forms, Methoden des 
„externen“ Projektes mit parametern aufrufen kann und dieses dann zur 
Laufzeit durch Klick auf einen Button kompiliere und eine exe ausgeführt 
wird.
Kann mir dabei jemand helfen?

Hoffe, dass ist einigermaßen verständlich, sonst bitte einfach fragen.

Hier noch ein Versuch es darzustellen…
Ablauf:
Hauptform --> Klick auf Button „Subform1“ --> Subform 1
Hauptform --> Klick auf Button „Subform 2“--> Subform 2 --> Im Textfeld 
dieser Form Code erzeugen --> Mit dem erzeugten Code Methoden des 
externen Projektes aufrufen--> externes Projekt kompilieren und 
ausführen.

Vergleiche Anhang...

P.S.: Programmieranfänger!!!

Beste Grüße

von Karl H. (kbuchegg)


Lesenswert?

Christoph B. schrieb:

> Im Netz habe ich die Klasse CodeDom gefunden, mit der ich Strings
> kompilieren kann. Das klappt soweit, ich kann aus einer *.cs mit dem
> StreamReader in einen String einlesen und diesen kompilieren.

Du hast also in diesem Projekt ein vollständiges Programm, inklusive 
Testprogramm.

> Wie aber
> funktioniert das mit einem gesamten Projekt, in dem noch viele weiter
> Klassen existieren?

Du zerlegst dieses vollständige Projekt in den Teil, den du haben willst 
und (in deinem Fall) das Testprogramm.
Der Teil, den du haben willst, der kommt seinerseits wieder in eine 
Library (DLL, Assembly).
D.h. dein ursprüngliches Projekt mit der CodeDom Klasse und dem 
zugehörigen Testprogramm zerfällt in das eigentliche Programm und eine 
Library(DLL, Assembly).

Und diese Lib kannst du dann natürlich auch in deinem wirklichen Projekt 
benutzen.

Aber ehrlich:
Wegen einer einzigen Klasse lohnt das nicht. Leg den Source Code in ein 
Verzeichnis, in der du deine allgemein benutzbaren Klassen lagerst 
(deine persönliche Source Code Bibliothek) und füge das cs File einfach 
zum Projekt hinzu, in dem du sie benutzen willst.

von Christoph B. (c-sharp-frage)


Lesenswert?

Hallo Karl Heinz und vielen Dank für Deine Antwort.
Das Ding ist, dass es nicht nur um eine Klasse geht. Das externe Projekt 
beinhaltet 23 Klassen und acht Forms. Diese Projekt muss komplett 
kompiliert werden...
Geht das dann trotzdem?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Christoph B. schrieb:
> Das externe Projekt

Es gibt kein "Projekt" erst die IDE macht aus einer Sammlung von Dateien 
etwas was einem im Zusammenhang präsentiert wird, da gibt es prinzipiell 
zwei Möglichkeiten:
- Konvention (z.B. alles was in Ordner X liegt und mit .cs endet)
- Konfiguration (D.h. irgendwo liegt eine Datei wo das konfiguriert 
wird)

In der Praxis auch oft eine Kombination aus beidem.

Das musst du dir halt raussuchen (Doku zur IDE oder durch Beobachtung) 
und dann passend auswerten und nachbilden.

von Karl H. (kbuchegg)


Lesenswert?

Läubi .. schrieb:

> Das musst du dir halt raussuchen (Doku zur IDE oder durch Beobachtung)
> und dann passend auswerten und nachbilden.

Genau.

Ich mach sowas meistens pragmatisch, wenn ich mir was downloade, von dem 
ich nur Teile brauche.
Neues Verzeichnis anlegen bzw. in der IDE ein neues Projekt anlegen.
Dann kopier ich einfach die erste Klasse, von der ich weiß, das ich sie 
brauche, in dieses neue Verzeichnis, mach noch ein Testprogramm, welches 
die Klasse benutzt und compiliere.

Der Compiler/Linker sagen mir dann schon, was noch alles fehlt.
Und das wird dann vom Original ebenfalls auf dieses Verzeichnis kopiert. 
So geht das sukzessive weiter, bis ich auf diesem Verzeichnis alles 
beisammen habe, was zur Benutzung dieser Klasse notwendig ist.

Und dann kommts eben drauf an. Will ich eine Lib, dann lösche ich das 
Projekt wieder und mach ein neues, welches dann eben eine Lib erzeugt. 
Die Files, die da rein müssen hab ich ja jetzt identifiziert und 
isoliert.

Wie - das ist Arbeit? Ja, klar ist das Arbeit!

von Christoph B. (c-sharp-frage)


Lesenswert?

Zunächst meinen herzlichen Dank! Bastel noch ein wenig daran rum, noch 
ist mir nicht alles klar, aber ich melde mich wieder ;)
Beste Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.