c# - 如何在 ISuggestedAction 中使用来自 .imagemanifest 的 ImageMoniker
问题描述
我希望能够在我的灯泡操作列表中为每个操作包含一个自定义图标,而不是简单的文本,以便它是一个图标和文本(见下文)。
我在 VSIX 中包含了 .imagemanifest 以及 png。下面是我的 foo.imagemanifest 的样子以及我的ISuggestedAction
实现的一个片段。首先,这可能吗?如果是这样,是否还需要做其他事情才能看到灯泡动作中的图像?它是否必须以某种方式在图像目录/服务中注册,或者可能使用IVsImageService2.GetImageMonikerForFile(String)
?
我的foo.imagemanifest
:
<?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="/MyCompany.VisualStudio;Component/Resources/Lightbulb" />
<Guid Name="MonikersGuid" Value="{2a63e4c2-d4a6-5d82-aeb2-84935e052cd3}" />
<ID Name="bug" Value="0" />
</Symbols>
<Images>
<Image Guid="$(MonikersGuid)" ID="$(bug)">
<Source Uri="$(Resources)/bug.png">
<Size Value="16" />
</Source>
</Image>
</Images>
<ImageLists />
</ImageManifest>
ISuggestedAction
实现包含:
public ImageMoniker IconMoniker =>
new ImageMoniker {Guid = new Guid("2a63e4c2-d4a6-5d82-aeb2-84935e052cd3"), Id = 0};
解决方案
我在创建自定义绰号时也遇到了问题。
然后我在VSSDK github repo上找到了一个例子。
Menu_And_Commands示例展示了它的工作原理。
这里有几点需要考虑:
imagemanifest 文件应位于 vsix 文件中。
- 属性:包含在 VSIX 中 = true
如果您在调试模式下运行扩展程序,请确保 imagemanifest 文件也在 AppData Extension 文件夹中 --> C:\Users\{user}\AppData\Local\Microsoft\VisualStudio\15.0_1234abcdExp\Extensions\{author}\ {产品名称}\{版本}
imagemanifest 文件应直接放置在您的 c# 项目中。
如果将它放在项目文件夹中的某个位置,它将无法工作。png 文件应作为资源添加。
- 属性:构建操作 = 资源
确保图像确实在您的 dll 中并且路径正确。
如果您不确定,请重建您的 vsix 项目。
我不知道它是否有必要,但对我来说,它只有在我为 imagemanifest 文件创建一个带有 VSIX 包的单独 VSIX 项目时才有效。如果安装了此 VSIX 包,则 Visual Studio 将知道名字对象的 GUID,其他 VSIX 包将找到它。
这个 imagemanifest 文件对我有用:
<?xml version="1.0" encoding="utf-8"?>
<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="/MY.ASSEMBLY.NAME;Component/Resources" />
<Guid Name="guidMyMoniker" Value="{08EF3AF1-7D26-4652-8923-6593CFE5392B}" />
<ID Name="idImage1" Value="1" />
<ID Name="idImage2" Value="2" />
</Symbols>
<Images>
<Image Guid="$(guidMyMoniker)" ID="$(idImage1)">
<Source Uri="$(Resources)/16x16/Image1_16pxl.png">
<Size Value="16" />
</Source>
<Source Uri="$(Resources)/32x32/Image1_32pxl.png">
<Size Value="32" />
</Source>
</Image>
<Image Guid="$(guidMyMoniker)" ID="$(idImage2)">
<Source Uri="$(Resources)/16x16/Image2_16pxl.png">
<Size Value="16" />
</Source>
<Source Uri="$(Resources)/32x32/Image2_32pxl.png">
<Size Value="32" />
</Source>
</Image>
</Images>
<ImageLists />
</ImageManifest>
推荐阅读
- mysql - 为什么 MySQL 8 IF 和 IFNULL 在测试值为 NULL 的变量时返回 BLOB 结果?
- r - ggplot2 像另一个图形一样重新创建水平矩形
- android - Google Play 结算测试卡在制作后仍会显示
- python - 使用 BS4 进行网页抓取,按 div id 选择仍会返回整个页面
- r - R Summarytools 打印表格
- javascript - OBJLoader.js:459 Uncaught TypeError: Cannot read property 'itemError' of undefined in THREE.js using MTLLoader and OBJLoader to load a model
- php - 发送和接收多个 JSON 文字 PHP Socket
- java - 将 RestTemplate 用于 Rest API 时出现 400 错误代码
- react-native - 如何提高视频和图片上传速度 React Native
- python - 无法为 sublimetext 执行 python