[C#] CodeDomProvider handmatig resolve imports / inheritance

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Topicstarter
Even een kort stukje achtergrond:

Ik heb een applicatie waarin op afroep een source-file wordt gecompileerd, geladen in een aparte AppDomain en waar vervolgens methods op kunnen worden uitgevoerd. Als deze niet meer nodig is, of als er ondertussen een nieuwe versie van de source-file beschikbaar is, wordt de betreffende AppDomain unloaded, source opnieuw gecompileerd en weer geleaden.. enz.

Dit werkt allemaal prima zolang mijn classes geen overerving gebruiken. Dus:

C#:
1
2
public class Car {
}


kan prima runtime gecompileerd worden. Echter:

C#:
1
2
public class Car : Vehicle {
}


gaat natuurlijk hopeloos mis, omdat de compiler niet weer waar hij Vehicle-type vandaan moet halen.

Is er een mogelijkheid om in te haken in de Compiler om zo alle imports langs te lopen en waar nodig de ontbrekende maar noodzakelijke types te compileren en toe te voegen aan de lijst van assemblies voor de Compiler.

Kort gezegd:
Wanneer de Compiler type 'Vehicle' tegenkomt, dat mijn programma er dan voor kan zorgen dat eerst ook nog deze source gecompileerd wordt alvorens de Compiler verdergaat met het compileren van 'Car'.

Het lijkt er namelijk op dat ik alleen Assemblies kan meegeven in de CompilerOptions object.
Iemand een helder idee?

Signature van nature


Acties:
  • 0 Henk 'm!

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Dit gaat niet zo 1-2-3, omdat CodeDom nu alleen maar een façade is voor een (unmanaged) compiler. Een callback voor het resolven van Types is er v.z.i.w. niet.

Er zijn wel C# parsers beschikbaar, waarmee je de benodigde Types en hun bronbestanden kan achterhalen. De parser van CodeDom is niet geïmplementeerd.

De makkelijkste manier is denk ik gewoon om de bronbestanden op een of andere manier te groeperen, bijvoorbeeld per directory of per "project".

This can no longer be ignored.


Acties:
  • 0 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Topicstarter
Nou, ik vind die C# parser nog niet eens zo'n slecht idee inderdaad. Ik liep ook tegen het probleem aan dat de Parse methode op de compiler een NotImplementedException gaf inderdaad. Ik ga inderdaad eens even kijken of ik iets kan doen met zo'n parser. Wellicht kan ik het dan beperken tot het parsen van types.
Bedankt!

Signature van nature