public void Generate() { if (CatchWinRTDiagnostics()) { Logger.Log("Exiting early -- found errors in authored runtime component."); Logger.Close(); return; } try { context.AddSource("System.Runtime.InteropServices.WindowsRuntime", SourceText.From(ArrayAttributes, Encoding.UTF8)); string assembly = context.GetAssemblyName(); string version = context.GetAssemblyVersion(); MetadataBuilder metadataBuilder = new MetadataBuilder(); var writer = new WinRTTypeWriter( assembly, version, metadataBuilder, Logger); WinRTSyntaxReciever syntaxReciever = (WinRTSyntaxReciever)context.SyntaxReceiver; Logger.Log("Found " + syntaxReciever.Declarations.Count + " types"); foreach (var declaration in syntaxReciever.Declarations) { writer.Model = context.Compilation.GetSemanticModel(declaration.SyntaxTree); writer.Visit(declaration); } writer.FinalizeGeneration(); GenerateWinMD(metadataBuilder); GenerateSources(); } catch (Exception e) { Logger.Log(e.ToString()); if (e.InnerException != null) { Logger.Log(e.InnerException.ToString()); } Logger.Close(); throw; } Logger.Log("Done"); Logger.Close(); }