更改 Visual Studio .NET 插件默认工具菜单项图标






4.08/5 (9投票s)
2002年7月12日
4分钟阅读

151076

700
本文讨论如何更改 Visual Studio .NET 插件向导在工具菜单上放置的图标。
注意应用程序 GUI 的差异仅仅是因为我分别在工作地点和家中截取了第一张和第二张截图。
让向导引导你
本文的产生是因为我想为 Visual Studio .NET 创建一个插件。向导使这个过程相对轻松。你可以在 文件/新建/项目 下找到该向导,然后在 其他项目/可扩展性项目/Visual Studio .NET 插件 下。请确保选中“是,创建‘工具’菜单项”复选框。
向导完成后,你就可以构建插件,然后运行新解决方案中包含的设置 MSI。然后,当你按 F5 启动调试会话时,Visual Studio .NET 将会启动,并且在此新实例中,你应该能在工具菜单下看到你的新插件。它应该看起来像本页面顶部的第一张图片(除非你重命名了你的项目,则将显示你的项目名称)。
创建卫星 DLL
为了让 IDE 找到你的新图标,你必须将位图嵌入到一个外部的通用 Win32 C DLL 中。你不能将位图插入到包含插件的程序集中。为什么这样做,我无法告诉你。
要构建这个 Win32 卫星 DLL,你必须向插件解决方案中添加一个新项目。你可以通过 文件/添加项目/新建项目 来完成,然后在 Visual C++/Win32 项目 下。在弹出的窗口中,点击 应用程序设置,然后点击 DLL,再点击 完成。
现在找到你希望用作图标的位图,并将其添加到 DLL 项目中。位图有一些限制。它们是:
- 它必须是 16 像素 x 16 像素
- 它必须是 16 色位图
- 用于透明的颜色是:红色 = 0,绿色 = 254,蓝色 = 0 (RGB=00FE00h)
注意: 调色板默认的亮绿色不是正确的绿色。
现在向项目中添加一个资源文件。然后在资源视图中,右键单击新添加的 .rc 文件,然后点击 添加资源,再点击 导入,将位图插入资源文件。在属性面板中,将位图的 ID 从“IDB_BITMAP1”更改为“1”(不带引号)。构建解决方案。
现在你拥有了一个嵌入了位图的卫星 DLL。
将卫星 DLL 与插件关联
现在你有了卫星 DLL,你需要告诉 Visual Studio .NET 它在哪里。这通过注册表完成。需要在 HKEY_CURRENT_USER 或 HKEY_LOCAL_MACHINE Software\Microsoft\VisualStudio\7.0\Addins\<AddInName> 下添加两个值(确保将 <AddInName> 更改为你插件的实际名称)。
注意: 添加这些值的注册表项取决于你是否选择了让所有人都可以使用的选项。
- SatelliteDLLName = NameOfTheDLL.DLL
- SatelliteDLLPath = C:\InstallPathOfTheAddIn
这两个都可以通过解决方案中的安装程序完成。只需右键单击部署解决方案,然后转到 查看/注册表。要获取安装时的安装文件夹,请在 SatelliteDLLPath 变量中设置值为 [TARGETDIR]。
接下来的事情是将卫星 DLL 放在安装文件夹下方的特殊文件夹中。该文件夹是 <SatelliteDLLPath>\1033。1033 只是 English_Language/Sub-language_English_US 的 ID 号。如果你的系统不是美国系统,你需要在你的本地化代码编号目录中放置卫星 DLL。
你可以通过右键单击部署项目并转到 查看\文件系统 来设置此目录。然后在 应用程序文件夹 下添加一个目录,将 1033(或你偏好的语言目录)指定为文件夹名称。然后你需要将卫星 DLL 项目的PRIMARY OUTPUT 添加到此目录。这可以通过右键单击部署项目,然后点击 添加/项目输出,然后将 DLL 的PRIMARY OUTPUT 移动到语言目录来完成。
代码更改
现在关联已完成,你需要打开主插件项目中的 Connect.cs 文件,并找到 OnConnection
方法。在此方法中,找到底部的 try
/catch
块(它应该看起来像这样)。
try
{
Command command = commands.AddNamedCommand(addInInstance, "MyAddin1", "MyAddin1",
"Executes the command for MyAddin1", true, 59, ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported+(int)
vsCommandStatus.vsCommandStatusEnabled);
CommandBar commandBar = (CommandBar)commandBars["Tools"];
CommandBarControl commandBarControl = command.AddControl(commandBar, 1);
}
catch(System.Exception /*e*/)
{
}
重要的行是:
Command command = commands.AddNamedCommand(addInInstance, "MyAddin1", "MyAddin1", "Executes the command for MyAddin1", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported+(int)vsCommandStatus.vsCommandStatusEnabled);
将 true
更改为 false
,并将 59
更改为 1
。这告诉 Visual Studio .NET 该位图不是内置图标,而是查找插件的卫星 DLL 并加载 ID 为 '1' 的位图。
现在,如果你构建项目然后重新安装插件,你的图标应该已经改变了。
一些注意事项
- 如果插件未在 IDE 中显示,请运行主插件目录中的 ReCreateCommands.reg 文件,然后重新启动 IDE。
- 重新运行安装过程似乎也能解决同样的问题(有时)。
参考文献
我想感谢 Carlos 的新闻组帖子,我在其中找到了关于插件问题的许多答案。
此外,我还参考了 MSDN 库获取了一些信息;尽管 MSDN 库在 VS .NET 插件文档方面似乎有所欠缺。