继续上一个 开发一个制作工具 ,由于都没人回答了 没办法只好分开问了
用streamreader把窗体当文本一样读取了再输出果然不行。要怎么读出啊?求解,还有怎么在编译之前通过form1修改form2的内容和功能啊,如form2里有个webBrowser,在form1里怎么调用,并调整其所在位置和大小等。菜鸟求助啊!!!
 
 private string create()
        {IDictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("CompilerVersion", "v3.5");
            CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(dic);            CompilerParameters paras = new CompilerParameters();
            paras.GenerateExecutable = true;   //编译成exe还是dll
            //paras.ReferencedAssemblies.Add("System.dll");
            paras.GenerateInMemory = false;   //是否写入内存,不写入内存就写入磁盘
            paras.OutputAssembly = "E:\\Test.exe";  //输出路径
            paras.ReferencedAssemblies.Add("System.dll");
            paras.ReferencedAssemblies.Add(@"C:\WINDOWS\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll");
StreamReader sr = new StreamReader(path + "Form2.cs");            \\这里做了改变。有点异想天开
StreamReader sr2 = new StreamReader(path + "Form2.Designer.cs");
  string code = sr.ReadToEnd()+sr2.ReadToEnd()            CompilerResults result = objCSharpCodePrivoder.CompileAssemblyFromSource(paras, code);
            if (result.Errors.HasErrors)
            {
                string ErrorMessage = "";
                foreach (CompilerError err in result.Errors)
                {
                    ErrorMessage += err.ErrorText;
                }
                Console.WriteLine(ErrorMessage);
            }
private void button1_Click(object sender, EventArgs e)
        {
            create();
        }求助啊

解决方案 »

  1.   

    传递form2参数到form1
    或设置属性
    public WebBrowser wb{get{return webBrowser1;}}
      

  2.   

    看了楼主以前的帖子,似乎想完成的是动态编译吧下面的 这个文章可以参考一下.NET 中的动态编译(生成exe文件) 可能很多人都看过灰鸽子中的 配置服务器端,点击后弹出一个窗口,选择几项之后,点生成,就可以生成木马的服务器端(一个exe文件),只要这个exe文件运行在谁的电脑上,那个电脑就成了肉鸡。^_^ 不过我不会这招。我今天是想做个能够通过一个exe文件生成另一个exe文件的东东。
    首先新建个winform应用程序,代码如下Code
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;using System.CodeDom.Compiler;
    using Microsoft.CSharp;namespace Client
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //源代码模板
            string codeBase = @"
                        using System;
                        using System.Collections.Generic;
                        using System.Text;                    namespace lhking
                        {
                            public class Class1
                            {
                                 static void Main()
                                 {
                                      System.Windows.Forms.Application.Run(new Server.Form1());
                                 }
                            }
                        }";
            private void button1_Click(object sender, EventArgs e)
            {
                if (this.textBox1.Text.Length > 0)
                {
                    string code = codeBase;                //编译生成exe
                    CompileCode(code, System.IO.Path.Combine(Application.StartupPath, this.textBox1.Text + ".exe"));
                }
                else MessageBox.Show("文件名不能为空!");
            }
            private CompilerResults CompileCode(string SourceCode, string ExeuteFileName)
            {
                CSharpCodeProvider provider = new CSharpCodeProvider();
                CompilerParameters cp = new CompilerParameters(new string[] { "System.dll", "Server.DLL", "System.Windows.Forms.dll" }, ExeuteFileName, false);            cp.CompilerOptions = "/target:winexe";
                cp.GenerateExecutable = true;            CompilerResults cr = provider.CompileAssemblyFromSource(cp, SourceCode);
                return cr;
            }
        } 
    然后新建个类库,刚才的那个程序引用这个类库,类库里新建个winform窗口。
    这个类库就是弹出个对话框
    private void Form1_Load(object sender, EventArgs e)
            {
                MessageBox.Show("这是动态生成的exe文件哦!");
            }这样就完成了。
      

  3.   

    http://tech.srcsky.com/developer/csharp/58265.html还有这篇文章,也应该有用,一种思路
      

  4.   

     求助啊 那个如果是用已有的文件怎么弄啊`?? CompileAssemblyFromFile 一弄居然说我没有并非所有都有返回值