asp.net mvc 동적 컴 파일 생 성 컨트롤 러 방법

3946 단어 asp.netmvcController
사이트 배경 관리 시스템 을 만 들 때 가끔 우 리 는 사용자 의 입력 설정 에 따라 동태 적 으로 채널 을 만들어 야 한다.이런 채널 들 은 독립 된 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;
    }
  }
}

절 차 는 다음 과 같다.
 
화면 음악 이 시 작 될 때 홈 컨트롤 러 만 TestController 에 접근 하면 404 오류 가 발생 합 니 다.
 
그리고 동적 컴 파일 TestController 를 누 르 면 dll 을 빈 디 렉 터 리 로 생 성 합 니 다.TestController 를 다시 클릭 하면 접근 할 수 있 는 상태 입 니 다.

 
이 과정 에서 뮤 직 비디오 프로그램 은 자동 으로 재 개 됩 니 다.우리 의 설정 은 배경 에서 만 사용 되 기 때문에 dll 을 동적 으로 불 러 올 필요 가 없다 고 생각 합 니 다.그 가 자동 으로 다시 시작 하면 됩 니 다.그렇게 생각 하 는 게 맞 는 지 모 르 겠 어 요.큰 손 으로 가르침 을 주 십시오. 
코드 다운로드:dynamic-Controller_jb51.rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기