我被困在运行时编译和 CodeDom 上。这是迄今为止我所拥有的简化示例。
public static void Testing()
{
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
string Output = "Out.exe";
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Drawing.Dll");
parameters.ReferencedAssemblies.Add("System.Windows.Forms.Dll");
parameters.CompilerOptions = "/t:winexe";
string[] text = new string[] { @"C:\MyProject\Test.cs", @"C:\MyProject\Test.Designer.cs",
@"C:\MyProject\Program.cs"};
CompilerResults results = codeProvider.CompileAssemblyFromFile(parameters, text);
Process.Start(Output);
}
它工作得很好,并加载了测试表单。
但!我需要将一个参数传递给这个测试表单(面板控件列表)来填充表单。
我怎样才能做到这一点?也许,我看错了方向,必须以不同的方式完成?提前非常感谢!
编辑 最后,我放弃了 CodeDom 并改用Mono.Cecil,将 .exe 文件与我的主程序中的信息一起注入。