【发布时间】:2023-03-10 15:24:02
【问题描述】:
我被运行时编译和 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 文件。
【问题讨论】:
-
也许您可以将该参数作为命令行参数传递并在子应用程序中处理它?
-
@khachik 谢谢你的回答!您能否提供更多关于如何在动态编译中将参数传递给命令行的信息?
-
您能解释一下您的要求吗?我不太清楚。
-
@Subhash Lama 很快,我需要实现以下目标。用户应该有可能首先用各种东西填充面板控件列表,然后创建一个 .exe 文件,其中包含这个带有面板的测试表单。因此,我需要将面板列表传递给要即时编译的类。
-
你不接近。首先创建一个示例 Winforms 项目来执行此操作。只有这样你才能知道要生成什么代码。
标签: c# winforms codedom runtime-compilation