如何在 Visual Studio 中将自定义图标添加到解决方案资源管理器

Posted

技术标签:

【中文标题】如何在 Visual Studio 中将自定义图标添加到解决方案资源管理器【英文标题】:How to add custom icons to solution explorer in Visual Studio 【发布时间】:2018-11-26 12:47:26 【问题描述】:

我正在尝试将自定义图标添加到 Visual Studio 中的解决方案资源管理器,就像 FileIcons extension 一样。

我认为我已经为 Visual Studio 做好了一切准备,将新图标与以 .d.di 扩展名结尾的文件相关联,但 Visual Studio 仍然没有在解决方案资源管理器中显示任何图标。

这是使用ManifestFromResources.exe 生成的清单:

<?xml version="1.0" encoding="utf-8"?>
<!-- This file was generated by the ManifestFromResources tool.-->
<!-- Version: 14.0.50929.2 -->
<ImageManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/VisualStudio/ImageManifestSchema/2014">
  <Symbols>
    <String Name="Resources" Value="/VisualDLS;Component/Icons" />
    <Guid Name="AssetsGuid" Value="872b4702-eabf-444b-b6b3-96dc64531f74" />
    <ID Name="d" Value="0" />
  </Symbols>
  <Images>
    <Image Guid="$(AssetsGuid)" ID="$(d)">
      <Source Uri="$(Resources)/d.png">
        <Size Value="32" />
      </Source>
    </Image>
  </Images>
  <ImageLists />
</ImageManifest>

这是 pkgdef 文件:

[$RootKey$\ShellFileAssociations\.d]
"DefaultIconMoniker"="872b4702-eabf-444b-b6b3-96dc64531f74:0"
[$RootKey$\ShellFileAssociations\.di]
"DefaultIconMoniker"="872b4702-eabf-444b-b6b3-96dc64531f74:0"

在我的扩展程序的 vsixmanifest 中,pkgdef 文件被定义为具有以下属性的资产:

类型:Microsoft.VisualStudio.VsPackage 来源:File on filesystem 路径:icons.pkgdef(显然,这就是我命名我的 pkgdef 文件的方式)

关于文件属性,图标图像文件设置为资源,而图像清单和 pkgdef 文件都设置为要包含在 VSIX 中的内容。

如果我尝试在我的图像清单中使用 KnownMoniker,Visual Studio 会正确选择它并正确显示图标;如果我事先安装它,我什至可以从 FileIcons 扩展中引用图标名称。但是,一旦我尝试使用自己的清单和图标,什么都没有出现。 我可能在这里做错了什么,但我似乎看不出到底是什么。

【问题讨论】:

Ed 之前在解决方案资源管理器中提供了一些自定义图标的建议,如果可能,您可以在这里查看:social.msdn.microsoft.com/Forums/vstudio/en-US/… 【参考方案1】:

对于将来可能偶然发现相同问题的任何人,我发现了我的问题所在。在我最初的测试中,我一定是做错了什么,导致 Visual Studio 在资源管理器中的 .d 文件旁边没有显示任何图标。 之后,它可能会因为某处的图标缓存而继续这样做,即使在纠正了我做错的任何事情之后也是如此。用另一个扩展名重命名文件,然后将其重命名回原来的名称后,新图标开始显示。

【讨论】:

以上是关于如何在 Visual Studio 中将自定义图标添加到解决方案资源管理器的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Shell 2015 不在解决方案资源管理器中使用自定义图标

visual Studio 2017 扩展开发《菜单图标详解》

visual studio code教程:基础使用和自定义设置

如何在颤动中将图标放在自定义按钮内

visual studio 2010自定义类继承CString问题

如何在 Visual Studio 中为自定义配置文件添加配置转换?