Saturday, March 24, 2007
Yesterday Bela Feck & the Fleckstones presented @ Argentina with a spectacular show. I listened and saw one of the most spectacular bass player performance ever seen performed by Victor Lemonte Wooten
If you enjoy listening or playing the bass guitar (in all its forms: tapping, slapping/poping, fingering, etc etc etc etc) this guy is someone you must know and listen to!
By far, Victor was the most applauded artist in the shown so in that moment you don't know if the band should be called "Bela Fleck & the Fleckstones" or "Victor Wooten & the Wootenstones"!
Wednesday, March 21, 2007
One of the features SFT provides is support for Wix-based Setup projects. I will show how you can use and extend it to generate a MSI for your guidance package.
When you are creating a Guidance Package with SFT, you can choose to create a VS Setup Project or a Wix-based one as is shown in the following picture:
If you select the Wix-based option, the preview setup project will be unfolded in your solution.Let's take a look at the files that are generated by the wizard:
Setup.wxs: This is probably the most important file because it contains the setup product definition, the directory tree structure, the features (or the feature references), the custom actions for registering the guidance package and the UI definition.
TemplatesContent.wxs/TemplateFeature.wxs: Both files are dynamic, this means that their content of these files will be updated every time you build the Setup Project. They will included every file inside any folder in the guidance package project output directory.
UI.wxs: This contains the UI definition. This is probably the main file you will need to customize to include your own branding.
Strings.wxl: Wix localization stuff file.
MySoftwareFactoryInstaller.config.xml: Guidance Package configuration file. For instance here you can specify here the supported runtime version.
License\License.rtf: The license file for your Guidance Package.
Bitmaps Folder: Image files for the installer wizard branding.
How it works:
The SFT Wix-based project is a standard C# or VB project (depending on what language you choose when you are creating a new MetaFactory solution). It defines the AfterBuild/AfterRebuild targets and the following import:
<Import Project="$(MSBuildExtensionsPath)\Clarius Consulting\Software Factories Toolkit\1.0\MetaFactory\wix.targets" />
The wix.targets file contains the necessary targets to compile (Candle) and link (Light) your wix files in order to generate a MSI for your guidance package. Before that, the WixRefreshContent target is responsible for scanning all the directories in the output folder and updating the content of the TemplatesContent.wxs/TemplatesFeature files.
Customizing the Wix-based Setup Project:
There are some scenarios where you may want to customize the code that the SFT wizard generates for you. The most common scenarios could include:
- Changing the UI branding: You can modify the images in the Bitmaps folder by just overwriting them. You can also customize the Dialogs order, descriptions, colors, etc just editing the UI.wxs or Strings.wxl files.
- Adding dependencies: If you need to include more than the Guidance Package and Guidance Package Installer assemblies, you can add them in the Setup.wxs file just adding a <File> element inside an existing directory or you could even create your own new directory structure.
- Launch Conditions: If you Guidance Package will relies on some other software components that must be installed in the target machine, you can add Wix Launch Conditions in the Setup.wxs file.
I hope this post help you to understand the SFT Wix-based Setup Project structure, how it works and how you can easily customize it with a low effort. If you have any questions about this or other features in SFT you can visit the following sites/forums:
Clarius SFT Feb 2007 CTP is finally out!
The new release includes several new features and improvements. Jes has published a very interesting post describing some of them. You can also visit the SFT website to take a look at the latest videos, news, documentation, support and download it!
Some useful links:
SFT Home Page: http://softwarefactoriestoolkit.net
Tuesday, March 20, 2007
Sole will be taking part of the "Introduction to Windows Workflow Foundation" conference jointly with Diego Gonzalez and Jorge Fioranelli. You can check the detailed event information in Sole's blog. Here is the event summary:
When? April 12 from 9 to 13
Where? Bouchard 710, 4 piso, Buenos Aires, Argentina
How to sign up? Follow this link
What is it about?
“Between the new technologies included in the recently released .Net Framework 3.0, we found Windows Workflow Foundation, which consists on the most innovating tool set included in this new framework’s version. The possibility of extracting the workflow concept from the applications as a reusable and extensible element is an extremely innovating aspect in terms of application design. Tools are also included that let you visually edit workflows, enabling analysts and users without programming knowledge to extend applications with a minimum impact in the whole application.
The conference will consist on an introduction to the technology, showing its main characteristics, a demonstration of its more relevant advanced aspects, and will end with two examples of real projects where Windows Workflow Foundation has been used in combination with other technologies to solve common issues.”
This is the second part of this post. In this one I will tell you what you need to know when you are creating a new Provider (Typed or Untyped).
When you are creating a new provider for your own block you will have to specify many things (when a well known provider for an existent block is being created we already know the provider hierarchy so we don't need to ask you :)):
1. Provider Interface
2. Provider base class
3. Configuration class
There are basically two kinds of providers: Typed and Untyped.
Typed Providers: The typed providers have strongly typed configuration. This means that you have to specify every configuration property in the Configuration Class and Design-Time Class.
(1) and (2) could be the same but you will probably want to be different in order to separate the Interface from its implementation. The (3) is the base class for all configuration object in the same provider hierarchy. It provides the abstract message protocol to create specific configuration objects.
UnTyped Providers: All untyped providers have the same configuration class and it's based on key/value pairs (as strings). So the provider will receive a Name Value Collection and it will have to parse manually the values.
So if you want to create Providers with a very little effort you will probably need an Untyped Provider but if you want a fully design-time user experience you will need a Typed Provider.
Friday, March 16, 2007
Someone has left me a comment in my previous post about this topic asking for the code to take a look at the solution. So I think that instead of making you waiting for a detailed explanation of the solution you could take a look at it and see if it's useful for some specific scenarios you may be interested:
There is the code. The zip file contains the Proxy implementation, the JS function and the TypeDescriptor infrastructure you need to make the VAB get the html control value.
Of course this is draft code, and it's only for demo purposes. I hope you enjoy it and provide some feedback!
An example of how to use the Client Validation could be:
<asp:TextBox ID="TextBox1" runat="server" />
The example was taken from the Validation Quickstarts and you can realize that you only have to change the control declaration!! (PropertyProxyValidator -> ClientPropertyProxyValidator)
Tuesday, March 13, 2007
When you are creating a new VS .Net Add-in, you can optionally add a command in the "Tools" Command Bar. But what if you want to add your add-in in another command bar? Well, I didn't find a nice way to do that. What I needed was to add the a Command in the Refactor Command Bar (Menu and Context Menu) so what I was looking is the following result:
What you need to do is to use the "MenuBar" (the same that creates the Add-In wizard for the "Tools" Command Bar) and the "Other Context Menus" (this is the one you need to add the menu in the context menu).
here it's the (simplified) code fragment:
CommandBar menuBarCommandBar = ((CommandBars)_applicationObject.CommandBars)["MenuBar"];
CommandBar otherContextMenu = ((CommandBars)_applicationObject.CommandBars)["Other Context Menus"];
CommandBarControl refactorControl = menuBarCommandBar.Controls["Refactor"];
CommandBarPopup refactorPopup = (CommandBarPopup)refactorControl;
CommandBarControl refactorContextControl = otherContextMenu.Controls["Refactor"];
CommandBarPopup refactorContextPopup = (CommandBarPopup)refactorContextControl;
What I did to discover the "Other Context Menus" CommandBar name?... well take a look at this article: HOWTO: Guessing the name of a command bar to add a custom menu entry in Visual Studio .NET add-ins
Thursday, March 08, 2007
A few weeks ago I started to work on a prototype language service for Visual Studio. We want to try the new Managed Babel System... so what is that? Let's start describing the scenario: Suppose you have your own language and you want to integrate it into Visual Studio providing Syntax Coloring, Statement completion, error markers, etc. The VS SDK offers the MPF (Managed Package Framework) that provides a managed "easy" way to extend Visual Studio including support for language services.
And if you want to go a step further, you also have the Managed Babel System which lets you to specify a couple a files contaning the scanner and parser deifnition using LEX/YACC like syntax and tools (MPLEX, MPPG) to generate a lot of code you need to make the language service works.
These are the resources I found useful to start using these frameworks:
- VS SDK Documentation
- VS Extra Documentation: Managed Babel Overview, MPLEX and MPPG documents included in the VisualStudioIntegration\ExtraDocumentation directory (under your VS SDK installation directory)
- ManagedMyC sample: Included in the VS SDK samples.
- The Lex & Yacc Page
- Visual Studio Extensibility Forum