private void InspectHierarchyItems(IVsHierarchy hier, uint itemid, int level, List <uint> sharedItemIds)
        {
            string caption = HierarchyUtilities.GetHierarchyProperty <string>(hier, itemid, (int)__VSHPROPID.VSHPROPID_Caption);

            this.Output(string.Format("{0}{1}\n", new string('\t', level), caption));

            bool isSharedItem;

            if (HierarchyUtilities.TryGetHierarchyProperty(hier, itemid, (int)__VSHPROPID7.VSHPROPID_IsSharedItem, out isSharedItem) &&
                isSharedItem)
            {
                sharedItemIds.Add(itemid);
            }

            uint child;

            if (HierarchyUtilities.TryGetHierarchyProperty(hier, itemid, (int)__VSHPROPID.VSHPROPID_FirstChild, Unbox.AsUInt32, out child) &&
                child != (uint)VSConstants.VSITEMID.Nil)
            {
                this.InspectHierarchyItems(hier, child, level + 1, sharedItemIds);

                while (HierarchyUtilities.TryGetHierarchyProperty(hier, child, (int)__VSHPROPID.VSHPROPID_NextSibling, Unbox.AsUInt32, out child) &&
                       child != (uint)VSConstants.VSITEMID.Nil)
                {
                    this.InspectHierarchyItems(hier, child, level + 1, sharedItemIds);
                }
            }
        }
        public IEnumerable <IVsHierarchy> EnumImportingProjects(IVsHierarchy hierarchy)
        {
            IVsSharedAssetsProject sharedAssetsProject;

            if (HierarchyUtilities.TryGetHierarchyProperty(hierarchy, (uint)VSConstants.VSITEMID.Root, (int)__VSHPROPID7.VSHPROPID_SharedAssetsProject, out sharedAssetsProject) &&
                sharedAssetsProject != null)
            {
                foreach (IVsHierarchy importingProject in sharedAssetsProject.EnumImportingProjects())
                {
                    yield return(importingProject);
                }
            }
        }
        public IVsHierarchy GetActiveProjectContext(IVsHierarchy hierarchy)
        {
            IVsHierarchy activeProjectContext;

            if (HierarchyUtilities.TryGetHierarchyProperty(hierarchy, (uint)VSConstants.VSITEMID.Root, (int)__VSHPROPID7.VSHPROPID_SharedItemContextHierarchy, out activeProjectContext))
            {
                return(activeProjectContext);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 4
0
    public static string GetName(this IVsSolution4 solution, Guid identifier)
    {
        ThreadHelper.ThrowIfNotOnUIThread();

        TryGetHierarchy(solution, identifier, out IVsHierarchy hierarchy);

        if (HierarchyUtilities.TryGetHierarchyProperty(hierarchy, VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_Name, out string name))
        {
            return(name);
        }

        return("?");
    }
        /// <summary>
        /// This function is the callback used to execute a command when the a menu item is clicked.
        /// See the Initialize method to see how the menu item is associated to this function using
        /// the OleMenuCommandService service and the MenuCommand class.
        /// </summary>
        private void MenuItemCallback(object sender, EventArgs e)
        {
            var    sharedHier    = this.FindSharedProject();
            string sharedCaption = HierarchyUtilities.GetHierarchyProperty <string>(sharedHier, (uint)VSConstants.VSITEMID.Root, (int)__VSHPROPID.VSHPROPID_Caption);

            this.Output(string.Format("Found shared project: {0}\n", sharedCaption));

            var    activePlatformHier = this.GetActiveProjectContext(sharedHier);
            string activeCaption      = HierarchyUtilities.GetHierarchyProperty <string>(activePlatformHier, (uint)VSConstants.VSITEMID.Root, (int)__VSHPROPID.VSHPROPID_Caption);

            this.Output(string.Format("The active platform project: {0}\n", activeCaption));

            this.Output("Platform projects:\n");
            foreach (IVsHierarchy platformHier in this.EnumImportingProjects(sharedHier))
            {
                string platformCaption = HierarchyUtilities.GetHierarchyProperty <string>(platformHier, (uint)VSConstants.VSITEMID.Root, (int)__VSHPROPID.VSHPROPID_Caption);
                this.Output(string.Format(" * {0}\n", platformCaption));
            }

            this.Output("Walk the active platform project:\n");
            var sharedItemIds = new List <uint>();

            this.InspectHierarchyItems(activePlatformHier, (uint)VSConstants.VSITEMID.Root, 1, sharedItemIds);

            var    sharedItemId = sharedItemIds[0];
            string fullPath;

            ErrorHandler.ThrowOnFailure(((IVsProject)activePlatformHier).GetMkDocument(sharedItemId, out fullPath));
            this.Output(string.Format("Shared item full path: {0}\n", fullPath));

            var dte       = (EnvDTE.DTE) this.GetService(typeof(EnvDTE.DTE));
            var dteEvents = (EnvDTE80.Events2)dte.Events;

            dteEvents.ProjectItemsEvents.ItemRenamed += this.OnItemRenamed;
            HierarchyUtilities.TryGetHierarchyProperty(activePlatformHier, sharedItemId, (int)__VSHPROPID7.VSHPROPID_SharedProjectHierarchy, out sharedHier);

            uint itemIdInSharedHier;
            int  found;

            VSDOCUMENTPRIORITY[] priority = new VSDOCUMENTPRIORITY[1];
            if (ErrorHandler.Succeeded(((IVsProject)sharedHier).IsDocumentInProject(fullPath, out found, priority, out itemIdInSharedHier)) &&
                found != 0)
            {
                var newName = DateTime.Now.Ticks.ToString() + Path.GetExtension(fullPath);
                ErrorHandler.ThrowOnFailure(sharedHier.SetProperty(itemIdInSharedHier, (int)__VSHPROPID.VSHPROPID_EditLabel, newName));
                this.Output(string.Format("Renamed {0} to {1}\n", fullPath, newName));
            }

            dteEvents.ProjectItemsEvents.ItemRenamed -= this.OnItemRenamed;
        }
Exemplo n.º 6
0
        /// <summary>
        /// Returns the <see cref="IVsSharedAssetsProject"/> for the <see cref="IVsHierarchy"/>.
        /// </summary>
        /// <param name="hierarchy"></param>
        public static IVsSharedAssetsProject?GetSharedAssetsProject(this IVsHierarchy hierarchy)
        {
            if (hierarchy == null)
            {
                throw new ArgumentNullException(nameof(hierarchy));
            }

            ThreadHelper.ThrowIfNotOnUIThread();

            HierarchyUtilities.TryGetHierarchyProperty <IVsSharedAssetsProject>(
                hierarchy,
                (uint)VSConstants.VSITEMID.Root,
                (int)__VSHPROPID7.VSHPROPID_SharedAssetsProject,
                out IVsSharedAssetsProject? sharedAssetsProject);

            return(sharedAssetsProject);
        }
Exemplo n.º 7
0
 /// <summary>
 /// Tries to get a property from a hierarchy item.
 /// </summary>
 /// <remarks>
 /// Inspired by https://github.com/dotnet/roslyn/blob/main/src/VisualStudio/Core/Def/Implementation/ProjectSystem/Extensions/IVsHierarchyExtensions.cs
 /// </remarks>
 public static bool TryGetItemProperty <T>(this IVsHierarchy hierarchy, uint itemId, int propertyId, out T?value)
 {
     return(HierarchyUtilities.TryGetHierarchyProperty <T>(hierarchy, itemId, propertyId, out value));
 }