首页后端开发ASP.NET详解有关asp.net mvc 动态编译生成Controller的方法

详解有关asp.net mvc 动态编译生成Controller的方法

时间2024-01-30 16:23:03发布访客分类ASP.NET浏览492
导读:收集整理的这篇文章主要介绍了详解有关asp.net mvc 动态编译生成Controller的方法,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章主要介绍了asp.net mvc 动态编译生成Controller的方法,具有一定的...
收集整理的这篇文章主要介绍了详解有关asp.net mvc 动态编译生成Controller的方法,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章主要介绍了asp.net mvc 动态编译生成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,让他自动重启就行了。。不知道这么想对不对。。请大手子赐教。。

以上就是详解有关asp.net mvc 动态编译生成Controller的方法的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

asp.net编译

若转载请注明出处: 详解有关asp.net mvc 动态编译生成Controller的方法
本文地址: https://pptw.com/jishu/592755.html
什么是Angular cli?怎么使用? MemoryCache问题修复的解决方法

游客 回复需填写必要信息