Hallo,
ich habe eine Anwendung, die mittels des CodeDOM Features C# Dateien einliest, dynamisch kompiliert und ausführt. Das funzt auch prima. Nur stört mich jetzt, dass am Ende im TEMP-Verzeichnis meines PCs jedesmal eine DLL übrigbleibt.
Ich habe bereits versucht, die Klasse TempFileCollection zu benutzen, aber die DLLs sind hartnäckig.
Assembly assembly = CompileSource(sourceCode);
if (assembly != null)
{
TempFileCollection tfc = new
TempFileCollection(Path.GetDirectoryName(assembly.ManifestModule.FullyQualifiedName));
tfc.AddFile(assembly.ManifestModule.FullyQualifiedName, false);
// Instanz erzeugen
Type fType = assembly.GetTypes()[0];
Type iType = fType.GetInterface("IExecute");
if (iType != null)
{
IExecute myScript = (IExecute)assembly.CreateInstance(fType.FullName);
// Events abonieren
myScript.Set += new SetHandler(Set);
myScript.Get += new GetHandler(Get);
// Script-Datei mit Parametern ausführen
errorCode = myScript.Execute();
tfc.Delete();
}
}
...
private Assembly CompileSource(string sourceCode)
{
CodeDomProvider cpd = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add (Path.GetDirectoryName (System.Reflection.Assembly.GetExecutingAssembly ().Location) + "\\IExecute.dll");
cp.GenerateExecutable = false;
// dynamischen SourceCode kompilieren
CompilerResults cr = cpd.CompileAssemblyFromSource(cp, sourceCode);
return cr.CompiledAssembly;
}
Hat jemand ne Idee, wie ich die DLLs sauber und elegant wieder wegbekomme?
Danke,
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
Kannst du die Assembly nicht einfach im Speicher vorhalten anstelle einer physikalischen Datei?
cp.GenerateInMemory = true;
Danke, das werde ich gleich mal probieren.
Gruß, Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
OK, für den normalen Betrieb funzt der vorgeschlagene Weg perfekt.
Nur, wenn ich den dynamischen Code per CLR-Debugger debuggen will, brauche ich die DLL und die zugehörige PDB. Das ist aber ein Ausnahmefall, in dem ich die DLLs selber wieder bereinigen kann.
Nachmals danke für den Tipp,
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.