private static MemoryStream BuildCfg(Backend backend) { MemoryStream memoryStream = new MemoryStream(); using (StreamMarshaler streamBuffer = new StreamMarshaler(memoryStream)) { backend.IL = null; backend.PDB = null; backend.Commit(streamBuffer); return(memoryStream); } }
private static object CompileStream(int iCfg, ISrgsParser srgsParser, string srgsPath, string filename, Stream stream, bool fOutputCfg, StringBuilder innerCode, object cfgResources, out CultureInfo culture, string[] referencedAssemblies, string keyFile) { Backend backend = new Backend(); CustomGrammar customGrammar = new CustomGrammar(); SrgsElementCompilerFactory srgsElementCompilerFactory = (SrgsElementCompilerFactory)(srgsParser.ElementFactory = new SrgsElementCompilerFactory(backend, customGrammar)); srgsParser.Parse(); backend.Optimize(); culture = ((backend.LangId == 21514) ? new CultureInfo("es-us") : new CultureInfo(backend.LangId)); if (customGrammar._codebehind.Count > 0 && !string.IsNullOrEmpty(srgsPath)) { for (int i = 0; i < customGrammar._codebehind.Count; i++) { if (!File.Exists(customGrammar._codebehind[i])) { customGrammar._codebehind[i] = srgsPath + "\\" + customGrammar._codebehind[i]; } } } if (referencedAssemblies != null) { foreach (string item in referencedAssemblies) { customGrammar._assemblyReferences.Add(item); } } customGrammar._keyFile = keyFile; backend.ScriptRefs = customGrammar._scriptRefs; if (!fOutputCfg) { CustomGrammar.CfgResource cfgResource = new CustomGrammar.CfgResource(); cfgResource.data = BuildCfg(backend).ToArray(); cfgResource.name = iCfg.ToString(CultureInfo.InvariantCulture) + ".CFG"; ((List <CustomGrammar.CfgResource>)cfgResources).Add(cfgResource); innerCode.Append(customGrammar.CreateAssembly(iCfg, filename, culture)); return(customGrammar); } if (customGrammar._scriptRefs.Count > 0 && !customGrammar.HasScript) { XmlParser.ThrowSrgsException(SRID.NoScriptsForRules); } CreateAssembly(backend, customGrammar); if (!string.IsNullOrEmpty(filename)) { stream = new FileStream(filename, FileMode.Create, FileAccess.Write); } try { using (StreamMarshaler streamBuffer = new StreamMarshaler(stream)) { backend.Commit(streamBuffer); return(customGrammar); } } finally { if (!string.IsNullOrEmpty(filename)) { stream.Close(); } } }