65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio 最近项目编辑器

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2010年10月15日

CPOL

2分钟阅读

viewsIcon

18762

downloadIcon

186

一个用于编辑 Visual Studio 最近项目列表的应用程序。

引言

在学习特定的 API 或新技术时,我经常创建许多小型解决方案,随着解决方案数量的增加,超过了 Visual Studio 启动页面的显示范围,最近使用的解决方案列表变得不再那么有用,因为它显示了许多我不再使用的解决方案。

由于无法从 Visual Studio 中编辑该列表 [至少我不知道 VS 中是否有任何选项或对话框可以编辑或完全清除此列表],我创建了这个小应用程序来清理这些内容。

背景

我在 CodeProject 上寻找能够完成我想要功能的应用程序,并找到了这篇文章:Visual Studio Project MRU List Editor,它解释了 Visual Studio 保存 MRU 列表的位置。但由于我的机器上安装了多个版本的 Visual Studio,我创建了这个应用程序来处理不同的版本。

这是应用程序在运行时的情况

选择你的 Visual Studio 版本

Image1.PNG

显示 Visual Studio 2005 MRU

Image2.PNG

浏览 MRU 列表

Image3.PNG

编辑条目

Image5.PNG

条目已更新

Image6.PNG

重要提示

Visual Studio 实例在关闭时会重写列表;要有效地清除 MRU 列表,应关闭目标 Visual Studio 的所有实例。

Using the Code

构建此应用程序只需要读取注册表项并重写它们。

Visual Studio 将 MRU 列表存储在以下注册表位置:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\XX\ProjectMRUList,其中 XX 是 Visual Studio 的版本号。

  • Visual Studio 2002 - 7.0
  • Visual Studio 2003 - 7.1
  • Visual Studio 2005 - 8.0
  • Visual Studio 2008 - 9.0
  • Visual Studio 2010 - 10.0

有一个名为 Util 的类,它将这些值存储在 Hashtable

internal static class Utils
{
    private static Hashtable visualStudioVersions = new Hashtable();
    private static string commonPath = @"Software\Microsoft\VisualStudio";
    private static string projectMRUList = "ProjectMRUList";
    public static  Hashtable VisualStudioVersions
    {
        get { return visualStudioVersions; }
    }
    // Intializes et sets supported versions.
    static Utils()
    {
        visualStudioVersions.Add("7.0", "Visual Studio 2002");
        visualStudioVersions.Add("7.1", "Visual Studio 2003");
        visualStudioVersions.Add("8.0", "Visual Studio 2005");
        visualStudioVersions.Add("9.0", "Visual Studio 2008");
        visualStudioVersions.Add("10.0", "Visual Studio 2010");
    }
    /// Opens MRU sub keys and retreives installed Visual Studio Versions.
    public static List<VisualStudioVersion> GetInstalledVersions()
    {
        List<VisualStudioVersion> installedVersions = null;
        RegistryKey visualStudio = null;
        try
        {
            visualStudio = Registry.CurrentUser.OpenSubKey(commonPath);
            if (visualStudio != null)
            {
                installedVersions = new List<VisualStudioVersion>();
                foreach (string key in visualStudio.GetSubKeyNames())
                {
                    if (visualStudioVersions.ContainsKey(key))
                    {
                        installedVersions.Add(new VisualStudioVersion(key, 
                            (string)visualStudioVersions[key]));
                    }
                }
            }
        }
        catch 
        {
        }
        finally
        {
            if (visualStudio != null)
                visualStudio.Close();
        }
        return installedVersions;
    }
    
    /// Returns the list of Recently used solutions.
    public static List<string> GetMRUList(VisualStudioVersion version)
    {
        List<string> mruList = null;
        RegistryKey mruRegistryKey = null;
        try
        {
            if (version != null)
            {
                mruRegistryKey = Registry.CurrentUser.OpenSubKey(
                    String.Format(@"{0}\{1}\{2}",
                    commonPath, version.Version, projectMRUList));
                if(mruRegistryKey != null)
                {
                    mruList = new List<string>();
                    string[] fileKeys = mruRegistryKey.GetValueNames();
                    if (fileKeys != null && fileKeys.Length > 0)
                    {
                        foreach (string key in fileKeys)
                        {
                            mruList.Add((string)mruRegistryKey.GetValue(key));
                        }
                    }
                }
            }
        }
        catch 
        {
        }
        finally
        {
            if (mruRegistryKey != null)
                mruRegistryKey.Close();
        }
        return mruList;
    }

    /// Saves and Update MRU registry list
    public static void SaveMruList(VisualStudioVersion version, 
                  List<VisualStudioSolution> solutions)
    {
        RegistryKey mruRegistryKey = null;
        try
        {
            if (solutions != null && version != null)
            {
                mruRegistryKey =
                    Registry.CurrentUser.OpenSubKey(String.Format(@"{0}\{1}\{2}",
                    commonPath, version.Version, projectMRUList), true);
                if (mruRegistryKey != null)
                {
                    foreach (string key in mruRegistryKey.GetValueNames())
                    {
                        mruRegistryKey.DeleteValue(key);
                    }
                    for (int i = 0; i < solutions.Count; i++)
                    {
                        mruRegistryKey.SetValue("File" + 
                          (i + 1).ToString(), solutions[i].SolutionPath);
                    }
                }
            }
        }
        catch
        {
        }
        finally
        {
            if (mruRegistryKey != null)
                mruRegistryKey.Close();
        }
    }

    /// Holds the version number and description about VS.
    internal class VisualStudioVersion
    {
        public VisualStudioVersion(string version, string description)
        {
            this.version = version;
            this.description = description;
        }
        private string version;
        public string Version
        {
            get { return version; }
            set { version = value; }
        }
        private string description;
        public string Description
        {
            get { return description; }
            set { description = value; }
        }
    }
© . All rights reserved.