50%身价求解决方案 我有个大概的想法:我又若干Class文件,作为文本文件的方式存储于网站的某文件夹或数据库(网站程序自身不调用);有什么方法能够实现这些Class在服务器端于必要的时候通过程序编译为dll文件?求大神们提供思路 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接生成 bin目录下不就是吗 本帖最后由 net_lover 于 2012-02-29 10:12:05 编辑 public class Program { static void Main(string[] args) { // 1.CSharpCodePrivoder CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); // 2.ICodeComplier ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler(); //CodeDomProvider objICodeCompiler = (ICodeCompiler)objCSharpCodePrivoder.CreateCompiler(); // 3.CompilerParameters CompilerParameters objCompilerParameters = new CompilerParameters(); objCompilerParameters.ReferencedAssemblies.Add("System.dll"); //objCompilerParameters.ReferencedAssemblies.Add("System.dll"); objCompilerParameters.GenerateExecutable = true; objCompilerParameters.GenerateInMemory = false; objCompilerParameters.CompilerOptions = "/out:d:/b.exe /target:exe"; // 4.CompilerResults CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode()); //cr.PathToAssembly = "d:/a.exe"; if (cr.Errors.HasErrors) { Console.WriteLine("编译错误:"); foreach (CompilerError err in cr.Errors) { Console.WriteLine(err.ErrorText); } } //Console.WriteLine(cr.PathToAssembly); //else //{ // // 通过反射,调用HelloWorld的实例 // Assembly objAssembly = cr.CompiledAssembly; // object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld"); // MethodInfo objMI = objHelloWorld.GetType().GetMethod("Main"); // Console.WriteLine(objMI.Invoke(objHelloWorld, null)); //} Console.ReadLine(); } static string GenerateCode() { StringBuilder sb = new StringBuilder(); sb.Append("using System;using System.Text.RegularExpressions;"); sb.Append(Environment.NewLine); sb.Append("namespace DynamicCodeGenerate"); sb.Append(Environment.NewLine); sb.Append("{"); sb.Append(Environment.NewLine); sb.Append(" public class HelloWorld"); sb.Append(Environment.NewLine); sb.Append(" {"); sb.Append(Environment.NewLine); sb.Append(" static void Main(string[] args)"); sb.Append(Environment.NewLine); sb.Append(" {"); sb.Append(Environment.NewLine); sb.Append("Regex rgx = new Regex(); Console.Write(\"Hello world!\");"); sb.Append(Environment.NewLine); sb.Append(" }"); sb.Append(Environment.NewLine); sb.Append(" }"); sb.Append(Environment.NewLine); sb.Append("}"); string code = sb.ToString(); Console.WriteLine(code); Console.WriteLine(); return code; } }这个就是根据代码字符串编译出.exe程序,更改objCompilerParameters.GenerateExecutable = true;objCompilerParameters.CompilerOptions = "/out:d:/b.exe /target:exe";详细查下MSDN吧就可以生成dll然后反射调用吧 谢谢几位大大赐教,我晚上回家鼓捣看看,作为业余Coder粉悲哀滴说 http://msdn.microsoft.com/zh-cn/library/microsoft.csharp.csharpcodeprovider%28v=vs.80%29.aspx 点击gridview中某一行,获取该行内容 C# List集合问题 网站被挂马 高手来指点下 谢谢 gridview中linkbutton 怎么获取ashx返回值? 问各位高手个获取表单请求的问题 如何获取Griewview中模板列中radiobuttonlist的值 .net加sql问题,哪位兄弟帮看看 请教高手: 原ASP.NET做的网站,现在里面放了个动网论坛做为网站的论坛. 目前要实现:用户登陆原ASP.NET网站后就自动把论坛登陆了. 来者有分! Frame里面页面转向的问题, 急~~ 生成静态页面直接通过url抓取有什么坏处 treeview 父节点复选框选中子节点全被选中怎么写???
public class Program
{
static void Main(string[] args)
{
// 1.CSharpCodePrivoder
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); // 2.ICodeComplier
ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
//CodeDomProvider objICodeCompiler = (ICodeCompiler)objCSharpCodePrivoder.CreateCompiler();
// 3.CompilerParameters
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
//objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.GenerateExecutable = true;
objCompilerParameters.GenerateInMemory = false;
objCompilerParameters.CompilerOptions = "/out:d:/b.exe /target:exe";
// 4.CompilerResults
CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());
//cr.PathToAssembly = "d:/a.exe";
if (cr.Errors.HasErrors)
{
Console.WriteLine("编译错误:");
foreach (CompilerError err in cr.Errors)
{
Console.WriteLine(err.ErrorText);
}
}
//Console.WriteLine(cr.PathToAssembly);
//else
//{
// // 通过反射,调用HelloWorld的实例
// Assembly objAssembly = cr.CompiledAssembly;
// object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");
// MethodInfo objMI = objHelloWorld.GetType().GetMethod("Main"); // Console.WriteLine(objMI.Invoke(objHelloWorld, null));
//} Console.ReadLine();
} static string GenerateCode()
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;using System.Text.RegularExpressions;");
sb.Append(Environment.NewLine);
sb.Append("namespace DynamicCodeGenerate");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class HelloWorld");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" static void Main(string[] args)");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append("Regex rgx = new Regex(); Console.Write(\"Hello world!\");");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}"); string code = sb.ToString();
Console.WriteLine(code);
Console.WriteLine(); return code;
}
}这个就是根据代码字符串编译出.exe程序,更改
objCompilerParameters.GenerateExecutable = true;
objCompilerParameters.CompilerOptions = "/out:d:/b.exe /target:exe";
详细查下MSDN吧就可以生成dll
然后反射调用吧