When developing your own custom components for that more professional, and also practical, finish
you may want to use your own icon rather than relying on the default system icon.
You set this through the IconResource property of the appropriate component attribute;
DtsTask for a control flow component or task, DtsPipelineComponent for a data flow component, and
DtsConnection for your own connection manager. The DtsConnection IconResource functionality is not fully implemented for the beta 2 release, and you will always get the default icon.
To set an icon for your component the first thing you need to do is
to prepare your icon. This should contain two images, one 16x16 for
the toolbox and one 32x32 for the design surface.
Best practice for icon design states that you should provide several color depths,
however in practice I find 256 colors is sufficient, although this is contrary
to current Books Online topics which state 16 colors.
A full discussion of icon design is beyond the scope of this article, however there
are a wide range of tools and resources available on the internet.
For a detailed explanation of current icon design practices try
Creating Windows XP Icons.
Using Visual Studio 2005 add the icon to your project if you
haven't already. Right-click the
project in the Solution Explorer and select Add, Existing Item....
Change the
file filter to All files, and then select your icon file.
Once the icon is listed in the Solution Explorer, check the properties,
and ensure you set the Build Action to Embedded Resource.
You now need to determine the icon resource string for the icon. This
is made up of the project's default namespace and the filename of the icon.
For example if the default namespace is SQLIS.Dts.Pipeline.MyComponent
and the icon filename is MyIcon.ico, the resource string would be
SQLIS.Dts.Pipeline.MyComponent.MyIcon.ico.
If the icon is placed in a subfolder within the project this will change
the resource string slightly, as the folder will become part of the namespace.
So if the icon is within a folder called Graphics in the project,
the resource string becomes SQLIS.Dts.Pipeline.MyComponent.Graphics.MyIcon.ico.
Once you have determined the resource string you set the IconResource
property of your component attribute. For simplicity we use an icon without
a folder for the examples below.
A C# example of setting a source adapter pipeline component -
[DtsPipelineComponent(
DisplayName = "MyComponent Source",
ComponentType = ComponentType.SourceAdapter,
IconResource = "SQLIS.Dts.Pipeline.MyComponent.MyIcon.ico")]
public class MyComponent : PipelineComponent
...
A VB.Net example of setting a source adapter pipeline component -
<DtsPipelineComponent( _
DisplayName:="My Component Source", _
ComponentType:=ComponentType.SourceAdapter, _
IconResource:="SQLIS.Dts.Pipeline.MyComponent.MyIcon.ico")> _
Public Class MyComponent
Inherits PipelineComponent
...
If you are still having problems getting your icon to be displayed
correctly, the first thing to check is the resource string. If it
still looks correct then you can take it one step further and look
inside the compiled assembly to find out what is really going on.
For this we need to use the MSIL Disassembler tool, ILDASM.exe.
For a further explanation of MSIL and the ILDASM tool refer to the Visual Studio
help system. For our purposes open a Visual Studio Command Prompt and
type ildasm. This opens the tool and you can then select your
assembly, through the File, Open menu options or just
drag and drop the file into the window. We are interested in the manifest
information, so double click the M A N I F E S T icon in the ILDASM window.
A new window will open displaying the manifest information. Scroll
down until you find the mresource directives, with are normally almost
at the end. If you have set your icon to be an embedded resource
correctly, then you will see the resource string which needs to match
what is set in the IconResource property of the component attribute.
A snippet of a manifest continuing with the sample scenario from above -
.mresource public SQLIS.Dts.Pipeline.MyComponent.MyIcon.ico
{
}
If the resource string looks wrong then check the namespace
in Project Properties, as this may differ from what
has been coded in your class files leading to the confusion.
To allow the designer to add your component to the toolbox you
will need to Reset Toolbox, available from the tool
box context menu, Right-click. If the component has
previously been added
the icon will not be updated without a second Reset Toolbox.
The design sheet icon will be updated just by restarting the
Business Intelligence Development Studio application.