/// <summary> /// 获取编译后的程序集 /// </summary> /// <param name="content">脚本内容</param> /// <returns></returns> public Assembly GetAssemblyByScript(string content) { Exception.Source = content; Assembly assembly; if (!_useFileComplie) { assembly = ScriptComplierEngine.StreamComplier(content, out Exception.Formatter, SingleError); } else { assembly = ScriptComplierEngine.FileComplier(content, out Exception.Formatter, SingleError); } //判空 if (assembly == default) { Exception.ErrorFlag = ComplieError.Assembly; Exception.Message = "发生错误,无法生成程序集!"; } return(assembly); }
/// <summary> /// 根据命名空间和类的位置获取类型 /// </summary> /// <param name="content">脚本内容</param> /// <param name="classIndex">命名空间里的第index个类</param> /// <param name="namespaceIndex">第namespaceIndex个命名空间</param> /// <returns></returns> public static Type GetClassType(string content, int classIndex = 1, int namespaceIndex = 1) { //获取程序集 Assembly assembly = ScriptComplierEngine.FileComplier(content, out _); //根据索引获取类名 string className = ScriptHelper.GetClassName(content, classIndex, namespaceIndex); //获取类型 return(AssemblyOperator.Loader(assembly)[className]); }
public void LoadFile(string path) { try { ScriptComplierEngine.LoadFile(path); } catch (Exception e) { Exception.Message = e.Message; Exception.ErrorFlag = ComplieError.Assembly; } }
/// <summary> /// 编译脚本,生成委托 /// </summary> /// <param name="className">类名</param> /// <param name="methodName">方法名</param> /// <param name="delegateType">委托类型</param> /// <returns></returns> public static Delegate GetDelegate <T>(string className, string content, string methodName) { //获取程序集 Assembly assembly = ScriptComplierEngine.StreamComplier(content, out _); //判空 if (assembly == null) { return(null); } //获取方法委托 return(AssemblyOperator .Loader(assembly)[className] .GetMethod(methodName) .CreateDelegate(typeof(T))); }
public void Test1() { string text = @"using System; using System.Collections; using System.Linq; using System.Text; namespace HelloWorld { public class TestIndex1 { public string Name; public int Age{get;set;} } public class TestIndex2 { public string Name; public int Age{get;set;} } public class TestIndex3 { public string Name; public int Age{get;set;} } } namespace HelloWorld{ public class TestIndex4 { public string Name; public int Age{get;set;} } } "; var(_, ClassNames, _) = ScriptComplierEngine.GetTreeAndClassNames(text); Assert.Equal("TestIndex1", ClassNames[0]); Assert.Equal("TestIndex2", ClassNames[1]); Assert.Equal("TestIndex3", ClassNames[2]); Assert.Equal("TestIndex4", ClassNames[3]); }
public void Test1() { string str = @" public class TestInfo1{ public string Name; public List<string> List; } "; var result = ScriptComplierEngine.GetTreeInfo(str); foreach (var item in result.errors) { var aa = item.GetMessage(); } Assert.Equal(0, result.errors.Count()); Assert.Empty(result.errors); }