protected override void Initialize()
        {
            base.Initialize();
            _updateLock = new object();
            IVsExtensibility extensibility = GetService <IVsExtensibility>();

            _DTE2    = (DTE2)extensibility.GetGlobalsObject(null).DTE;
            _Version = GetVersion(_DTE2.Version);

            _Solution = GetService <SVsSolution>() as IVsSolution;
            IVsCfgProvider2 test = _Solution as IVsCfgProvider2;

            _SolutionEvents = new SolutionEvents();
            int  hr;
            uint pdwCookie;

            hr = _Solution.AdviseSolutionEvents(_SolutionEvents, out pdwCookie);
            Marshal.ThrowExceptionForHR(hr);

            _UpdateSolutionEvents = new UpdateSolutionEvents();
            var vsSolutionBuildManager = GetService <SVsSolutionBuildManager>();

            hr = (vsSolutionBuildManager as IVsSolutionBuildManager3).AdviseUpdateSolutionEvents3(_UpdateSolutionEvents, out pdwCookie);
            Marshal.ThrowExceptionForHR(hr);
            hr = (vsSolutionBuildManager as IVsSolutionBuildManager2).AdviseUpdateSolutionEvents(_UpdateSolutionEvents, out pdwCookie);
            Marshal.ThrowExceptionForHR(hr);

            if (VersionGreaterEqualTo(DTEVersion.VS15))
            {
                LoadMef();
            }
        }
示例#2
0
        /// <summary>
        /// Converts an IVsHierarchy object to a config provider interface
        /// </summary>
        /// <param name="HierarchyObject">IVsHierarchy object</param>
        /// <returns>Visual Studio project object</returns>
        public static IVsCfgProvider2 HierarchyObjectToCfgProvider(IVsHierarchy HierarchyObject)
        {
            // Get the actual Project object from the IVsHierarchy object that was supplied
            object BrowseObject;

            HierarchyObject.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_BrowseObject, out BrowseObject);

            IVsCfgProvider2 CfgProvider = null;

            if (BrowseObject != null)
            {
                CfgProvider = GetCfgProviderFromObject(BrowseObject);
            }

            if (CfgProvider == null)
            {
                CfgProvider = GetCfgProviderFromObject(HierarchyObject);
            }

            return(CfgProvider);
        }
示例#3
0
        private static IVsCfgProvider2 GetCfgProviderFromObject(object SomeObject)
        {
            IVsCfgProvider2 CfgProvider2 = null;

            var GetCfgProvider = SomeObject as IVsGetCfgProvider;

            if (GetCfgProvider != null)
            {
                IVsCfgProvider CfgProvider;
                GetCfgProvider.GetCfgProvider(out CfgProvider);
                if (CfgProvider != null)
                {
                    CfgProvider2 = CfgProvider as IVsCfgProvider2;
                }
            }

            if (CfgProvider2 == null)
            {
                CfgProvider2 = SomeObject as IVsCfgProvider2;
            }

            return(CfgProvider2);
        }
示例#4
0
        public static void ExecuteProjectBuild(Project Project,
                                               string SolutionConfig,
                                               string SolutionPlatform,
                                               BatchBuilderToolControl.BuildJob.BuildJobType BuildType,
                                               Action ExecutingDelegate,
                                               Action FailedToStartDelegate)
        {
            IVsHierarchy ProjHierarchy = Utils.ProjectToHierarchyObject(Project);

            if (ProjHierarchy != null)
            {
                SolutionConfigurations SolutionConfigs =
                    UnrealVSPackage.Instance.DTE.Solution.SolutionBuild.SolutionConfigurations;

                var MatchedSolutionConfig =
                    (from SolutionConfiguration2 Sc in SolutionConfigs select Sc).FirstOrDefault(
                        Sc =>
                        String.CompareOrdinal(Sc.Name, SolutionConfig) == 0 && String.CompareOrdinal(Sc.PlatformName, SolutionPlatform) == 0);

                if (MatchedSolutionConfig != null)
                {
                    SolutionContext ProjectSolutionCtxt = MatchedSolutionConfig.SolutionContexts.Item(Project.UniqueName);

                    if (ProjectSolutionCtxt != null)
                    {
                        IVsCfgProvider2 CfgProvider2 = Utils.HierarchyObjectToCfgProvider(ProjHierarchy);
                        if (CfgProvider2 != null)
                        {
                            IVsCfg Cfg;
                            CfgProvider2.GetCfgOfName(ProjectSolutionCtxt.ConfigurationName, ProjectSolutionCtxt.PlatformName, out Cfg);

                            if (Cfg != null)
                            {
                                if (ExecutingDelegate != null)
                                {
                                    ExecutingDelegate();
                                }

                                int JobResult = VSConstants.E_FAIL;

                                if (BuildType == BatchBuilderToolControl.BuildJob.BuildJobType.Build)
                                {
                                    JobResult =
                                        UnrealVSPackage.Instance.SolutionBuildManager.StartUpdateSpecificProjectConfigurations(
                                            1,
                                            new[] { ProjHierarchy },
                                            new[] { Cfg },
                                            null,
                                            new uint[] { 0 },
                                            null,
                                            (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD,
                                            0);
                                }
                                else if (BuildType == BatchBuilderToolControl.BuildJob.BuildJobType.Rebuild)
                                {
                                    JobResult =
                                        UnrealVSPackage.Instance.SolutionBuildManager.StartUpdateSpecificProjectConfigurations(
                                            1,
                                            new[] { ProjHierarchy },
                                            new[] { Cfg },
                                            new uint[] { 0 },
                                            null,
                                            null,
                                            (uint)(VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD | VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_FORCE_UPDATE),
                                            0);
                                }
                                else if (BuildType == BatchBuilderToolControl.BuildJob.BuildJobType.Clean)
                                {
                                    JobResult =
                                        UnrealVSPackage.Instance.SolutionBuildManager.StartUpdateSpecificProjectConfigurations(
                                            1,
                                            new[] { ProjHierarchy },
                                            new[] { Cfg },
                                            new uint[] { 0 },
                                            null,
                                            null,
                                            (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_CLEAN,
                                            0);
                                }

                                if (JobResult == VSConstants.S_OK)
                                {
                                    // Job running - show output
                                    PrepareOutputPane();
                                }
                                else
                                {
                                    if (FailedToStartDelegate != null)
                                    {
                                        FailedToStartDelegate();
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }