Reduce duplication while accessing Visual Studio services
Your current design will potentially make unit testing code which uses it hard. Consider making the VisualStudioServices class non-static and create an interface for it. You could then inject the ServiceProvider as a dependency rather having an implicit dependency on the static GlobalProvider. Something like this:

interface IVisualStudioServices
{
    IVsUIShell UIShell { get; }
}

class VisualStudioServices : IVisualStudioServices
{
    public IVsUIShell UIShell { get { return _VsUiShell.Service; } }

    private readonly LazyService&lt;SVsUIShell, IVsUIShell&gt; _VsUiShell; 

    public VisualStudioServices(ServiceProvider serviceProvider)
    {
        _VsUiShell = new LazyService&lt;SVsUIShell, IVsUIShell&gt;(serviceProvider);
    }

    class LazyService&lt;TService, T&gt;
    {
        ServiceProvider _ServiceProvider;
        LazyService(ServiceProvider serviceProvider)
        {
            _ServiceProvider = serviceProvider;
        }

        readonly Lazy&lt;T&gt; serviceLazy = new Lazy&lt;T&gt;(() =&gt; (T)_ServiceProvider.GetService(typeof(TService)));

        public T Service { get { return serviceLazy.Value; } }
    }
}


Any code requiring access to it should have a dependency on IVisualStudioServices which can be easily mocked out.