继续上一个 开发一个制作工具 ,由于都没人回答了 没办法只好分开问了
用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();
}求助啊
用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();
}求助啊
解决方案 »
- RichTextBox的一个问题
- 请问DATAGRIDVIEW里面如何设置CELL的输入格式
- 莱鸟提问:这个简单的问题如何解决?
- VS2003到VS2005无法运行我的程序?请问为什么?
- ~~~sql 小问题(在线等!)
- 问一个关于ArrayList的问题
- string 可以用indexOf来找到第一个符合条件的字符串的位置,那么byte[] 数组中可不可以实现这样的功能...
- 真的很着急,解决了马上给分!
- C#数据访问层怎么简化查询?如果我有两个都是不同的查询功能,查询的一些代码会冗余,想简化代码。都是最基本的访问数据库ADO.NET
- 急!软件运行时插拔USB转串口,再关闭串口打开串口,运行时出错,用Try..Catch都无法捕获.
- 帮忙翻译
- C#treeview动态添加删除节点有SQL数据库
或设置属性
public WebBrowser wb{get{return webBrowser1;}}
首先新建个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文件哦!");
}这样就完成了。