public void OnBlockCreated(ITextBuffer editorBuffer, LanguageProjectionBuffer projectionBuffer) { var componentModel = (IComponentModel)ServiceProvider.GetService(typeof(SComponentModel)); var workspace = editorBuffer.Properties.GetOrCreateSingletonProperty(() => new MarkdownWorkspace(MefV1HostServices.Create(componentModel.DefaultExportProvider)) ); var contentType = projectionBuffer.IProjectionBuffer.ContentType.DisplayName; var projectId = editorBuffer.Properties.GetOrCreateSingletonProperty(contentType, () => { var newProject = workspace.CurrentSolution .AddProject(contentType + " Markdown Project", "Markdown", contentTypeLanguages[contentType]) .AddMetadataReferences( DefaultReferences.Select(name => VSWorkspace.CreatePortableExecutableReference( Path.Combine(referenceAssemblyPath, name + ".dll"), MetadataReferenceProperties.Assembly )) ); workspace.TryApplyChanges(newProject.Solution); return(newProject.Id); }); workspace.CreateDocument(projectId, projectionBuffer.IProjectionBuffer); WindowHelpers.WaitFor(delegate { var textView = TextViewConnectionListener.GetFirstViewForBuffer(editorBuffer); if (textView == null) { return(false); } InstallCommandTarget(textView, projectionBuffer.IProjectionBuffer); return(true); }); }