Compiler Le Code C# Dans L'Application

Je veux du code qui compile le code qui est dans ma zone de texte (par exemple). Ce que je veux dire, c'est que je veux compiler du code après avoir exécuté le programme. Comment puis-je faire cela?

25
demandé sur AusCBloke 2011-10-30 12:53:15

2 réponses

Voir cet article:

Http://support.microsoft.com/kb/304655

Voici l'exemple de code qu'ils fournissent:

var codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();

var parameters = new CompilerParameters()
{
    GenerateExecutable = true,
    OutputAssembly = Output,
};
CompilerResults results = icc.CompileAssemblyFromSource(parameters, sourceString);

if (results.Errors.Count > 0)
{
    foreach(CompilerError error in results.Errors)
    {
        textBox2.Text = textBox2.Text
            + "Line number " + error.Line
            + ", Error Number: " + error.ErrorNumber
            + ", '" + error.ErrorText + ";"
            + Environment.NewLine + Environment.NewLine
            ;
    }
}

Comme Aliostad l'a mentionné dans sa réponse, soyez prudent avec cette solution, cependant. Vous devrez vous assurer que votre code compilé se retrouve dans son propre AppDomain, sinon vous rencontrerez des fuites de mémoire.

Voir cette question connexe sur la façon de charger le code dans un AppDomain séparé:

Comment puis-je empêcher CompileAssemblyFromSource de une fuite de mémoire?

21
répondu Merlyn Morgan-Graham 2017-05-23 12:22:41

Voir ici et ici.

Soyez prudent , tout code compilé et chargé ne peut pas être déchargé. Cela peut provoquer une fuite de mémoire , c'est-à-dire que si quelqu'un continue à taper et à modifier le code et à le compiler, les assemblys sont chargés et vous finirez par manquer de mémoire.

Une solution consiste à créer un deuxième domaine d'application et charger l'assembly là et lorsqu'il n'est pas nécessaire, décharger le domaine d'application.

17
répondu Aliostad 2011-10-30 08:56:44