2017-11-01 3 views
0

asp.net mvc 5 에서 런타임에 C# 코드를 컴파일해야합니다.이 코드를 사용할 때 "메타 데이터 MIS.dll을 찾을 수 없습니다."예외가 발생합니다. 콘솔 코드에서 코드를 사용하면 오류없이 실행 일반적으로 .NET에있는 모든 네임 스페이스가 오류없이 실행되며 "메타 데이터 xyz를 찾을 수 없음"예외가 발생합니다. 수동으로 생성하거나 mvc 프로젝트에 추가하는 네임 스페이스는 예외입니다.asp.net MVC

private static MethodInfo CreateRule(string rules) 
    { 


     string code = @" 
      using System; 
      using System.Collections.Generic; 
      using System.Linq; 
      using System.Linq.Expressions; 
      using MIS.Helper; 

      namespace UserFunctions 
      { 

       public class BinaryFunction 
       {     
        public static Rule Function() 
        { 
         var t=new Rule(); 

         return func_xy; 
        } 
       } 
      } 
     "; 

     string finalCode = code.Replace("func_xy", rules); 

     CSharpCodeProvider provider = new CSharpCodeProvider(); 

     CompilerParameters parameters = 
      new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll","MIS.dll" }) 
      { 
       GenerateInMemory = true, 
       GenerateExecutable = false 
      }; 


     CompilerResults results = provider.CompileAssemblyFromSource(parameters, finalCode); 
     if (results.Errors.HasErrors) 
     { 
      var sb = new StringBuilder(); 

      foreach (CompilerError error in results.Errors) 
      { 
       sb.AppendLine(String.Format("Error ({0}): {1}", error.ErrorNumber, error.ErrorText)); 
      } 

      throw new InvalidOperationException(sb.ToString()); 
     } 
     var binaryFunction = results.CompiledAssembly.GetType("UserFunctions.BinaryFunction"); 
     return binaryFunction.GetMethod("Function"); 
    } 

답변

0

다시 청소하고 다시 빌드하십시오. 이 오류가 계속 발생하면 bin 폴더를 삭제하고 정리하고 다시 빌드하십시오.