Habe mich in letzter Zeit, dank UML Simulation wieder mehr mit CodeDom und runtime Compilieren beschäftigt. Bin dabei auf folgendes draufgekommen. (Hab vermutlich mal wieder die Hilfe nur halbe gelesen ;)).
- ich erzeuge aus Enterprise Architect mein Codefile
- ich erstelle CodeDomProvider und CompilerParameter
- ich füge alle “External References” im CompilerParameter hinzu
- ich Compiliere und hole mir den Type der Klasse die ich benutzen möchte
bis hier hin ist alles richtig, es geht ab hier zwar noch Fehlerfrei weiter aber…
- ich erzeuge mit Hilfe von: Activator.CreateInstance eine Instanz
- da ich weiß das die Instanz vom Interface X abgeleitet ist, spreche ich die Instanz als X an
Hier kommt der Fehler,.. - wenn ich jetzt Funktionen anspreche die auf eine “External References” verweisen bekomme ich einen “could not load Assembly xxx,… file not found”
Wie schon in Schritt 5. beschrieben liegt hier der eigentliche Fehler, welcher dann in Schritt 7. erst auftaucht. Um die Instanz und auch alle “External References” zu bekommen, sollte man die Instanz nicht über Activator.CreateInstance erstellen, sondern über CompilerResult.CompiledAssembly.CreateInstance(Type.FullName) da hier noch die “Externen Referencen” richtig mitgeladen werden.
English:
Have done some things in CodeDom and runtime compiling recently, for UML Simulation. Found the following at the time. (presumably I only rushed through the help again ;)).
- I create a Codefile out of Enterprise Architect
- I create a CodeDomProvider and CompilerParameter
- I add all “External References” to the CompilerParameter
- I compile it and the get the type of the class I want to use
till here everything is OK, I’ll still get no errors but… - I create an instance using: Activator.CreateInstance
- because I know the instance inherits the interface X I cast it to X
Here we go with the errors,.. - If I now use a function which is using something from an “External Reference”, I get a “could not load Assembly xxx,… file not found” error.
Like I allready told, the real error is in step 5. but it shows up in step 7. To be able to use “External Referneces” don’t use the Activator.CreateInstanc to get an instance, rather use CompilerResult.CompiledAssembly.CreateInstance(Type.FullName) because this loads also the “External References”.
Recent Comments