Ejemplo n.º 1
0
        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
        }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 3
0
        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
        }
Ejemplo n.º 4
0
        public void TestDelegateEqual()
        {
            var domain = DomainManagement.Random;
            var action = NDelegate.Use(domain).Action(
                @"int i = 1+1;");

            Assert.Equal(domain, action.GetDomain());
        }
Ejemplo n.º 5
0
        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());
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
 public static Func <T> Creator <T>()
 {
     return(NDelegate.Use(typeof(T).GetDomain()).Func <T>($"return new {typeof(T).GetDevelopName()}();"));
 }