/// <summary> /// Generates and returns the generated output /// </summary> /// <param name="inputFileName">The name of the file the custom tool is being run against</param> /// <param name="inputFileContent">The contents of the file the custom tool is being run against</param> protected override byte[] GenerateCode(string inputFileName, string inputFileContent) { GadgeteerModel model = LoadGadgeteerModel(inputFileName); if (model == null) { OnError("Unable to load model: {0}", inputFileName); return(null); } string userCodeFileName = Path.ChangeExtension(inputFileName, CodeProvider.FileExtension); model.GenerateUsingsInUserCode(GlobalServiceProvider, userCodeFileName); CodeCompileUnit code = new CodeCompileUnit(); CodeTypeDeclaration programClass; CodeStatementCollection mainStatements; CodeStatementCollection initializeModuleStatements; CodeMemberProperty mainboard; GenerateFileHeader(inputFileName, code, out programClass, out mainStatements, out initializeModuleStatements, out mainboard); GenerateMainMethod(mainStatements, model); GenerateModulesDeclaration(programClass, model); GenerateModulesInitialization(initializeModuleStatements, model); GenerateMainboardProperty(mainboard, model); if (model.Store != null) { model.Store.Dispose(); } using (MemoryStream codeStream = new MemoryStream()) { IndentedTextWriter codeWriter = new IndentedTextWriter(new StreamWriter(codeStream)); try { CodeProvider.GenerateCodeFromCompileUnit(code, codeWriter, null); } catch (Exception compileException) { OnError("Code generation failed: {0}", compileException.Message); return(new byte[0]); } codeWriter.Flush(); return(codeStream.ToArray()); } }
protected override byte[] GenerateContent(string inputFilePath, string inputFileContents) { var codeNamespace = new CodeNamespace(DefaultNamespace); var codeUnit = Emitter.Emit(_ctx, codeNamespace, inputFilePath); using (var w = new StringWriter()) { CodeProvider.GenerateCodeFromCompileUnit(codeUnit, w, new CodeGeneratorOptions { BlankLinesBetweenMembers = false, }); return(Encoding.ASCII.GetBytes(w.ToString())); } }
/// <summary> /// Generates a strongly typed assembly from the resources /// /// UNDER CONSTRUCTION. /// Doesn't work correctly for Web forms due to hard coded resource managers. /// </summary> /// <param name="ResourceSetName"></param> /// <param name="Namespace"></param> /// <param name="Classname"></param> /// <param name="FileName"></param> /// <returns></returns> public bool CreateStronglyTypedResource(string ResourceSetName, string Namespace, string Classname, string FileName) { try { //wwDbResourceDataManager Data = new wwDbResourceDataManager(); //IDictionary ResourceSet = Data.GetResourceSet("", ResourceSetName); // *** Use the custom ResourceManage to retrieve a ResourceSet wwDbResourceManager Man = new wwDbResourceManager(ResourceSetName); ResourceSet rs = Man.GetResourceSet(CultureInfo.InvariantCulture, false, false); IDictionaryEnumerator Enumerator = rs.GetEnumerator(); // *** We have to turn into a concret Dictionary Dictionary <string, object> Resources = new Dictionary <string, object>(); while (Enumerator.MoveNext()) { DictionaryEntry Item = (DictionaryEntry)Enumerator.Current; Resources.Add(Item.Key as string, Item.Value); } string[] UnmatchedElements; CodeDomProvider CodeProvider = null; string FileExtension = Path.GetExtension(FileName).TrimStart('.').ToLower(); if (FileExtension == "cs") { CodeProvider = new Microsoft.CSharp.CSharpCodeProvider(); } else if (FileExtension == "vb") { CodeProvider = new Microsoft.VisualBasic.VBCodeProvider(); } CodeCompileUnit Code = StronglyTypedResourceBuilder.Create(Resources, ResourceSetName, Namespace, CodeProvider, false, out UnmatchedElements); StreamWriter writer = new StreamWriter(FileName); CodeProvider.GenerateCodeFromCompileUnit(Code, writer, new CodeGeneratorOptions()); writer.Close(); } catch (Exception ex) { this.ErrorMessage = ex.Message; return(false); } return(true); }