/// <summary> /// Generates source code for the virtual path of the build provider, and adds the source code to a specified assembly builder. /// </summary> /// <param name="assemblyBuilder">The assembly builder that references the source code generated by the build provider.</param> public override void GenerateCode(AssemblyBuilder assemblyBuilder) { Utility.WriteTrace("Invoking BuildProvider"); DataService.LoadProviders(); ICodeLanguage language = new CSharpCodeLanguage(); DirectoryInfo di = new DirectoryInfo(HostingEnvironment.ApplicationPhysicalPath + "\\App_Code"); FileInfo[] fi = di.GetFiles("*.vb"); if (fi.Length > 0) { language = new VBCodeLanguage(); } StringBuilder code = new StringBuilder(language.DefaultUsingStatements); TurboCompiler tc = new TurboCompiler(); // loop over the providers, and generate code for each foreach (DataProvider provider in DataService.Providers) { Utility.WriteTrace(String.Format("Creating code for {0}", provider.Name)); string[] tableList = DataService.GetTableNames(provider.Name); string[] viewList = DataService.GetViewNames(provider.Name); foreach (string tbl in tableList) { TurboTemplate tt = CodeService.BuildClassTemplate(tbl, language, provider); tc.AddTemplate(tt); if (provider.GenerateODSControllers) { TurboTemplate tODS = CodeService.BuildODSTemplate(tbl, language, provider); tc.AddTemplate(tODS); } } foreach (string view in viewList) { TurboTemplate tt = CodeService.BuildViewTemplate(view, language, provider); tc.AddTemplate(tt); } tc.AddTemplate(CodeService.BuildSPTemplate(language, provider)); } if (DataService.Providers.Count > 0) { tc.AddTemplate(CodeService.BuildStructsTemplate(language, DataService.Provider)); } foreach (TurboTemplate tt in tc.Templates) { tt.AddUsingBlock = false; } tc.Run(); foreach (TurboTemplate tt in tc.Templates) { code.Append(tt.FinalCode); } assemblyBuilder.AddCodeCompileUnit(this, new CodeSnippetCompileUnit(code.ToString())); }