Visual Studio 最近项目编辑器





3.00/5 (2投票s)
一个用于编辑 Visual Studio 最近项目列表的应用程序。
引言
在学习特定的 API 或新技术时,我经常创建许多小型解决方案,随着解决方案数量的增加,超过了 Visual Studio 启动页面的显示范围,最近使用的解决方案列表变得不再那么有用,因为它显示了许多我不再使用的解决方案。
由于无法从 Visual Studio 中编辑该列表 [至少我不知道 VS 中是否有任何选项或对话框可以编辑或完全清除此列表],我创建了这个小应用程序来清理这些内容。
背景
我在 CodeProject 上寻找能够完成我想要功能的应用程序,并找到了这篇文章:Visual Studio Project MRU List Editor,它解释了 Visual Studio 保存 MRU 列表的位置。但由于我的机器上安装了多个版本的 Visual Studio,我创建了这个应用程序来处理不同的版本。
这是应用程序在运行时的情况
选择你的 Visual Studio 版本
显示 Visual Studio 2005 MRU
浏览 MRU 列表
编辑条目
条目已更新
重要提示
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; }
}
}