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);
}