asp.net mvc 动态编译生成Controller的方法
程序员文章站
2022-03-10 21:29:15
做网站后台管理系统的时候,有时我们需要根据用户的录入配置动态生成一些频道,这些频道需要用到独立的controller,这时就需要用到运行时动态编译了。代码如下:...
做网站后台管理系统的时候,有时我们需要根据用户的录入配置动态生成一些频道,这些频道需要用到独立的controller,这时就需要用到运行时动态编译了。代码如下:
using system.web.mvc; using system.codedom.compiler; using system.text; using microsoft.csharp; namespace dynamiccompiler.controllers { public class homecontroller : controller { // get: home public contentresult index() { return content(@" 这个页面是vs生成的<br> <a href='/home/creat'>点击动态编译生成testcontroller</a><br> <a href='/test/'>访问testcontroller</a><br> <a href='/test/withview'>测试带view的action</a> "); } public contentresult creat() { string cspath = server.mappath("~/testcontroller.cs"); var compiler = compilerfromcspath("testcontroller", cspath); //编译 #region 输出编译信息 stringbuilder sb = new stringbuilder(); sb.append("cs文件路径:" + cspath); sb.append("编译信息:" + "<br>"); foreach (string output in compiler.output) { sb.append(output + "<br>"); } sb.append("错误信息:" + "<br>"); foreach (compilererror error in compiler.errors) { sb.append(error.errortext + "<br>"); } #endregion return content(sb.tostring()); } /// <summary> /// 动态编译并执行代码 /// </summary> /// <param name="cspath">代码</param> /// <param name="dllname">输出dll的路径</param> /// <returns>返回输出内容</returns> private compilerresults compilerfromcspath(string dllname, params string[] cspath) { string binpath = server.mappath("~/bin/"); csharpcodeprovider complier = new csharpcodeprovider(); //设置编译参数 compilerparameters paras = new compilerparameters(); //引入第三方dll paras.referencedassemblies.add("system.dll"); paras.referencedassemblies.add("system.linq.dll"); paras.referencedassemblies.add("system.web.dll"); paras.referencedassemblies.add(binpath + "system.web.mvc.dll"); //是否内存中生成输出 paras.generateinmemory = false; //是否生成可执行文件 paras.generateexecutable = false; paras.outputassembly = binpath + dllname + ".dll"; //编译代码 compilerresults result = complier.compileassemblyfromfile(paras, cspath); return result; } } }
流程如下:
mvc启动的时候,只有homecontroller,访问testcontroller会提示404错误
然后点击动态编译testcontroller,生成dll到bin目录。。再点击访问testcontroller的时候,就是可以访问的状态了。
这过程中,mvc应用程序会自动重启的。。因为我们的配置仅仅是后台使用,我觉得没必要再去动态加载dll,让他自动重启就行了。。不知道这么想对不对。。请大手子赐教。。
代码下载:dynamic-controller_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
asp.net动态生成HTML表单的方法
-
ASP.NET实现MVC中获取当前URL、controller及action的方法
-
asp.net mvc 动态编译生成Controller的方法
-
asp.net mvc 动态编译生成Controller的方法
-
MVC中获得controller、URL及action的ASP.NET方法详解
-
动态生成HTML表单的asp.net方法代码示例
-
MVC中获得controller、URL及action的ASP.NET方法详解
-
asp.net mvc如何动态编译生成Controller的方法示例详解
-
详解有关asp.net mvc 动态编译生成Controller的方法
-
详解有关asp.net mvc 动态编译生成Controller的方法