示例#1
0
        /// <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()));
        }