public override List GetSchemaAndBuildAssembly()

in Source/Tx.LinqPad/TxDataContextDriver.cs [175:237]


        public override List<ExplorerItem> GetSchemaAndBuildAssembly(IConnectionInfo cxInfo,
                                                                     AssemblyName assemblyToBuild, ref string nameSpace,
                                                                     ref string typeName)
        {
            nameSpace = "System.Reactive.Tx";
            typeName = "StreamScopeWrapper";

            var allGeneratedSources = new List<string>();
            var sbContextUsings = new StringBuilder();
            var sbContextProperties = new StringBuilder();

            var properties = new TxProperties(cxInfo);
            _typeCache.Init(properties.ContextName);

            if (properties.IsUsingDirectoryLookup)
            {
                _typeCache.BuildCache(properties.ContextName, properties.Files, properties.MetadataDirectory);
            }
            else
            {
                _typeCache.BuildCache(
                    properties.ContextName,
                    ReplaceSampleTracesDir(properties.Files),
                    ReplaceSampleTracesDir(properties.MetadataFiles));
            }

            string dataContext = DataContextTemplate
                .Replace("[usings]", sbContextUsings.ToString())
                .Replace("[properties]", sbContextProperties.ToString());
            allGeneratedSources.Add(dataContext);

            CompilerResults results;
            string outputName = assemblyToBuild.CodeBase;
            using (
                var codeProvider = new CSharpCodeProvider(new Dictionary<string, string> {{"CompilerVersion", "v4.0"}}))
            {
                string[] assemblies = GetAssembliesToAdd(cxInfo).ToArray();

                var compilerOptions = new CompilerParameters(assemblies, outputName, true);

                results = codeProvider.CompileAssemblyFromSource(compilerOptions, allGeneratedSources.ToArray());

                if (results.Errors.Count > 0)
                {
                    var sbErr = new StringBuilder();
                    foreach (object o in results.Errors)
                    {
                        sbErr.AppendLine(o.ToString());
                    }
                    // Is there any better troubleshooting mechanism? 
                    MessageBox.Show(sbErr.ToString(), "Error compiling generated code");
                }
            }

            Dictionary<Type, long> stat = _parserRegistry.GetTypeStatistics(
                _typeCache.GetAvailableTypes(
                    properties.ContextName,
                    ReplaceSampleTracesDir(properties.Files),
                    ReplaceSampleTracesDir(properties.MetadataFiles)),
                ReplaceSampleTracesDir(properties.Files));

            return CreateTree(stat);
        }