Динамическое генерирование сборок

  • Автор темы Vitone
  • Дата начала
V

Vitone

Гость
#1
Всем доброго времени суток!!!

Существует XML файл, исходя из которого динамически формирую класс:
[codebox] CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();

parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
// Имя должно быть уникальное!!!
parameters.OutputAssembly = "MathAssembly"+_guid.ToString()+".dll";
//parameters.ReferencedAssemblies.Add("System.dll");

string filePathStr=filePath.Replace("\\", "\\\\");

// Здесь формирую сам код
string code = DynamicMath.StringOfClass(filePathStr,ref ListOfInputs,ref ListOfOutputs,ref ListOfVariables,ref ListOfClasses,ref ListOfBinds);

// Компилю сборку
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, code);

if (results != null)
{
if (results.Errors.Count > 0)
{
MessageBox.Show("Errors");
foreach (object o in results.Errors)
{
MessageBox.Show(o.ToString());
}
}
}

// Загружаю созданную сборку
Assembly MathAsm = Assembly.LoadFrom(parameters.OutputAssembly);

typeOfMathAssembly = MathAsm.GetType("MathAssembly.FBDMathBlock");

// Создаю экземпляр класса, извлеченного из созданной сборки
instanceOfMathAssembly = Activator.CreateInstance(typeOfMathAssembly);[/codebox]
Но вот не смотря на эти строчки:
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
Сборка все равно сохраняется на жестянку.

Это можно избежать, или придется после завершения приложения их удалять?
Если сборка будет создаваться в памяти, смогу ли я загружать ее так же, как и в том случае?

Спасибо.