如何在Visual Studio 2012的解决方案资源管理器中获取Visual Studio 2010图标

She*_*har 5 visual-studio-2012

几天前我访问了Visual Studio 2012,我发现解决方案资源管理器对我来说有点太简约了.
大多数图标都是灰色和黑色,我需要额外努力找出我要查找的文件.

有没有办法恢复到文件的2010样式图标?

Pet*_*hie 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
Run Code Online (Sandbox Code Playgroud)

双击时,会将图标"恢复"为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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此特定位代码仅更改与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)"中.

不作任何明示或暗示的保证.只有在备份后才能使用,风险自负.如果它符合您的要求,请告诉我.