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();
						});
		  }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
        //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);
        }
Esempio n. 4
0
 //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;
		}
Esempio n. 6
0
        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;
    }
Esempio n. 10
0
        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;
        }
Esempio n. 11
0
        /*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);
        }