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.UseDomain(domain).AddUsing("ClassLibrary1").Func <object>("return new Class1();"); Assert.Equal(result2, 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.UseDomain(domain) .AddUsing("ClassLibrary1") .Func <object>("return new Class1();"); Assert.Equal(result2, func().GetType().Assembly); } } catch (Exception ex) { Assert.NotNull(ex); } } #endif }
static void Main(string[] args) { Show1(); Console.WriteLine(DomainManagement.IsDeleted("TempDomain11")); Console.ReadKey(); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { NatashaController.Builder = (ApplicationBuilder)app; DomainManagement.RegisterDefault <AssemblyDomain>(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseSwagger(); // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), // specifying the Swagger JSON endpoint. app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); c.RoutePrefix = string.Empty; }); app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); NatashaController.Endpoints = endpoints.DataSources; }); }
public static void Show1() { string result; string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lib", "Sql", "ClassLibrary1.dll"); using (DomainManagement.CreateAndLock("TempDomain11")) { var domain = DomainManagement.CurrentDomain; var assemebly = domain.LoadPluginFromStream(path); var action = FastMethodOperator.DefaultDomain() .Using(assemebly) .Body(@" try{ Class1 a = new Class1(); return a.Show(); } catch(Exception e){ return e.Message; } return default;").Return <string>() .Compile <Func <string> >(); result = action(); Console.WriteLine(result); } }
public string GetResult1() { string result; string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lib", "Sql", "ClassLibrary1.dll"); Assert.True(File.Exists(path)); using (DomainManagement.CreateAndLock("TempDADomain11")) { var domain = DomainManagement.CurrentDomain; var assemebly = domain.LoadPlugin(path); var action = FastMethodOperator.UseDomain(domain) .WithCS0104Handler() .Body(@" try{ Class1 a = new Class1(); return a.Show(); } catch(Exception e){ Console.WriteLine(e.Message); return e.Message; } return default;").Return <string>() .Compile <Func <string> >(); result = action(); domain.Dispose(); } return(result); }
public static void TestMemoery() { Console.WriteLine("Memory1"); List <Type> list = new List <Type>(); var domain1 = DomainManagement.Create("TempDomain1"); for (int i = 0; i < 500; i += 1) { Console.WriteLine("new"); NClass nStruct = new NClass(); nStruct .Namespace("Core301") .Name($"Test{i}") .Ctor(builder => builder .Public() .Param <string>("name") .Body("Name=name;")) .PublicField <string>("Name") .PublicField <string>("Name1") .PublicField <string>("Name2") .PublicField <string>("Name3") .PublicField <string>("Name4"); list.Add(nStruct.GetType()); } DomainManagement.Get("TempDomain1").Dispose(); }
static void Main(string[] args) { AssemblyDomain.Init(); var hwFunc = FastMethodOperator .RandomDomain() .Param(typeof(string), "str1") .Param <string>("str2") .Body("return str1+str2;") .Return <string>() .Compile <Func <string, string, string> >(); Console.WriteLine(hwFunc("Hello", " World!")); var a123 = NClass.UseDomain(typeof(Program).GetDomain()); var domain = DomainManagement.Random; var type = NDelegate.UseDomain(domain).GetType("public class A{ public A(){Name=\"1\"; }public string Name;}"); var func = NDelegate.UseDomain(domain).Func <string>("return (new A()).Name;"); Console.WriteLine(type.FullName); Console.WriteLine(func()); //type.RemoveReferences(); type = NDelegate.UseDomain(domain).GetType("public class A{ public A(){Name=\"2\"; }public string Name;}"); func = NDelegate.UseDomain(domain).Func <string>("return (new A()).Name;"); Console.WriteLine(type.FullName); Console.WriteLine(func()); domain = DomainManagement.Create("a"); using (DomainManagement.Lock("a")) { Console.WriteLine(domain == (AssemblyDomain)AssemblyLoadContext.CurrentContextualReflectionContext); } }
static void Main(string[] args) { NatashaInitializer.Initialize(false); string text = @"namespace HelloWorld { public class Test { public Test(){ Name=""111""; } public string Name; public int Age{get;set;} } }"; //根据脚本创建动态类 AssemblyCSharpBuilder oop = new AssemblyCSharpBuilder("test"); oop.Domain = DomainManagement.Random; oop.Domain.AddReferencesFromDllFile(typeof(object).Assembly.Location); oop.Add(text); Type type = oop.GetTypeFromShortName("Test"); Console.WriteLine(type.Name); var action = NDelegate.UseDomain(oop.Domain).Action(""); var a = action.Method; Console.WriteLine(action.Method.Module.Assembly); Console.WriteLine(DomainManagement.IsDeleted(action.GetDomain().Name)); Console.ReadKey(); }
public unsafe static string Test() { var dict2 = new Dictionary <int, string>(); var dict = new Dictionary <string, int>(); for (int i = 0; i < 10; i++) { dict[i.ToString()] = i; dict2[i] = i.ToString(); } var test = dict2.CustomerTree(item => item.ToString()); var temp = dict.HashTree(); var name = temp.GetType().Name; var result = temp["1"]; //var a = temp.GetKeys(1); //var domainName = temp.ProxyType.GetDomain().Name; Console.WriteLine(DomainManagement.IsDeleted(name)); // temp.Dispose(); for (int i = 0; i < 6; i++) { GC.Collect(); } return(name); }
public static void TestMemoery2() { Console.WriteLine("Memory2"); var domain1 = DomainManagement.Create("TempDomain2"); for (int i = 0; i < 10; i += 1) { Thread.Sleep(5000); Console.WriteLine("new"); NClass nStruct = new NClass(); nStruct .Namespace("Core30") .Name($"Test{i}") .Ctor(builder => builder .Public() .Param <string>("name") .Body("Name=name;")) .PublicField <string>("Name") .PublicField <string>("Name1") .PublicField <string>("Name2") .PublicField <string>("Name3") .PublicField <string>("Name4"); var type = nStruct.GetType(); } DomainManagement.Get("TempDomain2").Dispose(); DomainManagement.Get("TempDomain2").Unload(); }
public void DDReferenceCompile() { using (DomainManagement.Create("DiffDomainReferenceCompare1").CreateScope()) { Assert.NotEqual("Default", DomainManagement.CurrentDomain.Name); AssemblyCSharpBuilder builder1 = new(); builder1.Add(DefaultUsing.UsingScript + "namespace TestA{ public class A { public string Name = \"Hello\"; public static NatashaUsingCache Get(){ return null;} }}"); var assemblyA = builder1 .CompileWithReferenceLoadBehavior(LoadBehaviorEnum.UseDefault) .GetAssembly(); var typeA = assemblyA.GetTypes().Where(item => item.Name == "A").First(); var objA = Activator.CreateInstance(typeA); Assert.NotNull(assemblyA); Assert.True(builder1.Domain.UsingRecorder.HasUsing("TestA")); } using (DomainManagement.Create("DiffDomainReferenceCompare2").CreateScope()) { AssemblyCSharpBuilder builder2 = new(); builder2.Add(DefaultUsing.UsingScript + "namespace TestB{ public class A { public string Name = \"Hello\"; public static NatashaUsingCache Get(){ return null;} }}"); var assemblyB = builder2 .CompileWithReferenceLoadBehavior(LoadBehaviorEnum.None) .GetAssembly(); var typeB = assemblyB.GetTypes().Where(item => item.Name == "A").First(); var objB = Activator.CreateInstance(typeB); Assert.NotNull(assemblyB); Assert.True(builder2.Domain.UsingRecorder.HasUsing("TestB")); } var domain1 = DomainManagement.Get("DiffDomainReferenceCompare1") !; var domain2 = DomainManagement.Get("DiffDomainReferenceCompare2") !; Assert.True(domain1.Assemblies.Any()); Assert.Equal(domain1.Assemblies.Count(), domain2.Assemblies.Count()); Assert.True(domain1.References.Count == domain2.References.Count); }
public void DNDASDCompile() { using (DomainManagement.Random().CreateScope()) { Assert.NotEqual("Default", DomainManagement.CurrentDomain.Name); AssemblyCSharpBuilder builder = new(); builder.AssemblyName = "ASDASD1"; builder.Add("namespace TestA{ public class A { public string Name = \"Hello\"; }}"); var assemblyA = builder.GetAssembly(); Assert.NotNull(assemblyA); Assert.True(builder.Domain.UsingRecorder.HasUsing("TestA")); builder.SyntaxTrees.Clear(); builder.AssemblyName = "ASDASD2"; builder.Add(builder.Domain.UsingRecorder.ToString() + "namespace TestB{public class B { public B(){ Name=\" World!\"; } public string Name; }}"); var assemblyB = builder.GetAssembly(); Assert.True(builder.Domain.UsingRecorder.HasUsing("TestB")); Assert.NotNull(assemblyB); builder.SyntaxTrees.Clear(); builder.AssemblyName = "ASDASD3"; builder.Add(builder.Domain.UsingRecorder.ToString() + "public class C { public static string Show(){ return ((new A()).Name+(new B()).Name); } }"); var assemblyC = builder.GetAssembly(); var type = assemblyC.GetTypes().Where(item => item.Name == "C").First(); var methodInfo = type.GetMethod("Show"); var result = (string)methodInfo !.Invoke(null, null) !; Assert.Equal("Hello World!", result); } }
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.UseDomain(domain).AddUsing("ClassLibrary1").Func <object>("return new Class1();"); Assert.Equal(result1, func().GetType().Assembly); } } #endif }
public void Test3() { using (DomainManagement.CreateAndLock("CDomain1")) { var domain = DomainManagement.CurrentDomain; Assert.Equal("CDomain1", domain.Name); } }
public static void Release() { func = null; for (int i = 0; i < count; i++) { var handler = DomainManagement.Get("test" + i.ToString()); handler.Dispose(); } }
public void Test2() { Assert.Equal("11", GetResult2()); for (int i = 0; i < 6; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } Assert.True(DomainManagement.IsDeleted("TempDomain12")); }
public static void CheckAlive() { for (int i = 0; i < count; i++) { if (!DomainManagement.IsDeleted("test" + i.ToString())) { Console.WriteLine($"{i} is aliave!"); } } }
public AssemblyDomain(string key) : base(key) { #if !NETSTANDARD2_0 _load_resolver = new AssemblyDependencyResolver(AppDomain.CurrentDomain.BaseDirectory); #endif ShortReferences = new ShortNameReference(); DllAssemblies = new ConcurrentDictionary <string, Assembly>(); DomainManagement.Add(key, this); }
public void Test4() { using (DomainManagement.CreateAndLock("TempDomain14")) { var(Assembly, TypeCache) = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lib", "Sql", "ClassLibrary1.dll"); Assert.Equal("ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", Assembly.FullName); Assert.Equal("Class1", TypeCache["ClassLibrary1.Class1"].Name); Assert.Equal("ClassLibrary1.Class1", TypeCache["ClassLibrary1.Class1"].FullName); } }
public void Test3() { Assert.Equal("{\"Name\":\"11\"}", GetResult3()); for (int i = 0; i < 6; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } Assert.False(DomainManagement.IsDeleted("TempDomain13")); }
/// <summary> /// 创建一个域来初始化编译单元. 此方法创建的实例 instance. <br/> /// </summary> /// <remarks> /// <example> /// <code> /// /// //使用 NoGlobalUsing 来禁用全局 using 覆盖.(默认开启) /// instance.NoGlobalUsing(); /// /// //使用 NotLoadDomainUsing 来禁用域内 using 覆盖.(默认开启) /// instance.NotLoadDomainUsing(); /// /// //使用 ConfigBuilder 方法来配置编译单元. /// instance.ConfigBuilder(bld=>bld); /// /// //使用 ConfigCompilerOption 方法来配置编译选项. /// bld=>bld.ConfigCompilerOption(opt=>opt.xxx); /// /// //使用 ConfigSyntaxOptions 方法来配置语法选项 /// bld=>bld.ConfigSyntaxOptions(opt=>opt.xxx). /// /// </code> /// </example> /// </remarks> public static T CreateDomain(string domainName, Action <AssemblyCSharpBuilder>?option = default) { if (domainName.ToLower() == "default") { return(UseDomain(NatashaReferenceDomain.DefaultDomain, option)); } else { return(UseDomain(DomainManagement.Create(domainName), option)); } }
public static T Create(string domainName, Action <AssemblyCSharpBuilder> option = default) { if (domainName == default || domainName.ToLower() == "default") { return(Use(DomainManagement.Default, option)); } else { return(Use(DomainManagement.Create(domainName), option)); } }
public void Test1() { //Assert.Equal("Unable to connect to any of the specified MySQL hosts.",GetResult1()); GetResult1(); for (int i = 0; i < 6; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } Assert.True(DomainManagement.IsDeleted("TempDADomain11")); }
public static void UnloadDelegate() { Assert.Equal(3, RunDelegate6()); #if !NETCOREAPP2_2 for (int i = 0; i < 6; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } Assert.True(DomainManagement.IsDeleted("NDelegate6")); #endif }
public void Test1() { //ForTest1(); Assert.Equal("HelloTest", ForTest1()); #if !NETCOREAPP2_2 for (int i = 0; i < 10; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } Assert.True(DomainManagement.IsDeleted("SingleDomainAsmTest1")); #endif }
public static int CheckAlive() { int tempCount = 0; for (int i = 0; i < count; i++) { if (!DomainManagement.IsDeleted("test" + i.ToString())) { tempCount++; Console.WriteLine($"{i} is aliave!"); } } return(tempCount); }
static void Main(string[] args) { NatashaInitializer.InitializeAndPreheating(); var domainName = Test(); for (int i = 0; i < 6; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); } Console.WriteLine(domainName); Console.WriteLine(DomainManagement.IsDeleted(domainName)); Console.ReadKey(); }
public static void Testqq() { Thread.Sleep(5000); TestMemoery(); for (int i = 0; (!DomainManagement.IsDeleted("TempDomain1")) && (i < 15); i++) { Console.WriteLine($"\t第{i}次!"); GC.Collect(); GC.WaitForPendingFinalizers(); Thread.Sleep(500); } //Testt(); Console.WriteLine(DomainManagement.IsDeleted("TempDomain1") ? "回收成功!" : "回收失败!"); }
static void Main(string[] args) { NatashaInitializer.Initialize(); string text = @"namespace HelloWorld { public class Test { public Test(){ Name=""111""; } public string Name; public int Age{get;set;} } }"; //根据脚本创建动态类 AssemblyCSharpBuilder oop = new AssemblyCSharpBuilder("test"); oop.Domain = DomainManagement.Random; //oop.Domain.AddReferencesFromDllFile(typeof(object).Assembly.Location); oop.Add(text); Type type = oop.GetTypeFromShortName("Test"); Console.WriteLine(type.Name); var action = NDelegate.UseDomain(oop.Domain).Action(""); var a = action.Method; Console.WriteLine(action.Method.Module.Assembly); Console.WriteLine(DomainManagement.IsDeleted(action.GetDomain().Name)); //var nClass = NClass // .RandomDomain(); //nClass.DelegateHandler. //type = NClass // .RandomDomain().Namespace("") // .Name("Test") // .Ctor(item => item // .Public() // .Body("Name = null;") // ) // .PublicField<string>("Name") // .GetType(); //type.Assembly //CSharpScript.EvaluateAsync Console.ReadKey(); }