If you built the assembly in Visual Studio, the default namespace will have been prepended to the resource name. Load the assembly into ILDasm to see what the resource is actually called. By default the default namespace is the same as the project name and it's what your classes will have been placed in if you didn't change them. I.e. if your class files look like
using System.Windows.Forms;
namespace Shahzad.Controls {
class MyUserControl : UserControl {
...
}
}
... then the resource will probably be called 'Shahzad.Controls.MyIcon.icon'.
EDIT: The ToolboxBitmapAttribute also adds this namespace. So make sure that your class namespace is the same as the default namespace for the project.