5

几天前我访问了 Visual Studio 2012,我发现解决方案资源管理器对我来说有点过于简约。
大多数图标都是灰色和黑色的,我必须付出额外的努力才能找到我正在寻找的文件。

有没有办法恢复到 2010 年风格的文件图标?

4

2 回答 2

5

我知道的唯一“解决方案”是卸载 Visual Studio 2012。

问题归结为图标的注册方式。安装 2012 时,所有 HKEY_CLASSES_ROOT 图标注册都会被 2012 覆盖。从概念上讲,您可以编辑这些注册以“恢复”或更改图标。例如,.csproj 文件链接到 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC#\VCSPackages\csproj.dll 文件中的第一个图标。您可以更改它,使图标指向 C:\Program Files (x86)\Microsoft Visual Studio 10.0 \VC#\VCSPackages\csproj.dll 中的第一个图标。.reg可以创建用于设置该值的文件来设置该值,例如:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\VisualStudio.Launcher.csproj.11.0\DefaultIcon]
@="c:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC#\\VCSPackages\\csproj.dll,0

双击时,会将图标“恢复”为 2010 图标。但是,您必须为要“恢复”的每个图标执行此操作。

更新:

我想您可以编写一些代码来搜索注册表并替换指向 11.0 文件的图标并将它们替换为 10.0 文件。例如:

const string vsDirectory = "c:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\";
int index = vsDirectory.IndexOf("10.0\\", StringComparison.Ordinal);

var keyNames = Registry.ClassesRoot.GetSubKeyNames();
foreach (var name in keyNames.Where(name => name.StartsWith("VisualStudio.Launcher.")))
{
    using(RegistryKey key = Registry.ClassesRoot.OpenSubKey(name+@"\DefaultIcon"))
    {
        if (key == null) continue;
        var value = key.GetValue(null).ToString();
        if (!value.StartsWith(vsDirectory)) continue;
        var sb = new StringBuilder(value);
        var newValue = sb.Replace("10.0", "11.0", index, 4).ToString();
        var elements = newValue.Split(',');
        if (elements.Length <= 0) continue;
        var filename = elements[0];
        if (File.Exists(filename))
        {
            key.SetValue(null, sb.ToString());
        }
    }
}

这段特定的代码仅更改与 VisualStudio.Launcher 关联的类根键,并且仅更改包含在“c:\Program Files (x86)\Microsoft Visual Studio 11.0\”目录中的文件中具有相应 10.0 文件的图标. 即它不会改变.cs 文件的图标。要将这些文件更改"VisualStudio.Launcher.""VisualStudio."它还假定图标索引未从 10 更改为 11。

我没有一起安装 10 和 11,所以我没有测试SetValue这段代码。如果您使用该代码,则需要确保您的安装位于“c:\Program Files (x86)”中。

没有任何明示或暗示的保证。仅在备份后使用,风险自负。如果它符合您的要求,请告诉我。

于 2012-08-29T22:33:04.800 回答
-2
const string vsDirectory = "c:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\";
int index = vsDirectory.IndexOf("10.0\\", StringComparison.Ordinal);

index 为 -1,因为“c:\Program Files (x86)\Microsoft Visual Studio 11.0\”实际上并不包含字符串“10.0\”

..因此,当我运行它时,不会发生一件事,或者更确切地说,单步执行它以查看它是否有效。它没有。良好的测试工作,用于更新注册表的东西

于 2012-10-09T00:29:25.667 回答