示例#1
0
        /// <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);
        }
示例#2
0
        /// <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]);
        }
示例#3
0
 public void LoadFile(string path)
 {
     try
     {
         ScriptComplierEngine.LoadFile(path);
     }
     catch (Exception e)
     {
         Exception.Message   = e.Message;
         Exception.ErrorFlag = ComplieError.Assembly;
     }
 }
示例#4
0
        /// <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)));
        }
示例#5
0
        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]);
        }
示例#6
0
        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);
        }