0

我被困在运行时编译和 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 文件与我的主程序中的信息一起注入。

4

1 回答 1

2

您正在做的是编译一个可执行程序集,然后在另一个进程中启动它。

如果你想传递信息,命令行参数是一种选择。但是,在命令行上传递 .Net 对象将不起作用。

如果你想传递托管的东西,你将不得不使用你的新程序集和一些后期绑定,并将你的对象传递给构造函数,而不是取决于你正在编译的代码接受什么,如果你在设计时有...

你在重写 Visual Studio 吗?

于 2011-04-14T12:57:50.270 回答