public static void executeInAppDomain(string appDomainName,string scriptToExecute) { O2Thread.mtaThread( ()=>{ var o2AppDomain = new O2AppDomainFactory(appDomainName); try { o2AppDomain.load("O2_XRules_Database"); o2AppDomain.load("O2_Kernel"); o2AppDomain.load("O2_DotNetWrappers"); var o2Proxy = (O2Proxy)o2AppDomain.getProxyObject("O2Proxy"); o2Proxy.InvokeInStaThread = true; o2Proxy.staticInvocation("O2_External_SharpDevelop","FastCompiler_ExtensionMethods","executeSourceCode",new object[]{ scriptToExecute }); } catch(Exception ex) { ex.log("inside new AppDomain"); } DebugMsg.showMessageBox("Click OK to close the '{0}' AppDomain (and close all open windows)".format(appDomainName)); o2AppDomain.unLoadAppDomain(); }); }
/// <summary> /// This will generate an anonymous appDomain proxy (good for tests but _note that the AppDomain will not be terminated /// </summary> /// <param name="assemblyName"></param> /// <param name="typeToCreateSimpleName"></param> /// <returns></returns> public static object getProxy(string assemblyName, string typeToCreateSimpleName) { string appDomainName = Path.GetFileNameWithoutExtension(PublicDI.config.TempFileNameInTempDirectory) + "_" + typeToCreateSimpleName; // make sure each appDomainName is unique var tempAppDomainFactory = new O2AppDomainFactory(appDomainName); return(tempAppDomainFactory.getProxyObject(typeToCreateSimpleName)); }
//public static object createObject() public static object loadTypeAndExecuteMethodInAppDomain(AppDomain appDomain, string dllWithType, string typeToCreateAndUnwrap, string methodToExecute, object[] methodParameters) { var appDomainHelper = new O2AppDomainFactory(appDomain); object proxyObject = appDomainHelper.appDomain().createAndUnWrap(dllWithType, typeToCreateAndUnwrap); if (proxyObject == null) { PublicDI.log.error("in loadTypeAndExecuteMethodInAppDomain, proxy == null"); } else { MethodInfo methodInfo = PublicDI.reflection.getMethod(proxyObject.GetType(), methodToExecute, methodParameters); if (methodInfo == null) { PublicDI.log.error("in loadTypeAndExecuteMethodInAppDomain, methodInfo == null"); } else { return(PublicDI.reflection.invoke(proxyObject, methodInfo, methodParameters)); } } return(null); }
//public static object createObject() public static object loadTypeAndExecuteMethodInAppDomain(AppDomain appDomain, string dllWithType, string typeToCreateAndUnwrap, string methodToExecute, object[] methodParameters) { var appDomainHelper = new O2AppDomainFactory(appDomain); object proxyObject = appDomainHelper.appDomain().createAndUnWrap(dllWithType, typeToCreateAndUnwrap); if (proxyObject == null) PublicDI.log.error("in loadTypeAndExecuteMethodInAppDomain, proxy == null"); else { MethodInfo methodInfo = PublicDI.reflection.getMethod(proxyObject.GetType(), methodToExecute, methodParameters); if (methodInfo == null) PublicDI.log.error("in loadTypeAndExecuteMethodInAppDomain, methodInfo == null"); else return PublicDI.reflection.invoke(proxyObject, methodInfo, methodParameters); } return null; }
public static O2AppDomainFactory openO2ReplInClojureFolder(this API_Clojure apiClojure, bool openScriptInEditor_InsteadOfExecutingIt) { var defaultAssemblies = new List<string>() { "FluentSharp.CoreLib.dll".assembly_Location(), "FluentSharp.BCL.dll".assembly_Location(), "FluentSharp.REPL.exe".assembly_Location(), "O2_Platform_External_SharpDevelop.dll".assembly_Location()}; var name = "Clojure".add_RandomLetters(4); var baseFolder = apiClojure.RootFolder; //var o2ScriptsFolder = apiClojure.RootFolder.append("O2"); var o2ScriptsFolder = apiClojure.RootFolder; var clojureExe = apiClojure.ClojureExe; if (baseFolder.dirExists().isFalse()) { "in openO2ReplInClojureFolder, provided base folder didn't exist: {0}".error(baseFolder); apiClojure.script_Me(); return null; } "Clojure-icon.png".local().file_Copy(o2ScriptsFolder); "Launch Clojure REPL.h2".local().file_Copy(o2ScriptsFolder); "API_Clojure.cs".local().file_Copy(o2ScriptsFolder); "[openO2ReplInClojureFolder] creating AppDomain on folder {0}".info(baseFolder); var o2AppDomain = new O2AppDomainFactory(name, baseFolder, defaultAssemblies); var scriptToExecute = "Launch Clojure REPL.h2".local().fileContents(); //"Script to execute: {0}".info(scriptToExecute); var script_Base64Encoded = scriptToExecute.base64Encode(); if (openScriptInEditor_InsteadOfExecutingIt) scriptToExecute = "open.scriptEditor().inspector.set_Script(\"{0}\".base64Decode()).waitForClose();".line().format(script_Base64Encoded); o2AppDomain.executeScriptInAppDomain(scriptToExecute, false, false); return o2AppDomain; }
public static string codeStreams_CreateInAppDomain(this Saved_MethodStream savedMethodStream) { //var script = @"C:\O2\_XRules_Local\Ast_Test.cs"; var script = "Saved_MethodStream.cs".local(); "Creating new AppDomain".info(); var appDomainName = 4.randomString(); var o2AppDomain = new O2AppDomainFactory(appDomainName); o2AppDomain.appDomain().load("FluentSharp.CoreLib.dll"); var o2Proxy = (O2Proxy)(o2AppDomain.appDomain().getProxyObject("O2Proxy")); var parameters = new object[] { savedMethodStream.Serialized_Saved_MethodStream_FileCache // sourceFolder, // resultsFolder, // methodFilter, // useCachedData, // references, // numberOfItemsToProcess }; var result =(string)o2Proxy.staticInvocation("O2_External_SharpDevelop","FastCompiler_ExtensionMethods","executeFirstMethod",new object[]{script, parameters}); "Result: {0}".info(result); o2AppDomain.sleep(2000); o2AppDomain.appDomain().unLoadAppDomain(); "AppDomain execution completed, Runing GCCollect".info(); PublicDI.config.gcCollect(); "GCCollect completed, returning result data: {0}".info(result); return result; }
public static O2AppDomainFactory createAppDomain(this string appDomainName) { var o2AppDomainFactory = new O2AppDomainFactory(appDomainName); o2AppDomainFactory.appDomain().loadMainO2Dlls(); return o2AppDomainFactory; }
public static O2AppDomainFactory appDomain_New(this string appDomainName) { var appDomain = new O2AppDomainFactory(appDomainName); return appDomain; }
public static O2AppDomainFactory getO2AppDomainFactoryOnTempDirWithAllDependenciesResolved( string fullPathToDllToProcess) { var o2AppDomainFactory = new O2AppDomainFactory(); if (false == o2AppDomainFactory.load(Path.GetFileNameWithoutExtension(fullPathToDllToProcess), fullPathToDllToProcess, true)) return null; Dictionary<string, string> assemblyDependencies = new CecilAssemblyDependencies(fullPathToDllToProcess).calculateDependencies(); if (o2AppDomainFactory.load(assemblyDependencies).Count == 0) return o2AppDomainFactory; PublicDI.log.error( "in getO2AppDomainFactoryOnTempDirWithAllDependenciesResolved, there were assemblyDependencies that were not loaded, for: " + fullPathToDllToProcess); return null; }
public static string executeEngineOnSeparateAppDomain(string sourceFolder, string resultsFolder, string methodFilter, bool useCachedData, List<string> references, int numberOfItemsToProcess) { //var script = @"C:\O2\_XRules_Local\Ast_Test.cs"; var script = "MethodMappings_Engine.cs".local(); "Creating new AppDomain".info(); var appDomainName = 4.randomString(); var o2AppDomain = new O2AppDomainFactory(appDomainName); //o2AppDomain.load("O2_XRules_Database"); //o2AppDomain.load("O2_Kernel"); //o2AppDomain.load("O2_DotNetWrappers"); o2AppDomain.appDomain().load("FluentSharp.CoreLib", "FluentSharp.WinForms", "FluentSharp.REPL", "FluentSharp.SharpDevelopEditor.dll"); var o2Proxy = (O2Proxy)(o2AppDomain.appDomain().getProxyObject("O2Proxy")); var parameters = new object[] { sourceFolder, resultsFolder, methodFilter, useCachedData, references, numberOfItemsToProcess }; var result =(string)o2Proxy.staticInvocation("O2_External_SharpDevelop","FastCompiler_ExtensionMethods","executeFirstMethod",new object[]{script, parameters}); o2AppDomain.appDomain().unLoadAppDomain(); "AppDomain execution completed, Runing GCCollect".info(); PublicDI.config.gcCollect(); "GCCollect completed, returning result data: {0}".info(result); return result; }
/*static Assembly assemblyResolve(object sender, ResolveEventArgs args) { //return Assembly.LoadFile(GetAssemblyFileName()); return null; } */ /// <summary> /// This will generate an anonymous appDomain proxy (good for tests but _note that the AppDomain will not be terminated /// </summary> /// <param name="assemblyName"></param> /// <param name="typeToCreateSimpleName"></param> /// <returns></returns> public static object getProxy(string assemblyName, string typeToCreateSimpleName) { string appDomainName = Path.GetFileNameWithoutExtension(PublicDI.config.TempFileNameInTempDirectory) + "_" + typeToCreateSimpleName; // make sure each appDomainName is unique var tempAppDomainFactory = new O2AppDomainFactory(appDomainName); return tempAppDomainFactory.appDomain().getProxyObject(typeToCreateSimpleName); }