几天前我访问了 Visual Studio 2012,我发现解决方案资源管理器对我来说有点过于简约。
大多数图标都是灰色和黑色的,我必须付出额外的努力才能找到我正在寻找的文件。
有没有办法恢复到 2010 年风格的文件图标?
几天前我访问了 Visual Studio 2012,我发现解决方案资源管理器对我来说有点过于简约。
大多数图标都是灰色和黑色的,我必须付出额外的努力才能找到我正在寻找的文件。
有没有办法恢复到 2010 年风格的文件图标?
我知道的唯一“解决方案”是卸载 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)”中。
没有任何明示或暗示的保证。仅在备份后使用,风险自负。如果它符合您的要求,请告诉我。
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\”
..因此,当我运行它时,不会发生一件事,或者更确切地说,单步执行它以查看它是否有效。它没有。良好的测试工作,用于更新注册表的东西