Skip to content

Instantly share code, notes, and snippets.

@kzu
Created July 8, 2016 15:58
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kzu/9ab7835bb45ac0afc1ef394285c5746a to your computer and use it in GitHub Desktop.
Save kzu/9ab7835bb45ac0afc1ef394285c5746a to your computer and use it in GitHub Desktop.
VSMEF Components
var xmlns = new XmlNamespaceManager(new NameTable());
xmlns.AddNamespace("vsx10", "http://schemas.microsoft.com/developer/vsx-schema/2010");
xmlns.AddNamespace("vsx11", "http://schemas.microsoft.com/developer/vsx-schema/2011");
var vsix = from file in Directory.EnumerateFiles(@"C:\Program Files (x86)\Microsoft Visual Studio 14.0", "extension.vsixmanifest", SearchOption.AllDirectories)
where File.ReadAllLines(file)[0].StartsWith("<")
select file;
var mef = vsix
.Select(x => XDocument.Load(x))
.SelectMany(x => x.XPathSelectElements("vsx11:PackageManifest/vsx11:Assets/vsx11:Asset[@Type='Microsoft.VisualStudio.MefComponent']", xmlns))
.Select(x => Path.GetFileName(x.Attribute("Path").Value));
mef = mef.Concat(vsix
.Select(x => XDocument.Load(x))
.SelectMany(x => x.XPathSelectElements("vsx10:Vsix/vsx10:Content/vsx10:MefComponent", xmlns))
.Select(x => Path.GetFileName(x.Value)))
.Distinct()
.OrderBy(x => x);
mef.Dump();
ExtensibilityTools.dll
GitHub.Api.dll
GitHub.App.dll
GitHub.Exports.dll
GitHub.Exports.Reactive.dll
GitHub.TeamFoundation.14.dll
GitHub.TeamFoundation.15.dll
GitHub.VisualStudio.dll
Microsoft.AspNet.Scaffolding.12.0.dll
Microsoft.AspNet.Scaffolding.EntityFramework.12.0.dll
Microsoft.AspNet.Scaffolding.Mvc.5.0.dll
Microsoft.AspNet.Scaffolding.Mvc6.dll
Microsoft.AspNet.Scaffolding.VSExtension.14.0.dll
Microsoft.CodeAnalysis.CSharp.EditorFeatures.dll
Microsoft.CodeAnalysis.CSharp.Features.dll
Microsoft.CodeAnalysis.CSharp.InteractiveEditorFeatures.dll
Microsoft.CodeAnalysis.CSharp.Workspaces.dll
Microsoft.CodeAnalysis.EditorFeatures.dll
Microsoft.CodeAnalysis.EditorFeatures.Text.dll
Microsoft.CodeAnalysis.Features.dll
Microsoft.CodeAnalysis.InteractiveEditorFeatures.dll
Microsoft.CodeAnalysis.TypeScript.EditorFeatures.dll
Microsoft.CodeAnalysis.VisualBasic.EditorFeatures.dll
Microsoft.CodeAnalysis.VisualBasic.Features.dll
Microsoft.CodeAnalysis.VisualBasic.InteractiveEditorFeatures.dll
Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll
Microsoft.CodeAnalysis.Workspaces.Desktop.dll
Microsoft.CodeAnalysis.Workspaces.dll
Microsoft.CodeSense.DiffProcessing.dll
Microsoft.CodeSense.Git.Collaboration.Processing.dll
Microsoft.CodeSense.Local.Core.dll
Microsoft.CSS.Editor.dll
Microsoft.DiagnosticsHub.CpuSampling.dll
Microsoft.DiagnosticsHub.Runtime.dll
Microsoft.DiagnosticsHub.VisualStudio.Package.dll
Microsoft.Html.Editor.dll
Microsoft.JavaScript.Services.Implementation.dll
Microsoft.JSON.Editor.dll
Microsoft.TeamFoundation.Build.Controls.dll
Microsoft.TeamFoundation.CodeReview.Components.dll
Microsoft.TeamFoundation.CodeReview.Controls.dll
Microsoft.TeamFoundation.CodeSense.Client.Changes.dll
Microsoft.TeamFoundation.CodeSense.Client.Core.dll
Microsoft.TeamFoundation.Controls.dll
Microsoft.TeamFoundation.Git.Controls.dll
Microsoft.TeamFoundation.Git.Provider.dll
Microsoft.TeamFoundation.TeamExplorer.Navigation.dll
Microsoft.TeamFoundation.VersionControl.Controls.dll
Microsoft.TeamFoundation.WorkItemTracking.Controls.dll
Microsoft.VisualC.Editor.Implementation.dll
Microsoft.VisualC.QuickSearch.Implementation.dll
Microsoft.VisualStudio.Activities.CSharp.dll
Microsoft.VisualStudio.Alm.Shared.CodeAnalysisClient.dll
Microsoft.VisualStudio.Android.Project.dll
Microsoft.VisualStudio.ApplicationInsights.dll
Microsoft.VisualStudio.AppResponsiveness.dll
Microsoft.VisualStudio.Authentication.ConnectedServices.dll
Microsoft.VisualStudio.Azure.ResourceManagement.dll
Microsoft.VisualStudio.ClientDiagnostics.dll
Microsoft.VisualStudio.CodeAnalysis.VCPlugin.dll
Microsoft.VisualStudio.CodeSense.Client.Common.dll
Microsoft.VisualStudio.CodeSense.CollaborationProvider.dll
Microsoft.VisualStudio.CodeSense.FileIndicator.Provider.dll
Microsoft.VisualStudio.CodeSense.Git.Collaboration.Service.dll
Microsoft.VisualStudio.CodeSense.Git.CollaborationProvider.dll
Microsoft.VisualStudio.CodeSense.ReferencesProvider.dll
Microsoft.VisualStudio.CodeSense.Roslyn.dll
Microsoft.VisualStudio.CodeSense.TestsProvider.dll
Microsoft.VisualStudio.ConnectedServices.Azure.Storage.dll
Microsoft.VisualStudio.ConnectedServices.Package.dll
Microsoft.VisualStudio.ConnectedServices.Package2.dll
Microsoft.VisualStudio.ContextManagement.Package.dll
Microsoft.VisualStudio.CoreUtility.dll
Microsoft.VisualStudio.CSharp.Repl.dll
Microsoft.VisualStudio.Data.Tools.Delta.dll
Microsoft.VisualStudio.Data.Tools.Delta.UI.dll
Microsoft.VisualStudio.Data.Tools.SQLPDWExtensions.dll
Microsoft.VisualStudio.DataDesign.DataObjectGenerators.dll
Microsoft.VisualStudio.DataDesign.DataSourceProviders.dll
Microsoft.VisualStudio.DataDesign.WpfComponents.dll
Microsoft.VisualStudio.Debugger.Parallel.Extension.dll
Microsoft.VisualStudio.DesignTools.XamlDesignerHost.dll
Microsoft.VisualStudio.DesignTools.XamlLanguageService.dll
Microsoft.VisualStudio.Diagnostics.HubExtensions.dll
Microsoft.VisualStudio.Diff.dll
Microsoft.VisualStudio.Editor.dll
Microsoft.VisualStudio.Editor.Implementation.dll
Microsoft.VisualStudio.ErrorListPkg.dll
Microsoft.VisualStudio.GotoCode.dll
Microsoft.VisualStudio.GotoCode.Git.dll
Microsoft.VisualStudio.GotoCode.TeamFoundation.dll
Microsoft.VisualStudio.Html.Package.dll
Microsoft.VisualStudio.InteractiveWindow.dll
Microsoft.VisualStudio.iOS.Project.dll
Microsoft.VisualStudio.JavaScript.Project.dll
Microsoft.VisualStudio.JavaScript.Web.Extensions.dll
Microsoft.VisualStudio.JSLS.dll
Microsoft.VisualStudio.JSON.Package.dll
Microsoft.VisualStudio.Language.CallHierarchy.Implementation.dll
Microsoft.VisualStudio.Language.GenerateType.Implementation.dll
Microsoft.VisualStudio.Language.Intellisense.dll
Microsoft.VisualStudio.Language.NavigateTo.Implementation.dll
Microsoft.VisualStudio.Language.QuickSearch.FileNameProvider.dll
Microsoft.VisualStudio.Language.StandardClassification.dll
Microsoft.VisualStudio.LanguageServices.CSharp.dll
Microsoft.VisualStudio.LanguageServices.dll
Microsoft.VisualStudio.LanguageServices.Implementation.dll
Microsoft.VisualStudio.LanguageServices.SolutionExplorer.dll
Microsoft.VisualStudio.LanguageServices.Telemetry.dll
Microsoft.VisualStudio.LanguageServices.TypeScript.dll
Microsoft.VisualStudio.LanguageServices.VisualBasic.dll
Microsoft.VisualStudio.Modeling.Components.14.0.dll
Microsoft.VisualStudio.MSTest.TestWindow.dll
Microsoft.VisualStudio.Office365.dll
Microsoft.VisualStudio.PackageManifestEditor.dll
Microsoft.VisualStudio.PerformanceTools.EditorIntegration.dll
Microsoft.VisualStudio.Platform.VSEditor.dll
Microsoft.VisualStudio.PowerProfiler.dll
Microsoft.VisualStudio.PowerShellTools.Package.dll
Microsoft.VisualStudio.Progression.GraphControl.dll
Microsoft.VisualStudio.Progression.Native.CodeProvider.dll
Microsoft.VisualStudio.Progression.VSProvider.dll
Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.dll
Microsoft.VisualStudio.ProjectSystem.Implementation.dll
Microsoft.VisualStudio.ProjectSystem.VS.Implementation.dll
Microsoft.VisualStudio.ReferenceManager.Dialog.dll
Microsoft.VisualStudio.ReferenceManager.Providers.dll
Microsoft.VisualStudio.Shell.TreeNavigation.GraphProvider.dll
Microsoft.VisualStudio.Shell.TreeNavigation.HierarchyProvider.dll
Microsoft.VisualStudio.SmartDevice.NativeProjectSystem.Appx.dll
Microsoft.VisualStudio.SmartDevice.NativeProjectSystem.dll
Microsoft.VisualStudio.SmartDevice.ProjectSystem.Base.dll
Microsoft.VisualStudio.TailoredProjectServices.Debugger.dll
Microsoft.VisualStudio.TaskRunnerExplorer.dll
Microsoft.VisualStudio.TaskRunnerExplorer.Extensions.dll
Microsoft.VisualStudio.TeamFoundation.Build.dll
Microsoft.VisualStudio.TeamFoundation.dll
Microsoft.VisualStudio.TeamFoundation.SharePointReporting.dll
Microsoft.VisualStudio.TeamFoundation.VersionControl.dll
Microsoft.VisualStudio.TeamFoundation.WorkItemTracking.dll
Microsoft.VisualStudio.TemplateProviders.Implementation.dll
Microsoft.VisualStudio.TestPlatform.Client.dll
Microsoft.VisualStudio.TestPlatform.Common.dll
Microsoft.VisualStudio.TestPlatform.Core.dll
Microsoft.VisualStudio.TestPlatform.ObjectModel.dll
Microsoft.VisualStudio.TestPlatform.Utilities.dll
Microsoft.VisualStudio.TestWindow.Core.dll
Microsoft.VisualStudio.TestWindow.CppUnitTestExtension.dll
Microsoft.VisualStudio.TestWindow.dll
Microsoft.VisualStudio.TestWindow.VSTest.dll
Microsoft.VisualStudio.Text.Data.dll
Microsoft.VisualStudio.Text.Logic.dll
Microsoft.VisualStudio.Text.UI.dll
Microsoft.VisualStudio.Text.UI.Wpf.dll
Microsoft.VisualStudio.VisualBasic.Repl.dll
Microsoft.VisualStudio.VsInteractiveWindow.dll
Microsoft.VisualStudio.Web.Azure.Publish.dll
Microsoft.VisualStudio.Web.Editors.Razor.4_0.dll
Microsoft.VisualStudio.Web.Exports.dll
Microsoft.VisualStudio.Web.Extensions.Common.dll
Microsoft.VisualStudio.Web.Extensions.dll
Microsoft.VisualStudio.Web.HTML.Implementation.dll
Microsoft.VisualStudio.Web.HTML.Razor.Implementation.Shims.2_0.dll
Microsoft.VisualStudio.Web.HTML.Razor.Implementation.Shims.3_0.dll
Microsoft.VisualStudio.Web.PackageManagement.dll
Microsoft.VisualStudio.Web.PageInspector.Package.dll
Microsoft.VisualStudio.Web.PasteJson.dll
Microsoft.VisualStudio.Web.ProjectSystem.dll
Microsoft.VisualStudio.Web.Publish.dll
Microsoft.VisualStudio.WebClient.Diagnostics.HtmlToolHost.dll
Microsoft.VisualStudio.WebClient.Diagnostics.Phone.dll
Microsoft.VisualStudio.WindowsAzure.CommonAzureTools.Package.dll
Microsoft.VisualStudio.WindowsAzure.Services.Extensions.dll
Microsoft.VisualStudio.WindowsAzure.Services.Extensions.MobileServicesHandlers.dll
Microsoft.VisualStudio.WindowsAzure.Services.WebExtensions.dll
Microsoft.VSDesigner.ExceptionAssistant.SmartTag.dll
Microsoft.Web.Editor.dll
NuGet.Configuration.dll
NuGet.Console.dll
Nuget.PackageIndex.VisualStudio.dll
NuGet.PackageManagement.dll
NuGet.PackageManagement.UI.dll
NuGet.PackageManagement.VisualStudio.dll
NuGet.ProjectManagement.dll
NuGet.Protocol.VisualStudio.dll
NuGet.Tools.dll
NuGet.VisualStudio.Implementation.dll
NuGetConsole.Host.PowerShellProvider.dll
PreEmptive.Analytics.Aggregator.VSPackage.14.0.dll
PreEmptive.Analytics.Aggregator.VSPackage.TeamFoundation.14.0.dll
Rothko.dll
StanCore.dll
TMLanguage.dll
VsDebugPresentationPackage.dll
VsGraphicsDebuggerPkg.dll
VsGraphicsStandalonePkg.dll
@kzu
Copy link
Author

kzu commented Jul 8, 2016

I used to wonder what was the point of VSMEF not being just "plain MEF", you know, the one that ships with .NET? Well, of course MEF relies mostly on reflection (for the attribute-based model, as well as the conventions one), meaning all assemblies and types will be loaded at container-init time. But how bad can it be, right?

So I got curious, run a LINQPAD query (shown above) and got a whooping 196 assemblies exposed as MEF components via VSIX extensions built-in VS2015. So, bottom-line:

I think Visual Studio is likely the biggest and most heavily extended MEF application in the world. And it's a pity it had to rewrite/extend big chunks of MEF in order to achieve good performance that no other MEF-based app can benefit.

@KirillOsenkov
Copy link

It can do even better if it doesn't use reflection. I have an unfinished prototype here: https://github.com/KirillOsenkov/MEFMetadata that shows 2x-3x speedup.

See also a good explanation by @SLaks here: http://blog.slaks.net/2014-11-16/mef2-roslyn-visual-studio-compatibility/

@AArnott
Copy link

AArnott commented Jul 8, 2016

@kzu: we switched away from .NET MEF for two big reasons: performance and interop with "nuget MEF / MEFv2".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment