VSPackages written in managed code behave differently than native VSPackages because of the loading characteristics of the common language runtime (CLR). When a managed library is loaded by the CLR, the CLR ensures that all types referenced by the DLL are also loaded in the process. For instance, if IGlobalService is referenced by your managed VSPackage, but that type is not loaded or is not available in any one of your referenced assemblies, then the CLR may not load your VSPackage. If the process that is loading a type is running under a debugger, then a TypeLoadException may be seen. Also, you can run the Fusion Log Viewer (fuslogvw.exe) to view the CLR log that is associated with the loading failure. Fusion Log Viewer is included with the .NET Framework.
You cannot use the same kind of coding in your managed VSPackage as you might have used in your native VSPackage because the loader will not even load such code if the types cannot be loaded in the process. VSPackages that reference types from one version of Visual Studio (for example, Visual Studio 2005) that are not available in another version of Visual Studio (for example, Visual Studio 2008) may not load. The only way to avoid this situation is to ensure that all types in all referenced assemblies are available in the Visual Studio version that is targeted by the VSPackage.
If the required types and assemblies are not included in Visual Studio, then you must redistribute them. You should ensure that such assemblies are redistributable according to the license agreement for Visual Studio, Visual Studio SDK, or other source. Just reshipping raw binaries is typically not allowed under license agreements. Such binaries should be explicitly listed in the license, or in a file list on the disk. The binaries should be installed by using a correct .msi file or a self-extracting executable that contains a correct .msi file so that the original author of the binary can update it.