I was playing a little bit further with the DSL Tools and tried to add some icons to the custom commands (menus) I created. With the help of Jezz I managed to get this working.
First of all we tried to use custom bmp images in the commands. Unfortunately there appears to be a bug somewhere in the VS shell that prevented us from using custom bmp images. One option to work around this is use Guidance Automation Toolkit for adding the custom commands, we decided to follow another approach and use one of the icons from the office resources. If you can live with this limitation (approx. 7000 icons), you might be interested in the information below.
First you need to decide which icon you want to use in the menu. Therefore, you need the so called FaceID of the icon that you want to use. There are several tools or Office add-ins that can be downloaded from the internet to help you determine the FaceID of an icon (I used this one).
For this example we will use FaceID 2497.
Now we know the FaceID of the icon we want to use, we can open the “C:\Program Files\Visual Studio 2005 SDK\2005.10\VisualStudioIntegration\Common\Inc\office10\msobtnid.h” file in VS.NET.
This file contains all ID’s for the Office icons. For this example, we search the file for FaceID 2497. We will find a line that looks like:
#define msotcidExploreWebPage 2497 //(43,25) Label: 'E&xplore Web Page'
From this line we get the declaration of the FaceID. In this case this is “msotcidExploreWebPage”
In VS.NET we now open our DSL solution and open the “Designer\CtcComponents\GeneratedCmd.dslddt” file.
Somewhere after the include of the “GeneratedCmd.dslddi” file we can add the following line.
#define OI_GENERATEDIAGRAM guidOfficeIcon:msotcidExploreWebPage
Of course you can change the “OI_GENERATEDIAGRAM” in whatever you want. Change the declaration (“msotcidExploreWebPage”) to the appropriate value for your icon, leave the “guidOfficeIcon” in!
Next, we open the “Designer\CtcComponents\CustomCmd.ctc” file and find our customer command. This line should look something like this (in your case, of course with other name and text)
guidCmdSet:cmdIdGenerateModel, guidMenu:grpidContextMain, 0x0200, OI_NOID, BUTTON, DIS_DEF, "Generate Model from WSDL";
We can change the “OI_NOID” into “OI_GENERATEDIAGRAM” (your value here)
Last, we have to open the “Designer\Shell\Package.dslddt” file.
To make sure VS.NET resets its menu cache after the first build we need to increment the second integer in this line:
[ProvideMenuResource(1000, 15)]
Build and run the solution and the icon will appear in your command.

Doesn’t this look pretty?