Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Conversation

@jcansdale
Copy link
Collaborator

@jcansdale jcansdale commented Sep 21, 2017

This PR is a much simpler way to resolve the issue described in #1220 and #1217 (comment).

Rather than pre-loading GitHub.VisualStudio.dll and installing an assembly resolver, it simply marks a package with the ProvideBindingPath attribute.

This allows the assembly referenced by GitHub.VisualStudio.imagemanifest to be resolved. It also allows unsigned assemblies to be resolved (which doesn't work with ProvideCodeBase).

Notes on what the ProvideBindingPath attribute actually does.

  1. When a package has the attribute, the extension's path (or subpath) is added to a list of directories here: HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\BindingPaths
  2. This list is loaded by Microsoft.VisualStudio.Platform.VsAppDomainManager (from the Microsoft.VisualStudio.Platform.AppDomainManager assembly).
  3. The ResolveHandler method is installed as the first assembly resolver in the VS process.
  4. When ResolveHandler is called, it checks every directory in the BindingPaths list for a DLL that matches the assembly name to be resolved.
  5. It loads the assembly name of the candidate DLL and does a match against the assembly name being resolved (matching full name if available otherwise the partial name).

Although this isn't as fast as using ProvideCodeBase (which can't resolve everything for us), it has some advantages over using a custom assembly resolver.

  1. It's built in and loaded when Visual Studio starts, no need to auto-load extra assembly!
  2. This assembly resolver is installed first, so there's no chance our assemblies will be picked up by wrong resolver (see CompositionContractMismatchException when I open GitHubVS.sln directly #976).
  3. This works with unsigned assemblies (ProvideCodeBase doesn't).

It is revealing that Team Explorer uses the ProvideBindingPath attribute. This would explain why it doesn't have XAML resource loading issues!

@jcansdale
Copy link
Collaborator Author

There are a bunch of built in packages that use this attribute:

C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLEDITOR
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\DAC\130
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\3Y3BLFWB.UEW\3Y3BLFWB.UEW
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TEAMFOUNDATION\TEAM EXPLORER\3Y3BLFWB.UEW
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\WEB TOOLS\PUBLISH
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\CODESENSE\PROVIDERS\TESTSPROVIDER
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\SBPY24F4.1QD
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\CODESENSE\PROVIDERS\REFERENCESPROVIDER
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\ARCHITECTURE TOOLS\REPOSITORY
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\XAMLLANGUAGESERVICE
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\CODESENSE\FRAMEWORK
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\PROJECT
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\CODESENSE\PROVIDERS\FILEINDICATORPROVIDER
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\REFERENCEMANAGER
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\GOTO CODE
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TAILOREDPROJECTSERVICES
C:\PROGRAM FILES (X86)\COMMON FILES\MICROSOFT SHARED\SQL SERVER DEVELOPER TOOLS\130
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\ZZRUYANV.2TO
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\CODESENSE\PROVIDERS\GITPROVIDER
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\SQLDB\DESIGNERS
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\WEB TOOLS\AZURE
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\WEB TOOLS\AZURE\WINDOWSAZURE
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\ARCHITECTURE TOOLS\EXTENSIBILITYRUNTIME
C:\USERS\PASSP\APPDATA\LOCAL\MICROSOFT\VISUALSTUDIO\14.0\EXTENSIONS\1EZEA0XO.M5R
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\05M5CVUS.D3F
C:\PROGRAM FILES (X86)\COMMON FILES\MICROSOFT SHARED\SQL DEBUGGING\130
C:\USERS\PASSP\APPDATA\LOCAL\MICROSOFT\VISUALSTUDIO\14.0\EXTENSIONS\ZR1NKAEP.BUB
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\WEB TOOLS\PROJECT
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\VSGRAPHICS
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TESTWINDOW
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\CODESENSE\PROVIDERS\COLLABORATIONPROVIDER
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\WEB TOOLS\SHARED
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\WEB TOOLS\PACKAGE MANAGEMENT
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\DATADESIGN
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\INTELLITRACE\14.0.0
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\MICROSOFT\GRAPHICS\DEBUGGER
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\ROSLYN\VISUALSTUDIO INTERACTIVE COMPONENTS

Interestingly, the 1ezea0xo.m5r one is AvaloniaVS. 😉

@jcansdale jcansdale requested a review from shana September 22, 2017 10:36
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants