public void Test3() { #if !NETCOREAPP2_2 NSucceedLog.Enabled = true; using (DomainManagement.CreateAndLock("Default2")) { var domain = DomainManagement.CurrentDomain; var assembly = domain.CreateAssembly("ClassLibrary1"); 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.RemoveAssembly(result2); var assembly1 = domain.CreateAssembly("AsmTest22"); assembly1.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); var result1 = assembly1.GetAssembly(); var type1 = result1.GetTypes().First(item => item.Name == "Class1"); Assert.NotEqual(result1, result2); Assert.Equal(type1.Name, type2.Name); domain.Remove(result2); lock (obj) { //Class1 同时存在于 ClassLibrary1 和 AsmTest22 中 var func = NDelegate.Use(domain).Func <object>("return new Class1();", "ClassLibrary1"); Assert.Equal(result1, func().GetType().Assembly); } } #endif }
public void Test2() { #if !NETCOREAPP2_2 using (DomainManagement.CreateAndLock("Default1")) { var domain = DomainManagement.CurrentDomain; var assembly = domain.CreateAssembly("ClassLibrary1"); 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"); try { var assembly1 = domain.CreateAssembly("AsmTest2"); assembly1.AddScript("using System;namespace ClassLibrary1{ public class Class1{public string name;}}"); var result1 = assembly1.GetAssembly(); var type1 = result1.GetTypes().First(item => item.Name == "Class1"); Assert.NotEqual(result1, result2); Assert.Equal(type1.Name, type2.Name); lock (obj) { var func = NDelegate.Use(domain).Func <object>("return new Class1();", "ClassLibrary1"); Assert.Equal(result2, func().GetType().Assembly); } } catch (Exception ex) { Assert.NotNull(ex); } } #endif }
public void Test1() { #if !NETCOREAPP2_2 lock (obj) { using (DomainManagement.CreateAndLock("TestSame")) { var domain = DomainManagement.CurrentDomain; var assembly = domain.CreateAssembly("ababab"); 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"); string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lib", "Repeate", "ClassLibrary1.dll"); var result1 = domain.LoadPluginFromStream(path); var type1 = result1.GetTypes().First(item => item.Name == "Class1"); domain.Remove(path); Assert.Equal("TestSame", DomainManagement.CurrentDomain.Name); Assert.NotEqual(result1, result2); Assert.Equal(type1.Name, type2.Name); var func = NDelegate.Use(domain).Func <object>("return new Class1();", "ClassLibrary1"); Assert.Equal(result2, func().GetType().Assembly); } } #endif }
public void TestDelegateEqual() { var domain = DomainManagement.Random; var action = NDelegate.Use(domain).Action( @"int i = 1+1;"); Assert.Equal(domain, action.GetDomain()); }
public void TestTypeEqual() { var domain = DomainManagement.Random; var type = NDelegate.Use(domain).GetType( @"public class DomainTest1{ public string Name; public int Operator; }"); Assert.Equal(domain, type.GetDomain()); }
static void Main(string[] args) { var a123 = NClass.Use(typeof(Program).GetDomain()); var domain = DomainManagment.Random; var type = NDelegate.Use(domain).GetType("public class A{ public A(){Name=\"1\"; }public string Name;}"); Console.WriteLine(type.FullName); var func = NDelegate.Use(domain).Func <string>("return (new A()).Name;"); Console.WriteLine(func()); type.RemoveReferences(); type = NDelegate.Use(domain).GetType("public class A{ public A(){Name=\"2\"; }public string Name;}"); func = NDelegate.Use(domain).Func <string>("return (new A()).Name;"); Console.WriteLine(type.FullName); Console.WriteLine(func()); domain = DomainManagment.Create("a"); using (DomainManagment.Lock("a")) { Console.WriteLine(domain == (AssemblyDomain)AssemblyLoadContext.CurrentContextualReflectionContext); } }
public static Func <T> Creator <T>() { return(NDelegate.Use(typeof(T).GetDomain()).Func <T>($"return new {typeof(T).GetDevelopName()}();")); }