/// <summary>
        /// Loads the library with specific properties
        /// </summary>
        /// <param name="prop"></param>
        /// <returns></returns>
        public ILibrary load(InitializerProperties prop)
        {
            log.debug("Loading: '{0}' /'{1}'", prop.SolutionFile, prop.LibraryPath);

            ILoader loader = new Loader(
                                    new Provider.Settings()
                                    {
                                        DebugMode = log.IsDiagnostic,
                                        LibSettings = new LibSettings()
                                        {
                                            DebugMode = log.IsDiagnostic,
                                        },
                                    }
                                );

            try
            {
                ILibrary library = loader.load(prop.SolutionFile, prop.Properties, prop.LibraryPath);
                log.info("Library: loaded from '{0}' :: v{1} [{2}] API: v{3} /'{4}':{5}",
                                    library.Dllpath,
                                    library.Version.Number.ToString(),
                                    library.Version.BranchSha1,
                                    library.Version.Bridge.Number.ToString(2),
                                    library.Version.BranchName,
                                    library.Version.BranchRevCount);

                return library;
            }
            catch(DllNotFoundException ex)
            {
                log.info(ex.Message);
                log.info(new String('.', 80));
                log.info("How about:");

                log.info("");
                log.info("* Define path to library, for example: /l:CI.MSBuild.dll;lib=<path_to_vsSolutionBuildEvent.dll>");
                log.info("* Or install the vsSolutionBuildEvent as plugin for Visual Studio.");
                log.info("* Or manually place the 'vsSolutionBuildEvent.dll' with dependencies into: '{0}\\'", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
                log.info("");

                log.info("See documentation for more details:");
                log.info("- http://vssbe.r-eg.net");
                log.info("- http://visualstudiogallery.msdn.microsoft.com/0d1dbfd7-ed8a-40af-ae39-281bfeca2334/");
                log.info("");

                log.info("Minimum requirements: vsSolutionBuildEvent.dll v{0}", loader.MinVersion.ToString());
                log.info(new String('.', 80));
            }
            catch(ReflectionTypeLoadException ex)
            {
                log.info(ex.ToString());
                log.info(new String('.', 80));

                foreach(FileNotFoundException le in ex.LoaderExceptions) {
                    log.info("{2} {0}{3} {0}{0}{4} {0}{1}",
                                        Environment.NewLine,
                                        new String('~', 80),
                                        le.FileName,
                                        le.Message,
                                        le.FusionLog);
                }
            }
            catch(Exception ex) {
                log.info("Error with loading: '{0}'", ex.ToString());
            }

            throw new LoggerException("Fatal error");
        }
        /// <summary>Receives notification that the Add-in is being loaded.</summary>
        /// <param term='application'>Root object of the host application.</param>
        /// <param term='connectMode'>Describes how the Add-in is being loaded.</param>
        /// <param term='addInInst'>Object representing this Add-in.</param>
        /// <seealso class='IDTExtensibility2' />
        public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
        {
            if(connectMode != ext_ConnectMode.ext_cm_CommandLine) {
                log.info("[Ignored] Allowed only Command-line mode /'{0}'", connectMode);
                return;
            }

            dte2    = (DTE2)application;
            addIn   = (AddIn)addInInst;

            ILoader loader = new Loader(
                                    new Provider.Settings()
                                    {
                                        DebugMode = log.IsDiagnostic,
                                        LibSettings = new LibSettings()
                                        {
                                            DebugMode = log.IsDiagnostic,
                                        },
                                    }
                                );

            init(loader, dte2, addIn);
        }