示例#1
0
 /// <summary>
 /// 获取编译后的程序集
 /// </summary>
 /// <param name="className">类名</param>
 /// <returns></returns>
 public Assembly GetAssemblyByScript(string content)
 {
     if (!_useFileComplie)
     {
         return(ScriptComplieEngine.StreamComplier(content, SingleError));
     }
     else
     {
         return(ScriptComplieEngine.FileComplier(content, SingleError));
     }
 }
示例#2
0
        /// <summary>
        /// 根据命名空间和类的位置获取类型
        /// </summary>
        /// <param name="content">脚本内容</param>
        /// <param name="classIndex">命名空间里的第index个类</param>
        /// <param name="namespaceIndex">第namespaceIndex个命名空间</param>
        /// <returns></returns>
        public static Type GetType(string content, int classIndex = 1, int namespaceIndex = 1)
        {
            //根据索引获取类名
            string className = ScriptComplieEngine.GetTreeAndClassName(content, classIndex, namespaceIndex).ClassName;


            //获取程序集
            Assembly assembly = ScriptComplieEngine.FileComplier(content);


            //获取类型
            return(AssemblyOperator.Loader(assembly)[className]);
        }
示例#3
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, _) = ScriptComplieEngine.GetTreeAndClassNames(text);
            Assert.Equal("TestIndex1", ClassNames[0]);
            Assert.Equal("TestIndex2", ClassNames[1]);
            Assert.Equal("TestIndex3", ClassNames[2]);
            Assert.Equal("TestIndex4", ClassNames[3]);
        }
示例#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 = ScriptComplieEngine.StreamComplier(content);


            //判空
            if (assembly == null)
            {
                return(null);
            }


            //获取方法委托
            return(AssemblyOperator
                   .Loader(assembly)[className]
                   .GetMethod(methodName)
                   .CreateDelegate(typeof(T)));
        }