小弟谢了段动态编译的代码如下:
]//源代码模板
string codeBase = "using System;" + System.Environment.NewLine +
"namespace Dream " + System.Environment.NewLine +
"{" + System.Environment.NewLine +
" static class Dream" + System.Environment.NewLine +
" {" + System.Environment.NewLine +
" [System.STAThread]" + System.Environment.NewLine +
" static void Main()" + System.Environment.NewLine +
" {" + System.Environment.NewLine +
" System.Windows.Forms.Application.Run(new CodeMaker.Code(new CodeMaker.WaterPicturebox(\" liuyanglong\")));" + System.Environment.NewLine +
" }" + System.Environment.NewLine +
" }" + System.Environment.NewLine +
"}" + System.Environment.NewLine; //设置生成的exe的路径和名称
public void setExe(string file)
{
if (file.Length > 0)
{
//替换源代码
string code = codeBase;
code = code.Replace("liuyanglong", DreamMaker.DreamForm.getMain.ImagePass);
// 创建编译器对象
CSharpCodeProvider p = new CSharpCodeProvider();
ICodeCompiler cc = p.CreateCompiler(); // 设置编译参数
CompilerParameters options = new CompilerParameters();
options.ReferencedAssemblies.Add("System.dll");
options.ReferencedAssemblies.Add("System.Deployment.dll");
options.ReferencedAssemblies.Add("System.Data.dll");
options.ReferencedAssemblies.Add("System.Drawing.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
options.ReferencedAssemblies.Add("CodeMaker.DLL");
options.ReferencedAssemblies.Add("System.Windows.Forms.dll");
options.GenerateExecutable = true;
options.OutputAssembly = "HelloWorld.exe"; CodeSnippetCompileUnit cu = new CodeSnippetCompileUnit(code); // 开始编译
CompilerResults cr = cc.CompileAssemblyFromDom(options, cu);
// 显示编译信息
if (cr.Errors.Count == 0)
MessageBox.Show(" compiled ok!", cr.CompiledAssembly.Location);
else
{
MessageBox.Show("Complie Error:");
foreach (CompilerError error in cr.Errors)
MessageBox.Show(error.ErrorText);
} MessageBox.Show("Press Enter key to exit...");
}
其中 System.Windows.Forms.Application.Run(new CodeMaker.Code(new CodeMaker.WaterPicturebox(\" liuyanglong\"))); 如果没有参数,就可以编译成功,有了反而提示找不到CodeMaker.dll,为什么啊,我明明已经在options.ReferencedAssemblies.Add("CodeMaker.DLL")这句加入了,求高人指点迷津。
]//源代码模板
string codeBase = "using System;" + System.Environment.NewLine +
"namespace Dream " + System.Environment.NewLine +
"{" + System.Environment.NewLine +
" static class Dream" + System.Environment.NewLine +
" {" + System.Environment.NewLine +
" [System.STAThread]" + System.Environment.NewLine +
" static void Main()" + System.Environment.NewLine +
" {" + System.Environment.NewLine +
" System.Windows.Forms.Application.Run(new CodeMaker.Code(new CodeMaker.WaterPicturebox(\" liuyanglong\")));" + System.Environment.NewLine +
" }" + System.Environment.NewLine +
" }" + System.Environment.NewLine +
"}" + System.Environment.NewLine; //设置生成的exe的路径和名称
public void setExe(string file)
{
if (file.Length > 0)
{
//替换源代码
string code = codeBase;
code = code.Replace("liuyanglong", DreamMaker.DreamForm.getMain.ImagePass);
// 创建编译器对象
CSharpCodeProvider p = new CSharpCodeProvider();
ICodeCompiler cc = p.CreateCompiler(); // 设置编译参数
CompilerParameters options = new CompilerParameters();
options.ReferencedAssemblies.Add("System.dll");
options.ReferencedAssemblies.Add("System.Deployment.dll");
options.ReferencedAssemblies.Add("System.Data.dll");
options.ReferencedAssemblies.Add("System.Drawing.dll");
options.ReferencedAssemblies.Add("System.Xml.dll");
options.ReferencedAssemblies.Add("CodeMaker.DLL");
options.ReferencedAssemblies.Add("System.Windows.Forms.dll");
options.GenerateExecutable = true;
options.OutputAssembly = "HelloWorld.exe"; CodeSnippetCompileUnit cu = new CodeSnippetCompileUnit(code); // 开始编译
CompilerResults cr = cc.CompileAssemblyFromDom(options, cu);
// 显示编译信息
if (cr.Errors.Count == 0)
MessageBox.Show(" compiled ok!", cr.CompiledAssembly.Location);
else
{
MessageBox.Show("Complie Error:");
foreach (CompilerError error in cr.Errors)
MessageBox.Show(error.ErrorText);
} MessageBox.Show("Press Enter key to exit...");
}
其中 System.Windows.Forms.Application.Run(new CodeMaker.Code(new CodeMaker.WaterPicturebox(\" liuyanglong\"))); 如果没有参数,就可以编译成功,有了反而提示找不到CodeMaker.dll,为什么啊,我明明已经在options.ReferencedAssemblies.Add("CodeMaker.DLL")这句加入了,求高人指点迷津。
比如:
options.ReferencedAssemblies.Add("c:\\abc\\CodeMaker.DLL");
new CodeMaker.WaterPicturebox(\" liuyanglong\"
改成
new CodeMaker.WaterPicturebox(@\" liuyanglong\"
试试