public void Test3() { #if !NETCOREAPP2_2 using (DomainManagment.CreateAndLock("Default2")) { var domain = DomainManagment.CurrentDomain; var assembly = domain.CreateAssembly("ClassLibrary1"); assembly.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); var result2 = assembly.Compile(); var type2 = assembly.GetType("ClassLibrary1.Class1"); domain.RemoveAssembly(result2); var assembly1 = domain.CreateAssembly("AsmTest22"); assembly1.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); var result1 = assembly1.Compile(); var type1 = assembly1.GetType("ClassLibrary1.Class1"); Assert.NotEqual(result1, result2); Assert.Equal(type1.Name, type2.Name); lock (obj) { var func = NDelegate.Default().Func <object>("return new Class1();", "ClassLibrary1"); Assert.Equal(result1, func().GetType().Assembly); } } #endif }
public void Test1() { #if !NETCOREAPP2_2 lock (obj) { using (DomainManagment.CreateAndLock("TestSame")) { var domain = DomainManagment.CurrentDomain; var assembly = domain.CreateAssembly("ababab"); assembly.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); var result2 = assembly.Compile(); var type2 = assembly.GetType("ClassLibrary1.Class1"); string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lib", "Repeate", "ClassLibrary1.dll"); var result1 = domain.LoadStream(path); var type1 = result1.GetTypes().First(item => item.Name == "Class1"); Assert.True(domain.RemoveDll(path)); Assert.Equal("TestSame", DomainManagment.CurrentDomain.Name); Assert.NotEqual(result1, result2); Assert.Equal(type1.Name, type2.Name); var func = NDelegate.Default().Func <object>("return new Class1();", "ClassLibrary1"); Assert.Equal(result2, func().GetType().Assembly); } } #endif }
public void Test4() { #if !NETCOREAPP2_2 lock (obj) { Assembly result1; //using (DomainManagment.Lock("Default")) //{ var domain = DomainManagement.CurrentDomain; var assembly = domain.CreateAssembly("DAsmTest1"); assembly.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); var result2 = assembly.GetAssembly(); var type2 = result2.GetTypes().First(item => item.Name == "Class1"); domain.Remove(result2); var assembly1 = domain.CreateAssembly("DAsmTest2"); assembly1.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); result1 = assembly1.GetAssembly(); var type1 = result1.GetTypes().First(item => item.Name == "Class1"); Assert.NotEqual(result1, result2); Assert.Equal(type1.Name, type2.Name); //} var func = NDelegate.Default().Func <object>("return new Class1();", "ClassLibrary1"); Assert.Equal(result1, func().GetType().Assembly); DomainManagement.Default.Remove(result1); } #endif }
public void Test5() { #if !NETCOREAPP2_2 lock (obj) { Assembly result1; var domain = DomainManagement.CurrentDomain; //var assembly = domain.CreateAssembly("AsmTest1"); //assembly.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); //var result2 = assembly.Compiler(); //var type2 = assembly.GetType("Class1"); //domain.RemoveAssembly(result2); string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lib", "Repeate", "ClassLibrary1.dll"); result1 = domain.LoadPluginFromStream(path); var type1 = result1.GetTypes().First(item => item.Name == "Class1"); //Assert.NotEqual(result1, result2); //Assert.Equal(type1.Name, type2.Name); var func = NDelegate.Default().Func <object>("return new Class1();", "ClassLibrary1"); Assert.Equal(result1, func().GetType().Assembly); DomainManagement.Default.Remove(path); } #endif }
public void Precache() { Type type = typeof(CallModel); DynamicMethod method = new DynamicMethod("GetString", typeof(string), new Type[] { type }); ILGenerator il = method.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldfld, type.GetField("Age")); il.Emit(OpCodes.Ret); EmitGetString = (Func <CallModel, string>)(method.CreateDelegate(typeof(Func <CallModel, string>))); method = new DynamicMethod("GetDateTime", typeof(DateTime), new Type[] { type }); il = method.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldfld, type.GetField("CreateTime")); il.Emit(OpCodes.Ret); EmitGetDateTime = (Func <CallModel, DateTime>)(method.CreateDelegate(typeof(Func <CallModel, DateTime>))); method = new DynamicMethod("SetDateString", null, new Type[] { type, typeof(string) }); il = method.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldarg_1); il.Emit(OpCodes.Stfld, type.GetField("Age")); il.Emit(OpCodes.Ret); EmitSetString = (Action <CallModel, string>)(method.CreateDelegate(typeof(Action <CallModel, string>))); method = new DynamicMethod("SetDateTime", null, new Type[] { type, typeof(DateTime) }); il = method.GetILGenerator(); il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldarg_1); il.Emit(OpCodes.Stfld, type.GetField("CreateTime")); il.Emit(OpCodes.Ret); EmitSetDateTime = (Action <CallModel, DateTime>)(method.CreateDelegate(typeof(Action <CallModel, DateTime>))); NatashaGetString = NDelegate.Default().Func <CallModel, string>("return arg.Age;"); NatashaGetString(OriginModel); OriginGetString = item => item.Age; NatashaGetDateTime = NDelegate.Default().Func <CallModel, DateTime>("return arg.CreateTime;"); NatashaGetDateTime(OriginModel); OriginGetDateTime = item => item.CreateTime; NatashaSetString = NDelegate.Default().Action <CallModel, string>("arg1.Age=arg2;"); NatashaSetString(OriginModel, OriginModel.Age); OriginSetString = (item, value) => item.Age = value; NatashaSetDateTime = DelegateOperator <ValueDelegate> .Delegate("model.CreateTime=value;"); NatashaSetDateTime(OriginModel, OriginModel.CreateTime); OriginSetDateTime = OriginDateTime; }