public static bool TryBuildProject(ContractsVsPackage package, Project project)
        {
            Contract.Requires(package != null);
            Contract.Requires(project != null);

            SolutionBuild          solutionBuild;
            SolutionConfiguration2 activeConfiguration;

            if (!TryGetActiveSolutionConfiguration(package, out solutionBuild, out activeConfiguration))
            {
                return(false);
            }

            string configurationName = activeConfiguration.Name;
            string platformName      = activeConfiguration.PlatformName;
            string buildName         = configurationName + '|' + platformName;

            try
            {
                solutionBuild.BuildProject(
                    buildName,
                    project.UniqueName,
                    true);
            }
            catch (Exception ex)
            {
                ContractsVsPackage.SwallowedException(ex);
                return(false);
            }

            return
                (solutionBuild.BuildState == vsBuildState.vsBuildStateDone &&
                 solutionBuild.LastBuildInfo == 0);
        }
        public static bool TryGetActiveProject(IServiceProvider serviceProvider, out Project project)
        {
            Contract.Requires(serviceProvider != null);
            Contract.Ensures(Contract.ValueAtReturn(out project) != null || !Contract.Result <bool>());

            project = null;
            try
            {
                var dte = VsServiceProviderHelper.GetService <DTE>(serviceProvider);

                if (dte == null)
                {
                    return(false);
                }

                if (dte.Solution != null)
                {
                    object[] projects = dte.ActiveSolutionProjects as object[];
                    if (projects != null && projects.Length == 1)
                    {
                        project = (Project)projects[0];
                    }
                }
                return(project != null);
            }
            catch (Exception ex)
            {
                ContractsVsPackage.SwallowedException(ex);
            }

            return(false);
        }
        public static bool TryGetProperty(
            IServiceProvider serviceProvider,
            Project project, string propertyName, out string value)
        {
            Contract.Requires(serviceProvider != null);
            Contract.Requires(project != null);
            Contract.Requires(propertyName != null);

            try
            {
                var properties = project.Properties;
                if (properties != null)
                {
                    var property = project.Properties.Item(propertyName);
                    if (property != null)
                    {
                        value = (string)property.Value;
                        return(true);
                    }
                }
            }
            catch (Exception ex)
            {
                ContractsVsPackage.SwallowedException(ex);
            }

            // try msbuild properties
            return
                (TryGetBuildProperty(
                     serviceProvider,
                     project,
                     null,
                     propertyName,
                     out value));
        }
        public static bool TryGetHierarchyForProject(
            IServiceProvider serviceProvider,
            Project project,
            out IVsHierarchy hierarchy)
        {
            Contract.Requires(serviceProvider != null);
            Contract.Requires(project != null);

            string uniqueName;

            try
            {
                uniqueName = project.UniqueName;
            }
            catch (Exception ex)
            {
                ContractsVsPackage.SwallowedException(ex);
                uniqueName = null;
            }

            if (uniqueName == null)
            {
                hierarchy = null;
                return(false);
            }
            else
            {
                try
                {
                    hierarchy = HierarchyFromUniqueName(
                        serviceProvider,
                        project.UniqueName);

                    if (hierarchy == null)
                    {
                        return(false);
                    }

                    return(true);
                }
                catch (Exception ex)
                {
                    ContractsVsPackage.SwallowedException(ex);
                    hierarchy = null;
                    return(false);
                }
            }
        }
        /// <summary>
        /// Tries to get a build property value
        /// </summary>
        /// <param name="project"></param>
        /// <param name="configuration">may be null for 'all' configuration</param>
        /// <param name="name"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool TryGetBuildProperty(
            IServiceProvider serviceProvider,
            Project project,
            string configuration,
            string name,
            out string value)
        {
            Contract.Requires(serviceProvider != null);
            Contract.Requires(project != null);
            Contract.Requires(name != null);

            if (configuration == null)
            {
                configuration = String.Empty;
            }

            IVsHierarchy hierachy;

            if (!TryGetHierarchyForProject(serviceProvider, project, out hierachy))
            {
                value = null;
                return(false);
            }

            IVsBuildPropertyStorage properties = hierachy as IVsBuildPropertyStorage;

            if (properties == null)
            {
                value = null;
                return(false);
            }

            try
            {
                int hresult = properties.GetPropertyValue(
                    name,
                    configuration,
                    (uint)_PersistStorageType.PST_USER_FILE,
                    out value);
                if (Microsoft.VisualStudio.ErrorHandler.Succeeded(hresult))
                {
                    return(true);
                }
            }
            catch (Exception ex)
            {
                ContractsVsPackage.SwallowedException(ex);
            }

            try
            {
                int hresult = properties.GetPropertyValue(
                    name,
                    configuration,
                    (uint)_PersistStorageType.PST_PROJECT_FILE,
                    out value);
                return(Microsoft.VisualStudio.ErrorHandler.Succeeded(hresult));
            }
            catch (Exception ex)
            {
                ContractsVsPackage.SwallowedException(ex);
            }

            value = null;
            return(false);
        }