如何解决如何在C#,winforms的运行时编译中传递参数?
| 我陷入了运行时编译和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文件。
解决方法
您正在做的是编译可执行程序集,然后在另一个进程中启动它。
如果要传递信息,则命令行参数是一种选择。但是,在命令行上传递.Net对象将不起作用。
如果您想通过托管的方式进行传递,则必须使用具有某些后期绑定的新程序集,然后将您的对象传递给构造函数,而不是取决于您正在编译的代码接受的代码(如果您在设计时拥有的话)...
您要重新编写Visual Studio吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。