Adobe Flex Plugin For Visual Studio?
This is something we tend to be a bit sensitive about. Our Flex IDE, ’Amethyst’, isn’t just a plugin for Visual Studio. It is an entire package!
OK, so what’s the difference and why does it matter?
Let me explain. Visual Studio can be ‘extended’ in three different ways:
Add-ins (or plugins)
These go from very ‘lightweight’ extensions (macros) to the most profound integration (packages). Add-ins or plugins occupy the middle ground. Anyone can write simple macros using the Visual Studio (Visual Basic) macro language. These give you some quick, easy but not very extensive or efficient ways of automating simple tasks. Add-ins are a bit like compiled macros. They let you hook into Visual Studio features to automate tasks and, with some limitations, add extra capabilities. Add-ins are faster and more efficient than macros but they don’t let you get ‘right inside’ the Visual Studio IDE - and that is exactly what you need to do in order to provide the same degree of integration for 3rd party languages and frameworks (e.g. ActionScript/Flex, Ruby/Rails) as Microsoft provides for its own (C#, VB/.NET). In order to achieve that, you have to create a package.
You could think of a macro as a sticking plaster and an add-in as a course of antibiotics. But a package takes us into the realms of brain surgery. When you program a package you delve right into the core of Visual Studio. You are no longer restricted to automating existing features or the lightweight integration of your own tools. A package lets you poke about deep inside the VS code editor, the tool windows and toolbars. In fact, you can even create completely new windows and tools of considerable complexity (such as the Visual Rails Workbench in ‘Ruby In Steel’ and the Flex drag-and-drop designer for Amethyst Professional).
Dermot Hogan (Chief Architect of Amethyst/Ruby In Steel) has had his say on this in the past when he was explaining how we managed to integrate Ruby In Steel into the free ‘Shell Edition’ of Visual Studio...
”One of the things that isn’t often appreciated by Visual Studio users is that all products such as C#, C++ and VB are implemented as packages. And so is Ruby in Steel: it has exactly the same relation to Visual Studio as Microsoft’s C#, though unlike C#, RIS is written in C# (believe me, writing in a managed language is an order of magnitude faster than in an unmanaged one like C++). One of the things I find slightly irritating is to see RIS described as a ‘plug-in’. You don’t see C# or VB described as ‘plug-ins’!”
Visual Studio Shell and the Ruby In Steel Text Edition
In brief, to the end user, it probably doesn’t matter what the underlying technology is called. However, be aware that, in Visual Studio terms, an add-in or plugin is a completely different kettle of fish from a package. Both Ruby In Steel and Amethyst are ‘packages’.
For a more detailed explanation of Visual Studio Extensibility see:
Visual Studio Extensibility Demystified: Dr. eX’s Blog (MSDN)
Visual Studio Integration (by Dermot Hogan, Amethyst/Ruby In Steel Chief Architect (Bitwise Magazine