• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    asp.net mvc 動(dòng)態(tài)編譯生成Controller的方法

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:35:24
    文檔

    asp.net mvc 動(dòng)態(tài)編譯生成Controller的方法

    asp.net mvc 動(dòng)態(tài)編譯生成Controller的方法:做網(wǎng)站后臺(tái)管理系統(tǒng)的時(shí)候,有時(shí)我們需要根據(jù)用戶的錄入配置動(dòng)態(tài)生成一些頻道,這些頻道需要用到獨(dú)立的Controller,這時(shí)就需要用到運(yùn)行時(shí)動(dòng)態(tài)編譯了。代碼如下: using System.Web.Mvc; using System.CodeDom.Compiler; using Syst
    推薦度:
    導(dǎo)讀asp.net mvc 動(dòng)態(tài)編譯生成Controller的方法:做網(wǎng)站后臺(tái)管理系統(tǒng)的時(shí)候,有時(shí)我們需要根據(jù)用戶的錄入配置動(dòng)態(tài)生成一些頻道,這些頻道需要用到獨(dú)立的Controller,這時(shí)就需要用到運(yùn)行時(shí)動(dòng)態(tài)編譯了。代碼如下: using System.Web.Mvc; using System.CodeDom.Compiler; using Syst

    做網(wǎng)站后臺(tái)管理系統(tǒng)的時(shí)候,有時(shí)我們需要根據(jù)用戶的錄入配置動(dòng)態(tài)生成一些頻道,這些頻道需要用到獨(dú)立的Controller,這時(shí)就需要用到運(yùn)行時(shí)動(dòng)態(tài)編譯了。代碼如下:

    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(@"
     這個(gè)頁(yè)面是vs生成的<br> 
     <a href='/home/creat'>點(diǎn)擊動(dòng)態(tài)編譯生成TestController</a><br>
     <a href='/Test/'>訪問(wèn)TestController</a><br>
     <a href='/Test/WithView'>測(cè)試帶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("錯(cuò)誤信息:" + "<br>"); foreach (CompilerError error in compiler.Errors) { sb.Append(error.ErrorText + "<br>"); } #endregion return Content(sb.ToString()); } /// <summary> /// 動(dòng)態(tài)編譯并執(zhí)行代碼 /// </summary> /// <param name="csPath">代碼</param> /// <param name="dllName">輸出dll的路徑</param> /// <returns>返回輸出內(nèi)容</returns> private CompilerResults CompilerFromCsPath(string dllName, params string[] csPath) { string binpath = Server.MapPath("~/bin/"); CSharpCodeProvider complier = new CSharpCodeProvider(); //設(shè)置編譯參數(shù) 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"); //是否內(nèi)存中生成輸出 paras.GenerateInMemory = false; //是否生成可執(zhí)行文件 paras.GenerateExecutable = false; paras.OutputAssembly = binpath + dllName + ".dll"; //編譯代碼 CompilerResults result = complier.CompileAssemblyFromFile(paras, csPath); return result; } } }

    流程如下:

     

    mvc啟動(dòng)的時(shí)候,只有HomeController,訪問(wèn)TestController會(huì)提示404錯(cuò)誤

     

    然后點(diǎn)擊動(dòng)態(tài)編譯TestController,生成dll到bin目錄。再點(diǎn)擊訪問(wèn)TestController的時(shí)候,就是可以訪問(wèn)的狀態(tài)了。

     

    這過(guò)程中,mvc應(yīng)用程序會(huì)自動(dòng)重啟的。因?yàn)槲覀兊呐渲脙H僅是后臺(tái)使用,我覺(jué)得沒(méi)必要再去動(dòng)態(tài)加載dll,讓他自動(dòng)重啟就行了。不知道這么想對(duì)不對(duì)。請(qǐng)大手子賜教。 

    代碼下載:dynamic-Controller_jb51.rar

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    asp.net mvc 動(dòng)態(tài)編譯生成Controller的方法

    asp.net mvc 動(dòng)態(tài)編譯生成Controller的方法:做網(wǎng)站后臺(tái)管理系統(tǒng)的時(shí)候,有時(shí)我們需要根據(jù)用戶的錄入配置動(dòng)態(tài)生成一些頻道,這些頻道需要用到獨(dú)立的Controller,這時(shí)就需要用到運(yùn)行時(shí)動(dòng)態(tài)編譯了。代碼如下: using System.Web.Mvc; using System.CodeDom.Compiler; using Syst
    推薦度:
    標(biāo)簽: 動(dòng)態(tài) mvc ASP.NET
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專(zhuān)題
    Top
    主站蜘蛛池模板: 国产精品自在拍一区二区不卡| 国产亚洲午夜高清国产拍精品| 国产成人久久久精品二区三区 | 亚洲精品国产精品乱码不99| 成人国产精品秘 果冻传媒在线| 国产精品日本一区二区在线播放| 在线观看亚洲精品国产| 国内精品国产成人国产三级| 亚洲国产精品国自产电影| 国产AV午夜精品一区二区入口| 永久无码精品三区在线4| 欧美精品整片300页| 国内精品99亚洲免费高清| 国产成人精品日本亚洲专区| 四虎在线精品视频一二区| 国产精品1区2区| 国产精品对白交换视频| 亚洲av午夜福利精品一区人妖| 亚欧乱色国产精品免费视频| 欧美日韩国产精品| 久久93精品国产91久久综合| 人精品影院| 国产成人高清精品免费观看| 一级成人精品h| 亚洲午夜精品一区二区| 欧美精品国产精品| 久草视频在线这里精品| 精品久久久久久久久中文字幕| 国产精品186在线观看在线播放| 久久精品国产第一区二区三区 | 国产精品被窝福利一区| 人精品影院| 久久久久99精品成人片| 久久久久人妻精品一区三寸蜜桃| 精品国产一区二区三区久久蜜臀| 国产亚洲精品不卡在线| 久久97久久97精品免视看| 久久亚洲中文字幕精品一区四 | 99精品国产一区二区| 国产精品二区观看| 精品少妇一区二区三区在线|