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(); } }
/// <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); }
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); }
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(); } } } } } } } }