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");
}