Laden...

CodeDOM: Alle Benötigten Assemblies eines Typs

Erstellt von Desert Fox vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.452 Views
D
Desert Fox Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren
CodeDOM: Alle Benötigten Assemblies eines Typs

Ich habe eine Komponente geschrieben die ein beliebiges Interface bekommt und dafür per CodeDOM eine Implementierung generiert. Diese soll dann im Memory kompiliert werden.

Jetzt ist es aber wenn ich das ganze kompilieren will muss ich ja die benötigten Assembly.Locations in ReferencedAssemblies mitgeben. Es reicht jetzt allerdings nicht nur die Assembly des Interfaces mitzugeben sondern ich muss ja auch noch Rekursiv die Assembly Locations der Referenzierten Assemblies mitgeben und die Referenzierten Assemblies der Referenzierten Assemblies...

Wenn ich jetzt aber bei der Assembly des Interfaces GetReferencedAssemblies() calle bekommen ich nur AssemblyName objekte zurück.
Um deren Location bzw deren Assembly zu ermitteln muss ich das teure Assembly.Load() aufrufen. Dann muss ich außerdem noch darauf achten dass eine Assembly gar keine Location haben könnte da sie im memory generiert wurde usw...

Kurzum das ganze wurde Programmiertechnisch ein ziemlich aufwand werden der auch noch ziemlich Fehleranfällig wäre. Außerdem würde diese ermittlung viel zu lange dauern.

Jetzt wollte ich fragen ob jemand weiß wie das die .NET klassen wie der XmlSerializer oder WCF machen die ja Codegenerierung benutzen.

Andernfalls würde ich die Generierung mit Reflection.Emit und DynamischenAssemblies machen, bei welchem erstens die erstell dauer nicht so lang ist (Da kein Kompilieren) und zweitens ich keine Assemblies angeben muss. Und soo viel schwerer als CodeDOM ist MSIL auch nicht ^^.

Edit: Ok Assembly.GetAssemblies() gibt ja alle derzeit geladenen Assemblies zurück, das lößt mein problem eignetlich.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Desert Fox,

es freut mich, dass du eine Antwort gefunden und vielen Dank, dass du sie hier geschrieben hast. Noch besser ist es, eigene Lösungen als Antwort zu posten, damit der Thread nicht mehr in den "Fragen ohne Antwort" auftaucht. Durch diese Antwort ist das Ziel aber auch erreicht.

herbivore