예제 #1
0
 protected override void SetInnerProject(IntPtr innerIUnknown)
 {
     object objectForIUnknown = null;
     objectForIUnknown = Marshal.GetObjectForIUnknown(innerIUnknown);
     if (base.serviceProvider == null)
     {
         base.serviceProvider = _package;
     }
     base.SetInnerProject(innerIUnknown);
     _innerVsProjectFlavorCfgProvider = objectForIUnknown as IVsProjectFlavorCfgProvider;
 }
예제 #2
0
 protected override void Close()
 {
     base.Close();
     if (innerVsProjectFlavorCfgProvider != null)
     {
         if (Marshal.IsComObject(innerVsProjectFlavorCfgProvider))
         {
             Marshal.ReleaseComObject(innerVsProjectFlavorCfgProvider);
         }
         innerVsProjectFlavorCfgProvider = null;
     }
 }
예제 #3
0
        protected override void SetInnerProject(IntPtr innerIUnknown)
        {
            object inner = null;

            inner = Marshal.GetObjectForIUnknown(innerIUnknown);

            if (base.serviceProvider == null)
            {
                base.serviceProvider = this.package;
            }

            base.SetInnerProject(innerIUnknown);

            this.innerVsProjectFlavorCfgProvider = inner as IVsProjectFlavorCfgProvider;
        }
예제 #4
0
        public ProjectConfig(ProjectNode project, string configuration)
        {
            this.project    = project;
            this.configName = configuration;

            // Initialize output groups

            // Get the list of group names from the project.
            // The main reason we get it from the project is to make it easier for someone to modify
            // it by simply overriding that method and providing the correct MSBuild target(s).
            IList <KeyValuePair <string, string> > groupNames = project.GetOutputGroupNames();

            if (groupNames != null)
            {
                // Populate the output array
                foreach (KeyValuePair <string, string> group in groupNames)
                {
                    OutputGroup outputGroup = CreateOutputGroup(project, group);
                    this.outputGroups.Add(outputGroup);
                }
            }

            // Because the project can be aggregated by a flavor, we need to make sure
            // we get the outer most implementation of that interface (hence: project --> IUnknown --> Interface)
            IntPtr projectUnknown = Marshal.GetIUnknownForObject(this.ProjectMgr);

            try
            {
                IVsProjectFlavorCfgProvider flavorCfgProvider = (IVsProjectFlavorCfgProvider)Marshal.GetTypedObjectForIUnknown(projectUnknown, typeof(IVsProjectFlavorCfgProvider));
                ErrorHandler.ThrowOnFailure(flavorCfgProvider.CreateProjectFlavorCfg(this, out flavoredCfg));
                if (flavoredCfg == null)
                {
                    throw new COMException();
                }
            }
            finally
            {
                if (projectUnknown != IntPtr.Zero)
                {
                    Marshal.Release(projectUnknown);
                }
            }
            // if the flavored object support XML fragment, initialize it
            if (flavoredCfg is IPersistXMLFragment)
            {
                this.project.LoadXmlFragment((IPersistXMLFragment)flavoredCfg, this.DisplayName);
            }
        }
예제 #5
0
        protected override void SetInnerProject(IntPtr innerIUnknown)
        {
            var inner = Marshal.GetObjectForIUnknown(innerIUnknown);

            // The reason why we keep a reference to those is that doing a QI after being
            // aggregated would do the AddRef on the outer object.
            _innerVsProjectFlavorCfgProvider = inner as IVsProjectFlavorCfgProvider;
            _innerProject     = inner as IVsProject;
            _innerProject3    = inner as IVsProject3;
            _innerVsHierarchy = inner as IVsHierarchy;

            // Ensure we have a service provider as this is required for menu items to work
            if (serviceProvider == null)
            {
                serviceProvider = _serviceProvider;
            }

            // Now let the base implementation set the inner object
            base.SetInnerProject(innerIUnknown);

            // Add our commands (this must run after we called base.SetInnerProject)
            _menuService = ((System.IServiceProvider) this).GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

#if !DJANGO_HTML_EDITOR
            try
            {
                var outputWindow = OutputWindowRedirector.GetGeneral(this);
                outputWindow.WriteErrorLine("NOTE: Django template support has been disabled in the editor due to a\r\n" +
                                            "compatibility issue and will be restored in a future update.");
                outputWindow.ShowAndActivate();

                var shell = ((System.IServiceProvider) this).GetService(typeof(SVsUIShell)) as IVsUIShell;
                if (shell != null)
                {
                    var windowGuid = new Guid("{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}");
                    if (ErrorHandler.Succeeded(shell.FindToolWindow(0, ref windowGuid, out IVsWindowFrame wnd)) && wnd != null)
                    {
                        wnd.Show();
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.Fail(ex.ToUnhandledExceptionMessage(GetType()));
            }
#endif
        }
예제 #6
0
        protected override void SetInnerProject(IntPtr innerIUnknown)
        {
            object objectForIUnknown = null;

            objectForIUnknown = Marshal.GetObjectForIUnknown(innerIUnknown);
            if (base.serviceProvider == null)
            {
                base.serviceProvider = _package;
            }
            base.SetInnerProject(innerIUnknown);
            _innerVsProjectFlavorCfgProvider = objectForIUnknown as IVsProjectFlavorCfgProvider;

            _menuService = (IOleCommandTarget)((System.IServiceProvider) this).GetService(typeof(IMenuCommandService));
            if (_menuService == null)
            {
                throw new InvalidOperationException("Unable to get menu command service");
            }
        }
예제 #7
0
        public ProjectConfig(ProjectNode project, string configuration)
        {
            this.project = project;

            // !EFW - Bug in VS2015 or an incompatibility with the older MPF project system.  This can get
            // passed an invalid configuration value such as "Debug|Any CPU".  As a workaround, trim off the
            // invalid part.
            if (!String.IsNullOrWhiteSpace(configuration) && configuration.IndexOf('|') != -1)
            {
                this.configName = configuration.Substring(0, configuration.IndexOf('|'));
            }
            else
            {
                this.configName = configuration;
            }

            // Because the project can be aggregated by a flavor, we need to make sure
            // we get the outer most implementation of that interface (hence: project --> IUnknown --> Interface)
            IntPtr projectUnknown = Marshal.GetIUnknownForObject(this.ProjectMgr);

            try
            {
                IVsProjectFlavorCfgProvider flavorCfgProvider = (IVsProjectFlavorCfgProvider)Marshal.GetTypedObjectForIUnknown(projectUnknown, typeof(IVsProjectFlavorCfgProvider));
                ErrorHandler.ThrowOnFailure(flavorCfgProvider.CreateProjectFlavorCfg(this, out flavoredCfg));
                if (flavoredCfg == null)
                {
                    throw new COMException();
                }
            }
            finally
            {
                if (projectUnknown != IntPtr.Zero)
                {
                    Marshal.Release(projectUnknown);
                }
            }
            // if the flavored object support XML fragment, initialize it
            IPersistXMLFragment persistXML = flavoredCfg as IPersistXMLFragment;

            if (null != persistXML)
            {
                this.project.LoadXmlFragment(persistXML, this.DisplayName);
            }
        }
        public ProjectConfig(ProjectNode project, string canonicalName)
        {
            this.project = project;
            string configName;
            string platformName;

            TrySplitConfigurationCanonicalName(canonicalName, out configName, out platformName);

            ConfigurationName = configName;
            PlatformName      = platformName;

            // Because the project can be aggregated by a flavor, we need to make sure
            // we get the outer most implementation of that interface (hence: project --> IUnknown --> Interface)
            IntPtr projectUnknown = Marshal.GetIUnknownForObject(this.ProjectMgr);

            try
            {
                IVsProjectFlavorCfgProvider flavorCfgProvider = (IVsProjectFlavorCfgProvider)Marshal.GetTypedObjectForIUnknown(projectUnknown, typeof(IVsProjectFlavorCfgProvider));
                ErrorHandler.ThrowOnFailure(flavorCfgProvider.CreateProjectFlavorCfg(this, out flavoredCfg));
                if (flavoredCfg == null)
                {
                    throw new COMException();
                }
            }
            finally
            {
                if (projectUnknown != IntPtr.Zero)
                {
                    Marshal.Release(projectUnknown);
                }
            }
            // if the flavored object support XML fragment, initialize it
            IPersistXMLFragment persistXML = flavoredCfg as IPersistXMLFragment;

            if (null != persistXML)
            {
                this.project.LoadXmlFragment(persistXML, ConfigKey);
            }
        }
예제 #9
0
        protected override void SetInnerProject(IntPtr innerIUnknown)
        {
            var inner = Marshal.GetObjectForIUnknown(innerIUnknown);

            // The reason why we keep a reference to those is that doing a QI after being
            // aggregated would do the AddRef on the outer object.
            _innerVsProjectFlavorCfgProvider = inner as IVsProjectFlavorCfgProvider;
            _innerProject     = inner as IVsProject;
            _innerProject3    = inner as IVsProject3;
            _innerVsHierarchy = inner as IVsHierarchy;

            // Ensure we have a service provider as this is required for menu items to work
            if (serviceProvider == null)
            {
                serviceProvider = _serviceProvider;
            }

            // Now let the base implementation set the inner object
            base.SetInnerProject(innerIUnknown);

            // Add our commands (this must run after we called base.SetInnerProject)
            _menuService = ((System.IServiceProvider) this).GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
        }
예제 #10
0
        protected override void SetInnerProject(IntPtr innerIUnknown) {
            var inner = Marshal.GetObjectForIUnknown(innerIUnknown);

            // The reason why we keep a reference to those is that doing a QI after being
            // aggregated would do the AddRef on the outer object.
            _innerVsProjectFlavorCfgProvider = inner as IVsProjectFlavorCfgProvider;
            _innerProject = inner as IVsProject;
            _innerProject3 = inner as IVsProject3;
            _innerVsHierarchy = inner as IVsHierarchy;

            if (serviceProvider == null) {
                serviceProvider = _site;
            }

            // Now let the base implementation set the inner object
            base.SetInnerProject(innerIUnknown);

            // Get access to the menu service used by FlavoredProjectBase. We
            // need to forward IOleCommandTarget functions to this object, since
            // we override the FlavoredProjectBase implementation with no way to
            // call it directory.
            // (This must run after we called base.SetInnerProject)
            _menuService = (IOleCommandTarget)((IServiceProvider)this).GetService(typeof(IMenuCommandService));
            if (_menuService == null) {
                throw new InvalidOperationException("Cannot initialize Web project");
            }
        }
        protected override void SetInnerProject(IntPtr innerIUnknown) {
            var inner = Marshal.GetObjectForIUnknown(innerIUnknown);

            // The reason why we keep a reference to those is that doing a QI after being
            // aggregated would do the AddRef on the outer object.
            _innerProject = inner as IVsProject;
            _innerProject3 = inner as IVsProject3;
            _innerVsHierarchy = inner as IVsHierarchy;
            _innerVsProjectFlavorCfgProvider = inner as IVsProjectFlavorCfgProvider;

            // Ensure we have a service provider as this is required for menu items to work
            if (this.serviceProvider == null)
                this.serviceProvider = (System.IServiceProvider)this._package;

            // Now let the base implementation set the inner object
            base.SetInnerProject(innerIUnknown);

            // Add our commands (this must run after we called base.SetInnerProject)            
            _menuService = ((System.IServiceProvider)this).GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

        }
예제 #12
0
        protected override void SetInnerProject(IntPtr innerIUnknown)
        {
            object objectForIUnknown = null;
            objectForIUnknown = Marshal.GetObjectForIUnknown(innerIUnknown);
            if (base.serviceProvider == null)
            {
                base.serviceProvider = _package;
            }
            base.SetInnerProject(innerIUnknown);
            _innerVsProjectFlavorCfgProvider = objectForIUnknown as IVsProjectFlavorCfgProvider;

            _menuService = (IOleCommandTarget)((System.IServiceProvider)this).GetService(typeof(IMenuCommandService));
            if (_menuService == null)
            {
                throw new InvalidOperationException("Unable to get menu command service");
            }
        }