Je tente de compiler du code dans un fichier texte pour modifier une valeur dans un TextBox sur le formulaire principal d'une application WinForms. C'est à dire. ajouter une autre classe partielle avec la méthode au formulaire appelant. Le formulaire a un bouton (button1) et un TextBox (textBox1).CodeDom: compilez la classe partielle
Le code dans le fichier texte est:
this.textBox1.Text = "Bonjour tout le monde !!";
Et le code:
namespace WinFormCodeCompile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Load code from file
StreamReader sReader = new StreamReader(@"Code.txt");
string input = sReader.ReadToEnd();
sReader.Close();
// Code literal
string code =
@"using System;
using System.Windows.Forms;
namespace WinFormCodeCompile
{
public partial class Form1 : Form
{
public void UpdateText()
{" + input + @"
}
}
}";
// Compile code
CSharpCodeProvider cProv = new CSharpCodeProvider();
CompilerParameters cParams = new CompilerParameters();
cParams.ReferencedAssemblies.Add("mscorlib.dll");
cParams.ReferencedAssemblies.Add("System.dll");
cParams.ReferencedAssemblies.Add("System.Windows.Forms.dll");
cParams.GenerateExecutable = false;
cParams.GenerateInMemory = true;
CompilerResults cResults = cProv.CompileAssemblyFromSource(cParams, code);
// Check for errors
if (cResults.Errors.Count != 0)
{
foreach (var er in cResults.Errors)
{
MessageBox.Show(er.ToString());
}
}
else
{
// Attempt to execute method.
object obj = cResults.CompiledAssembly.CreateInstance("WinFormCodeCompile.Form1");
Type t = obj.GetType();
t.InvokeMember("UpdateText", BindingFlags.InvokeMethod, null, obj, null);
}
}
}
}
Quand je compile le code, le CompilerResults renvoie une erreur qui dit WinFormCodeCompile.Form1 ne contient pas de définition pour textBox1.
Existe-t-il un moyen de créer dynamiquement un autre fichier de classe partielle à l'assembly appelant et d'exécuter ce code?
Je suppose qu'il me manque quelque chose de vraiment simple ici.
essayez-vous d'accomplir ce que le code compilé à partir du code.txt sera "ajouté" à l'application en cours d'exécution? – Axarydax
@Axarydax - Oui, mais seulement temporaire. Juste voir s'il était possible de mettre à jour un petit fragment de code dans un fichier texte et de l'utiliser lors de l'exécution. – Inisheer