private bool CompileMode(CodeCompileUnit unit, out IUtilityComponentMode optimizedMode, ref string error) { var options = new CompilerParameters(); options.IncludeDebugInformation = false; options.GenerateInMemory = true; options.CompilerOptions = "/optimize"; CodeDomProvider compiler = CodeDomProvider.CreateProvider("CSharp"); var results = compiler.CompileAssemblyFromDom(options, unit); if (this.IncludeCode) { using (StreamWriter writer = new StreamWriter(String.Format("TMG.Modes.Generated.OptimizedMode{0}.cs", this.ModeName))) { //var results = compiler.CompileAssemblyFromDom( options, writer, unit ); compiler.GenerateCodeFromCompileUnit(unit, writer, new CodeGeneratorOptions()); } } if (results.Errors.Count != 0) { error = results.Errors[0].ToString(); optimizedMode = null; return(false); } var assembly = results.CompiledAssembly; var theClass = assembly.GetType(String.Format("TMG.Modes.Generated.OptimizedMode{0}", this.ModeName)); var constructor = theClass.GetConstructor(new Type[0]); optimizedMode = constructor.Invoke(new object[0]) as IUtilityComponentMode; return(true); }
private bool AttachUtilityComponentObjects(IUtilityComponentMode optimizedMode, ref string error) { var initFunction = optimizedMode.GetType().GetMethod("InitialzeUtilities"); if (this.FeasibilityCalculation != null) { initFunction.Invoke(optimizedMode, new object[] { this.FeasibilityCalculation, this.UtilityComponents }); } else { initFunction.Invoke(optimizedMode, new object[] { this.UtilityComponents }); } return(true); }
private bool CreateOptimizedMode(out IUtilityComponentMode optimizedMode, ref string error) { CodeCompileUnit unit = new CodeCompileUnit(); AddReferences(unit); CodeNamespace namespaceXTMF = AddNamespaces(unit); CodeTypeDeclaration modeClass = new CodeTypeDeclaration(String.Format("OptimizedMode{0}", this.ModeName)); modeClass.BaseTypes.Add(typeof(IUtilityComponentMode)); modeClass.IsClass = true; modeClass.TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed; AttachBasicModeProperties(modeClass); AttachConstructor(modeClass); AttachFeasible(modeClass); AttachRuntimeValidation(modeClass); AttachUtilityComponentInitializationMethod(modeClass); namespaceXTMF.Types.Add(modeClass); return(CompileMode(unit, out optimizedMode, ref error)); }
private bool RemoveUsThenAddToParent(IUtilityComponentMode optimizedMode, ref string error) { var parentCat = this.Parent as IModeCategory; var parentRoot = this.Parent as I4StepModel; if (parentCat != null) { var ourLocation = parentCat.Children.IndexOf(this); parentCat.Children.Insert(ourLocation, optimizedMode); parentCat.Children.Remove(this); } else if (parentRoot != null) { var ourLocation = parentRoot.Modes.IndexOf(this); parentRoot.Modes.Insert(ourLocation, optimizedMode); parentRoot.Modes.Remove(this); } else { error = "In '" + this.Name + "' we were unable to work with a parent module of type '" + this.Parent.GetType().FullName + "'!"; return(false); } return(true); }