Moin
einfach die Stichworte C#, code, compile, runtime in Google einzugeben, hätte dich quasi an erster Stelle auf folgende Seite geführt:
http://www.codeproject.com/KB/cs/codecompilation.aspx
Nach kurzem überfliegen muss ich feststellen, dass der Artikel durchaus alles enthalten sollte, wonach du suchst.
private static void BuildClass(string className, List<KeyValuePair<string, string>> attrList, string buildPath)
Wozu bitte List<KeyValuePair<string, string>> ?, Warum nicht einfach Dictionary<string, string> ?
Wie kann ich nun diese Klassen zur Luafzeit kompilieren und in der Laufzeitumgebung verwenden? Weiß das hier jemand?
Das Kompilat (z.b. Assembly) kannst du (wenn es nicht bereits automatisch geladen ist) mithilfe der Assembly.Load/LoadFrom Methode in die ApplicationDomain laden. Das Benutzen solch dynamischer Dinge ist generell über Reflection machbar (MethodInfo x = Type.GetMethod(...); x.Invoke(targetInstance, ...). Oder du benutzt Interface-Deklarationen und kannst dann darüber ausführen, dann musst du nur den Typ/Klasse mithilfe von Reflection instanzieren. Das geht entweder über den Activator.CreateInstance oder ConstructorInfo.Invoke
Bitte bedenke, dass solche fetzigen Sachen bei häufiger Benutzung zu erheblichen Performanceeinbrüchen führen können. Ich bin mir fast sicher, dass du dein Ziel auch ohne dynamische Codekompilierung, dafür aber mit entsprechenden Design-Patterns (Bridge, Factory, Composite, Mediator) erreichen kannst.
Ciao, Frank