/// <summary>
        /// Initializer of the Build.Framework.ILogger objects.
        /// Subscribes to specific events etc.
        /// </summary>
        /// <param name="evt"></param>
        public override void Initialize(IEventSource evt)
        {
            log         = new Log(Verbosity);
            initializer = new Initializer(Parameters, log);

            // load with properties by default
            library = initializer.load();
            setPropertiesByDefault();

            attachCoreCommandListener(library);
            library.Event.solutionOpened(pUnkReserved, 0);

            // bring song
            evt.TargetStarted  += onTargetStarted;
            evt.ProjectStarted += onProjectStarted;
            evt.AnyEventRaised += onAnyEventRaised;
            evt.ErrorRaised    += onErrorRaised;
            evt.WarningRaised  += onWarningRaised;
            evt.BuildStarted   += onBuildStarted;
            evt.BuildFinished  += onBuildFinished;
        }
        /// <summary>
        /// Note with msbuild: 
        /// Be careful - the onBuildStarted(i.e. all before onTargetStarted) is not safe for any unhandled exceptions!
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void onBuildStarted(object sender, BuildStartedEventArgs e)
        {
            try {
                // load with properties by default
                library = initializer.load();

                attachCoreCommandListener();
                library.Event.solutionOpened(pUnkReserved, 0);

                // yes, we're ready
                onPre(initializer.Properties.Targets);
            }
            catch(Exception ex) {
                debug("Error onBuildStarted: '{0}'", ex.Message);
                abort = true;
            }
        }
        /// <summary>
        /// Initialize library
        /// </summary>
        /// <param name="loader"></param>
        /// <param name="dte2"></param>
        /// <param name="addIn"></param>
        private void init(ILoader loader, DTE2 dte2, AddIn addIn)
        {
            try
            {
                library = loader.load(dte2, addIn.SatelliteDllPath, dte2.RegistryRoot);
                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);


                coreCommand = new CoreCommand(library);
                coreCommand.attachCoreCommandListener();

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

                log.info("");
                log.info("* Install vsSolutionBuildEvent as plugin for your Visual Studio v{0}", dte2.Version);
                log.info("* Or manually place the 'vsSolutionBuildEvent.dll' with dependencies into AddIn folder: '{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 advising '{0}'", ex.ToString());
            }

            termination(true);
        }
        /// <summary>
        /// Initialize library
        /// </summary>
        /// <param name="loader"></param>
        /// <param name="dte2"></param>
        /// <param name="addIn"></param>
        private void init(ILoader loader, DTE2 dte2, AddIn addIn)
        {
            try
            {
                library = loader.load(dte2, addIn.SatelliteDllPath, dte2.RegistryRoot);
                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);

                coreCommand = new CoreCommand(library);
                coreCommand.attachCoreCommandListener();

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

                log.info("");
                log.info("* Install vsSolutionBuildEvent as plugin for your Visual Studio v{0}", dte2.Version);
                log.info("* Or manually place the 'vsSolutionBuildEvent.dll' with dependencies into AddIn folder: '{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 advising '{0}'", ex.ToString());
            }

            termination(true);
        }