<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Adrian Alonso</title><link>https://weblogs.asp.net:443/adalon/</link><description></description><item><title>How-to get the XML representacion of a DSL Model Element</title><link>https://weblogs.asp.net:443/adalon/how-to-get-the-xml-representacion-of-a-dsl-model-element</link><description>&lt;p&gt;Today I had to find out how to get the XML representacion of a DSL Model Element. Here you have an extension method for Model Elements (mels)&amp;nbsp;that gets the concrete serializer using the Domain XML Serializer Directory and the Domain Class Id of the target Model Element (mel).&lt;/p&gt;&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetXML(&lt;span class="kwrd"&gt;this&lt;/span&gt; ModelElement mel)
        {
            StringBuilder xml = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();
            
            DomainXmlSerializerDirectory directory = &lt;span class="kwrd"&gt;new&lt;/span&gt; DomainXmlSerializerDirectory();
            directory.AddBehavior(CoreDesignSurfaceSerializationBehavior.Instance);
            directory.AddBehavior(&amp;lt;#Yours DSL Serialization Behavior goes here #&amp;gt;.Instance);
            // Gets the serializer of the Mel&lt;/pre&gt;&lt;pre class="csharpcode"&gt;            DomainClassXmlSerializer serializer = directory.GetSerializer(mel.GetDomainClass().Id);

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (serializer != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlWriter writer = XmlWriter.Create(&lt;span class="kwrd"&gt;new&lt;/span&gt; StringWriter(xml)))
                {
                    serializer.Write(&lt;span class="kwrd"&gt;new&lt;/span&gt; SerializationContext(directory), mel, writer);
                }
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                Trace.TraceWarning(Resources.UnableToGetSerializer, mel.GetType().Name);
            }

            &lt;span class="kwrd"&gt;return&lt;/span&gt; xml.ToString();
        }
&lt;/pre&gt;&lt;pre class="csharpcode"&gt;HTH,&lt;/pre&gt;&lt;pre class="csharpcode"&gt;Adrian&lt;/pre&gt;</description><pubDate>Sun, 20 Apr 2008 15:59:07 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/how-to-get-the-xml-representacion-of-a-dsl-model-element</guid></item><item><title>Clarius T4 Editor is out!</title><link>https://weblogs.asp.net:443/adalon/clarius-t4-editor-is-out</link><description>&lt;p&gt;The beta version is available at &lt;a href="http://www.t4editor.net" title="http://www.t4editor.net" mce_href="http://www.t4editor.net"&gt;http://www.t4editor.net&lt;/a&gt;. You can go, download it and provide some feedback at the &lt;a href="http://forums.clariusconsulting.net/viewforum.php?f=9" mce_href="http://forums.clariusconsulting.net/viewforum.php?f=9"&gt;Clarius T4 Forum&lt;/a&gt;&amp;nbsp;which will be very valuable for us (Clarius) to prioritize the most important features for the RTM version!&lt;/p&gt; &lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/adalon/t4editor-banner.JPG" mce_src="https://aspblogs.blob.core.windows.net/media/adalon/Media/t4editor-banner.JPG"&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here is you have the&amp;nbsp; links:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.clariusconsulting.net/blogs/vga/archive/2007/10/18/35477.aspx" mce_href="http://www.clariusconsulting.net/blogs/vga/archive/2007/10/18/35477.aspx"&gt;Victor's officil announcement&lt;/a&gt; &lt;br&gt;&lt;a href="http://www.t4editor.net" mce_href="http://www.t4editor.net"&gt;Clarius T4 Editor Site&lt;/a&gt;&lt;br&gt;&lt;a href="http://forums.clariusconsulting.net/viewforum.php?f=9" mce_href="http://forums.clariusconsulting.net/viewforum.php?f=9"&gt;Clarius T4 Editor Forums&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.t4editor.net/downloads.html" mce_href="http://www.t4editor.net/downloads.html"&gt;Clarius T4 Editor Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Thanks!&amp;nbsp;&lt;/p&gt;</description><pubDate>Thu, 18 Oct 2007 11:56:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/clarius-t4-editor-is-out</guid></item><item><title>Clarius is Hiring!</title><link>https://weblogs.asp.net:443/adalon/clarius-is-hiring</link><description>&lt;p&gt;As &lt;a href="http://weblogs.asp.net/cibrax/"&gt;Pablo&lt;/a&gt; said in his &lt;a href="http://weblogs.asp.net/cibrax/archive/2007/10/17/clarius-is-hiring.aspx"&gt;post&lt;/a&gt; &lt;a href="http://www.clariusconsulting.net"&gt;Clarius&lt;/a&gt; is looking for candidates to fill Senior Dev Positions. You can check the details in &lt;a href="http://weblogs.asp.net/cibrax/archive/2007/10/17/clarius-is-hiring.aspx"&gt;Pablo's post&lt;/a&gt; too and if you are interested you can ping &lt;a href="http://weblogs.asp.net/cibrax/"&gt;Pablo&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/adalon/contact.aspx"&gt;me&lt;/a&gt; (alo&amp;nbsp;AT clariusconsulting&amp;nbsp;DOT net or through the &lt;a href="http://weblogs.asp.net/adalon/contact.aspx"&gt;contact form&lt;/a&gt; of this blog) or send your&amp;nbsp;resume directly to Clarius job alias (which you can find in &lt;a href="http://www.clariusconsulting.net"&gt;www.clariusconsulting.net&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Thanks!&lt;/p&gt;</description><pubDate>Wed, 17 Oct 2007 15:47:02 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/clarius-is-hiring</guid></item><item><title>runas cmd makes your life easier</title><link>https://weblogs.asp.net:443/adalon/runas-cmd-makes-your-life-easier</link><description>&lt;p&gt;This week I had to temporaly&amp;nbsp;use a different user on my machine. So at first I thought I had to move all my settings (outlook profile, firefox bookmarks, vms, etc)&amp;nbsp;from my primary user to this new one. This is not a nice task. Hopefully I remembered the &lt;a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/runas.mspx?mfr=true"&gt;runas&lt;/a&gt; command which allowed me to run the above programs (indeed I'm currently creating this post&amp;nbsp;running WLW&amp;nbsp;using&amp;nbsp;runas)&amp;nbsp;as my primary user from the new user&amp;nbsp;session. IMO this is definitily a very good tip if you have the same scenario in the feature.&lt;/p&gt;</description><pubDate>Thu, 27 Sep 2007 18:37:36 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/runas-cmd-makes-your-life-easier</guid><category>Miscellaneous</category></item><item><title>Read source code to be a better developer</title><link>https://weblogs.asp.net:443/adalon/read-source-code-to-be-a-better-developer</link><description>&lt;p&gt;I want to give it a try.&amp;nbsp;My idea is to take a look at one or two projects every week and post some conclusions of what I could learn of them. Here you have for example&amp;nbsp;the latest&amp;nbsp;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode6.aspx" mce_href="http://www.hanselman.com/blog/TheWeeklySourceCode6.aspx"&gt;Scott Hanselman's post&lt;/a&gt; showing his weekly results.&amp;nbsp;&amp;nbsp;So if you have in mind a really cool source code stuff, please&amp;nbsp;feel free to&amp;nbsp;ping me (leaving a comment to this post or using the contact me link) and let me know where I can get it!&amp;nbsp; Thanks!&lt;/p&gt;</description><pubDate>Wed, 26 Sep 2007 14:37:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/read-source-code-to-be-a-better-developer</guid><category>.NET</category><category>Java</category><category>Personal</category></item><item><title>Adding a custom VS Task List Token</title><link>https://weblogs.asp.net:443/adalon/adding-a-custom-vs-task-list-token</link><description>&lt;p&gt;You probably used the TODO task list token to add a comment about what it should be done. But what about if you want to use a custom token to add a different kind of comment; for example a Review(x) comment. VS allows you to add custom task list token via Tools-&amp;gt;Options-&amp;gt;Environment-&amp;gt;Task List as it's shown in the following screenshot:&lt;/p&gt; &lt;p&gt;&lt;img src="https://aspblogs.blob.core.windows.net/media/adalon/Media/tasklisttokens01.JPG"&gt; &lt;/p&gt; &lt;p&gt;So then you will able to add the Review comments and&amp;nbsp;these will be appearing in the Task List comments section:&lt;/p&gt; &lt;p&gt;&lt;img src="https://aspblogs.blob.core.windows.net/media/adalon/Media/tasklisttokens02.JPG"&gt;&lt;/p&gt;</description><pubDate>Tue, 11 Sep 2007 14:44:21 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/adding-a-custom-vs-task-list-token</guid><category>.NET</category><category>C#</category><category>Orcas</category><category>Visual Studio</category></item><item><title>TCI - Toolbox Controls Installer</title><link>https://weblogs.asp.net:443/adalon/tci-toolbox-controls-installer</link><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;TCI is a VS Package that is provided by the VS SDK as a redist. TCI allows you to easily add&amp;nbsp;your custom&amp;nbsp;Control to the VS Toolbox. For a brief introduction to TCI you can check the VS SDK documentation. Here I will try to cover what is happening under cover:  &lt;/p&gt;&lt;p&gt;When you want to add your custom control to the VS toolbox using the TCI VS Package all you need is to tell TCI where the assembly containing the control is and&amp;nbsp;notify&amp;nbsp;to TCI this event incrementing a registry key.&amp;nbsp;Probably the easier way to achieve these requirements is using a WIX-based installer (as the SDK sample does).  &lt;/p&gt;&lt;p&gt;In order to tell TCI where your control is&amp;nbsp;you can&amp;nbsp;use the&amp;nbsp;the fully qualified type name if you are installing the control in the GAC as following:  &lt;/p&gt;&lt;p&gt;&amp;lt;Registry Root="HKLM" Key="Software\Microsoft\VisualStudio\9.0\ToolboxControlsInstaller\GacControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1631b3e7a8fbcce5, processorArchitecture=MSIL" Value="Litware Controls" Type="string" /&amp;gt;  &lt;/p&gt;&lt;p&gt;Or provide a location where the assembly containing the control&amp;nbsp;is using the CodeBase value:  &lt;/p&gt;&lt;p&gt;&amp;lt;Registry Root="HKLM" Key="Software\Microsoft\VisualStudio\9.0\ToolboxControlsInstaller\NonGacControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1631b3e7a8fbcce5, processorArchitecture=MSIL" Value="Litware Controls" Type="string"&amp;gt;&lt;br&gt;&amp;lt;Registry Name="Codebase" Value="[#AssemblyContainingTheFile.dll]" Type="string" /&amp;gt;&lt;br&gt;&amp;lt;/Registry&amp;gt;  &lt;/p&gt;&lt;p&gt;Finally you have to include the MSM containing the custom actions which notify TCI that a new Control has been installed:  &lt;/p&gt;&lt;p&gt;&amp;lt;Merge Id="TbxCtrlsInstDefaultItemsCA" Language="1033" SourceFile="..\..\..\Redistributables\TbxCtrlsInstDefaultItemsCA.msm" DiskId="1" /&amp;gt;  &lt;/p&gt;&lt;p&gt;The custom action will increment or decrement the&amp;nbsp;"Default Items" value of the&amp;nbsp;following registry entry:  &lt;/p&gt;&lt;p&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Packages\{2c298b35-07da-45f1-96a3-be55d91c8d7a}\Toolbox]&lt;br&gt;"Default Items"=dword:00000001  &lt;/p&gt;&lt;p&gt;Note that&amp;nbsp;the&amp;nbsp;{2c298b35-07da-45f1-96a3-be55d91c8d7a} is the GUID for the TCI VS Package.  &lt;/p&gt;&lt;p&gt;It's important to check if the TCI Redist is already installed before installing your custom controls if you targeting VS 2500. It's not necessary for VS codename "Orcas" because&amp;nbsp;TCI Package is already installed. You can find the TCI VS Package in the VS's Private Assemblies directory.&amp;nbsp;  &lt;/p&gt;</description><pubDate>Fri, 07 Sep 2007 17:35:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/tci-toolbox-controls-installer</guid><category>.NET</category><category>ASP.NET</category><category>Orcas</category><category>Visual Studio</category><category>WIX</category></item><item><title>Why a good error message is important</title><link>https://weblogs.asp.net:443/adalon/why-a-good-error-message-is-important</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I was trying to change my private email in one of the forums I'm subscripted. The thing is that after clicking the save button it said:&lt;/p&gt; &lt;p&gt;&lt;em&gt;"Sorry, an Error has Occurred"&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;"Unfortunately an error has occurred during the processing of your page request. If&amp;nbsp;you were attempting to submit a new post, your post may not have been recorded. Please accept our apologies for the inconvenience."&lt;/em&gt;&lt;/p&gt; &lt;p&gt;And some links to go back, help, etc.&amp;nbsp;No helpful at all. I searched through the forum posts to find out if someone had has the same issue and I found that the private email address&amp;nbsp;couldn't be duplicated. In that moment I remembered I had another user with that address so I could take the steps to be able to change&amp;nbsp;it in a few seconds. If the error message had been something like "The email address is being used by another user. Please choose a different mail and try again" it would be a significant save of time. &lt;/p&gt; &lt;p&gt;The cause of the error is probably&amp;nbsp;due to&amp;nbsp;they are not&amp;nbsp;validating the email address, so after receiving the generic sql error they show the generic (not useful at all) "Sorry, and Error has Occurred".&amp;nbsp;&lt;/p&gt;</description><pubDate>Mon, 27 Aug 2007 17:41:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/why-a-good-error-message-is-important</guid><category>.NET</category><category>ASP.NET</category></item><item><title>"Organize Usings" in VS code name "Orcas" ala Eclipse</title><link>https://weblogs.asp.net:443/adalon/quot-organize-usings-quot-in-vs-code-name-quot-orcas-quot-ala-eclipse</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Those that have used Eclipse will probably miss the ctrl+shift+o shortcut ("Organize Imports") when you switch to VS. But now VS code name "Orcas"&amp;nbsp;provides a "new" feature (which&amp;nbsp;unofficially existed in Whidbey)&amp;nbsp;that allows you to remove and sort usings:&lt;/p&gt; &lt;p&gt;&lt;img src="http://blog-adrianalonso.certant.com/blog/sortandremove01.JPG"&gt; &lt;/p&gt; &lt;p&gt;So if you don't want miss the Eclipse feature anymore you can add the shortcut going to Tools-&amp;gt;Options-&amp;gt;Environment-&amp;gt;Keyboard&lt;/p&gt; &lt;p&gt;&lt;img src="http://blog-adrianalonso.certant.com/blog/sortandremove02.JPG"&gt; &lt;/p&gt; &lt;p&gt;Search the RemoveAndSort command and press the ctrl+shift+o combination. Note that the shorcut is&amp;nbsp;currently used by the OpenProject command and it will lost if&amp;nbsp;you&amp;nbsp;confirm to use the combination&amp;nbsp;for the RemoveAndSort command.&amp;nbsp;&lt;/p&gt;</description><pubDate>Thu, 16 Aug 2007 00:56:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/quot-organize-usings-quot-in-vs-code-name-quot-orcas-quot-ala-eclipse</guid><category>.NET</category><category>Orcas</category><category>Refactoring</category></item><item><title>GAX 1.3 is out!</title><link>https://weblogs.asp.net:443/adalon/gax-1-3-is-out</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This new version of GAX is a must if you are thinking to develop Guidance Packages&amp;nbsp;using&amp;nbsp;VS Codename "Orcas" (previous version of GAX didn't work&amp;nbsp;with the latest version of VS) and it will also provide some new features if your are developing with VS 2005.&lt;/p&gt; &lt;p&gt;A&amp;nbsp;welcomed “fix” is the&amp;nbsp;enhancement of the&amp;nbsp;registration process. Now it's&amp;nbsp;smarter&amp;nbsp;about&amp;nbsp;whether to install VB templates&amp;nbsp;based on the presence of VB as a Visual Studio's product.&amp;nbsp;This means that&amp;nbsp;if your Guidance Package contains VB templates (.vstemplates for VB projects or items) you won't need to&amp;nbsp;add conditional logic in your installer to avoid the registration failure when the package is being installed or registered.  &lt;p&gt;The GAX installer is also improved to use WIX technology but&amp;nbsp;the GAT installer project that is unfolded when you create a new Guidance Package using GAT is still the same VS Setup Project.  &lt;p&gt;At last, the Experimental Hive registration is now a built-in feature in GAX allowing you to register your Guidance Packages in both Normal and Experimental hives.  &lt;p&gt;So it seems that this CTP is a&amp;nbsp;necessary and welcomed&amp;nbsp;update&amp;nbsp;for the runtime but not for the UX of developing Guidance Packages.  &lt;p&gt;Here you have the links:  &lt;p&gt;- &lt;a href="http://blogs.msdn.com/agile/archive/2007/08/02/new-gax-gat-july-2007-released.aspx"&gt;Grigory Melnik's announcement&lt;/a&gt;&lt;br&gt;- &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en"&gt;GAX July 2007 CTP download&lt;/a&gt;&lt;br&gt;- &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en"&gt;GAT July 2007 CTP&amp;nbsp;download&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 06 Aug 2007 01:01:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/gax-1-3-is-out</guid><category>.NET</category><category>GAT</category><category>GAX</category><category>Orcas</category><category>Visual Studio</category><category>WIX</category></item><item><title>Microsoft Volta</title><link>https://weblogs.asp.net:443/adalon/microsoft-volta</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;What&amp;nbsp;Microsoft Volta is? Take a look at these videos in &lt;a href="http://channel9.msdn.com/"&gt;channel 9&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;1. &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=324060"&gt;Eirk Meijer: Volta - Wrapping the Cloud with .NET - Part 1&lt;/a&gt;&lt;br&gt;2. &lt;a href="http://channel9.msdn.com/Showpost.aspx?postid=324699"&gt;Eirk Meijer: Volta - Wrapping the Cloud with .NET - Part 2&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;From the video introduction:&lt;/p&gt; &lt;p&gt;&lt;em&gt;"Volta is an evolving research project focused on exploring ways to innovate data-intensive programming models. Volta is currently exploring a lean-programming inspired toolkit for building web-based and mobile applications by stretching the .NET programming model to cover the Cloud. &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Volta is exploring innovation that empowers programmers to delay decisions about tier-splitting to the last possible responsible moment by using either code refactoring or declarative annotations. "&lt;/em&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;</description><pubDate>Wed, 01 Aug 2007 21:51:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/microsoft-volta</guid><category>.NET</category><category>Volta</category></item><item><title>SFT Setup Project: Deploying many Guidance Packages and many DSLs with a single MSI!</title><link>https://weblogs.asp.net:443/adalon/sft-setup-project-deploying-many-guidance-packages-and-many-dsls-with-a-single-msi</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.softwarefactoriestoolkit.net/"&gt;Clarius SFT June CTP&lt;/a&gt;&amp;nbsp;is available. You can check &lt;a href="http://www.clariusconsulting.net/blogs/vga"&gt;Victor's blog&lt;/a&gt;&amp;nbsp;in order to get an overview of&amp;nbsp;the new features included in this drop. One of this new features is the capability of creating a Setup Project to generate a single MSI that installs many Guidance Packages and many DSLs. Let's take a look at how this feature works:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;SFT Setup Project Feature:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This new feature allows you to create a new C# or VB wix-based&amp;nbsp;project selecting which Guidance Packages or DSLs you want to include in your&amp;nbsp;MSI. After running the wizard you will get a single project&amp;nbsp;whose output&amp;nbsp;will be&amp;nbsp;a single MSI.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Here is an example:&lt;/em&gt;&lt;/p&gt; &lt;p&gt;1. In this sample we have a&amp;nbsp;solution that contains the following projects: &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;a. A class diagram DSL project&lt;br&gt;b.&amp;nbsp;A minimal language DSL project&lt;br&gt;c.&amp;nbsp;A GAT-based Guidance Package&lt;br&gt;d. A SFT-based Guidance Package&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The SFT Setup Project wizard is launched adding a new project to the solution. You can select between C# and VB project types. &lt;/p&gt; &lt;p&gt;&lt;img src="http://blog-adrianalonso.certant.com/blog/sftsetupproject01.jpg"&gt; &lt;/p&gt; &lt;p&gt;2. The wizard is very simple. You just need to select the guidance packages and DSLs that will be included in the MSI and click finish.&lt;/p&gt; &lt;p&gt;&lt;img src="http://blog-adrianalonso.certant.com/blog/sftsetupproject02.JPG"&gt; &lt;/p&gt; &lt;p&gt;3. Finally a new project will be added to the solution. At this point you should be able to build the project in order to get the MSI.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;img src="http://blog-adrianalonso.certant.com/blog/sftsetupproject03.JPG"&gt; &lt;/p&gt; &lt;p&gt;Basically&amp;nbsp;you will find&amp;nbsp;3 groups of files in the SFT Setup Project:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;1. Main Setup files&lt;br&gt;2. Guidance Packages files: Containg a few files by Guidance Package. You can take a look at my previous post&amp;nbsp;showing how&amp;nbsp;each Guidance Package setup is generated.&amp;nbsp;&lt;br&gt;3. DSLs files:&amp;nbsp;Each DSL setup is generated in the same way&amp;nbsp;as the DSL Setup Project provided by the DSL SDK does. We chose this implementation&amp;nbsp;because if you&amp;nbsp;already know how to customize the DSL Setup Project you won't need to expend time understanding this new feature of SFT!&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;(1)&amp;nbsp;Main Setup Files:&lt;br&gt;&lt;/strong&gt;&lt;strong&gt;SetupMetadata.items:&lt;/strong&gt; This is the file where you can customize the metadata for Guidance Packages, DSLs and define&amp;nbsp;the projects that will be built before&amp;nbsp;generating the MSI.&amp;nbsp;&lt;br&gt;&lt;strong&gt;Setup.wxs:&lt;/strong&gt; This is probably the most important file because it contains the setup product definition, the directory tree structure, the features (or the feature references), custom actions and the UI definition.&lt;br&gt;&lt;strong&gt;UI.wxs:&lt;/strong&gt; This contains the UI definition. This is probably the main file you will&amp;nbsp;need to customize to include your own branding.&lt;br&gt;&lt;strong&gt;Strings.wxl:&lt;/strong&gt; Wix localization stuff file.&lt;br&gt;&lt;strong&gt;License\License.rtf:&lt;/strong&gt; The license file&amp;nbsp;for your Guidance Package.&lt;br&gt;&lt;strong&gt;Bitmaps Folder:&lt;/strong&gt; Image files&amp;nbsp;for the installer wizard branding.&lt;/p&gt; &lt;p&gt;Where to&amp;nbsp;download SFT?&amp;nbsp;Follow this link! &amp;nbsp;&lt;a title="http://www.softwarefactoriestoolkit.net/" href="http://www.softwarefactoriestoolkit.net/"&gt;http://www.softwarefactoriestoolkit.net/&lt;/a&gt;&lt;br&gt;And please let us know your feedback about you want to include&amp;nbsp;or&amp;nbsp;improve in the next drops!&amp;nbsp;You can ping us&amp;nbsp;through the &lt;a href="http://www.guidanceautomation.net/cs/forums/"&gt;Guidance Automation Forum&lt;/a&gt; or directly to alo -AT- clariusconsulting -DOT- net.&lt;/p&gt;</description><pubDate>Thu, 07 Jun 2007 12:27:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/sft-setup-project-deploying-many-guidance-packages-and-many-dsls-with-a-single-msi</guid><category>.NET</category><category>Clarius</category><category>Clarius SFT</category><category>DSL</category><category>GAT</category><category>GAX</category><category>Visual Studio</category><category>WIX</category></item><item><title>HowTo: Application Block Software Factory (ABSF) Part III: An example</title><link>https://weblogs.asp.net:443/adalon/howto-application-block-software-factory-absf-part-iii-an-example</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;After an &lt;a href="http://adrianalonso.blogspot.com/2007/02/howto-application-block-software.html"&gt;introduction&lt;/a&gt; to ABSF and a explanation about &lt;a href="http://adrianalonso.blogspot.com/2007/03/howto-application-block-software.html"&gt;providers&lt;/a&gt;, here you have an example of how an application block and a provider library&amp;nbsp;can be&amp;nbsp;created. What I did was to take snapshots of the solution after executing each recipe:&lt;/p&gt; &lt;p&gt;1. New Animal Application Block&lt;br&gt;2. New Provider Factory and Base 'Animal'&lt;br&gt;3. New Provider (Typed) 'Dog'&lt;br&gt;4. New Provider (Untyped) 'Monkey'&lt;br&gt;5. New Design-Time Base Provider Node 'AnimalNode'&lt;br&gt;6. New Design-Time Provider Node 'DogNode'&lt;br&gt;7. New Provider Library&lt;br&gt;8. New Provider (Typed) 'Cat'&lt;br&gt;9. New Design-Time Provider Node 'CatNode'&lt;/p&gt; &lt;p&gt;The example is based on the Animal Application Block of &lt;a href="http://www.agileprogrammer.com/oneagilecoder/"&gt;Brian Button&lt;/a&gt;. Brian and &lt;a href="http://blogs.msdn.com/tomholl"&gt;Tom&lt;/a&gt; did a series of&amp;nbsp;webcasts explaining the Entlib Core and Design-Time&amp;nbsp;creating an Animal Application Block. You can download the&amp;nbsp;webcasts from &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032289570&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;here&lt;/a&gt; and &lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032291157&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The idea is that you can open each snapshot and take a look at what stuff is created after executing each recipe. In order to build the snapshots, you will have to copy the Common.dll, Configuration.Design.dll and ObjectBuilder.dll to the lib folder of each snapshot. I recommend you to unzip the snapshots in a directory near the root (c:\) because of the&amp;nbsp;path length restriction (you won't be able to build the snapshots&amp;nbsp;if the path is longer than 248 characters)&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Finally here you have the link to the&amp;nbsp;&lt;a href="http://blog-adrianalonso.certant.com/blog/Animal Application Block and Library.zip"&gt;snapshots&lt;/a&gt;!&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;</description><pubDate>Wed, 11 Apr 2007 01:18:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/howto-application-block-software-factory-absf-part-iii-an-example</guid><category>.NET</category><category>Application Block Software Factory</category><category>Entlib</category><category>pattern amp; practices</category></item><item><title>Enterprise Library 3.0 Released!</title><link>https://weblogs.asp.net:443/adalon/enterprise-library-3-0-released</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I've been part of this&amp;nbsp;excited project mostly developing the Application Block Software Factory (ABSF) and some parts of the Validation Application Block (VAB) (which core and intergation support&amp;nbsp;was developed by &lt;a href="http://www.clariusconsulting.net/blogs/fds"&gt;Fernando&lt;/a&gt;). I want to thanks all to let me be part of this great experience and learn&amp;nbsp;a lot from this spectacular people.&amp;nbsp;&lt;/p&gt; &lt;p&gt;You can download it, start using it and provide feedback! Here you have the links:&lt;/p&gt; &lt;p&gt;Download: &lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=62ef5f79-daf2-43af-9897-d926f03b9e60&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=62ef5f79-daf2-43af-9897-d926f03b9e60&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=62ef5f79-daf2-43af-9897-d926f03b9e60&amp;amp;displaylang=en&lt;/a&gt;&lt;br&gt;Codeplex community site: &lt;a title="http://www.codeplex.com/entlib" href="http://www.codeplex.com/entlib"&gt;http://www.codeplex.com/entlib&lt;/a&gt;&lt;br&gt;Tom Hollander's Blog: &lt;a title="http://blogs.msdn.com/tomholl/" href="http://blogs.msdn.com/tomholl/"&gt;http://blogs.msdn.com/tomholl/&lt;/a&gt;&lt;br&gt;Olaf's Blog: &lt;a href="http://bloggingabout.net/blogs/olaf"&gt;http://bloggingabout.net/blogs/olaf&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;</description><pubDate>Fri, 06 Apr 2007 14:39:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/enterprise-library-3-0-released</guid><category>.NET</category><category>Entlib</category><category>pattern amp; practices</category></item><item><title>.Net Generic Finder (VS Automation Model Usage)</title><link>https://weblogs.asp.net:443/adalon/net-generic-finder-vs-automation-model-usage</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I know there are Find/FindAll methods in&amp;nbsp;the System.Collection.* namespace but what I was looking for is something quite different. Here is more&amp;nbsp;or less&amp;nbsp;the scenario:&lt;/p&gt; &lt;p&gt;Suppose you have objects&amp;nbsp;that can be any of the following interfaces: Solution (S), Project (P)&amp;nbsp;or ProjectItem (PI). You don't have a common super type to treat all as&amp;nbsp;polymorphic objects.&amp;nbsp;So if you have a collection of them (Objects)&amp;nbsp;you are not able to have&amp;nbsp;Collection&amp;lt;T&amp;gt; where T is { S | P | PI } because you could have a mix of them (of course at least you have a Collection&amp;lt;Object&amp;gt; but in this&amp;nbsp;case we would not need Generics anyway).&lt;/p&gt; &lt;p&gt;I wanted a finder that allows me to search for an object in&amp;nbsp;this object&amp;nbsp;collection but using the benefits of Generics. I wanted to use&amp;nbsp;the most abstract representation of a collection I could have and I decided to use an IEnumerable parameter. Then I needed to define a Predicate&amp;lt;T&amp;gt; and&amp;nbsp;what I am going to&amp;nbsp;expect is&amp;nbsp;a T or&amp;nbsp;IEnumerable&amp;lt;T&amp;gt;&amp;nbsp;result.&lt;/p&gt; &lt;p&gt;For example:&amp;nbsp;If the&amp;nbsp;&lt;strong&gt;col&lt;/strong&gt; is&amp;nbsp;= {&amp;nbsp;S1, P1,&amp;nbsp;P2, P3, PI1, PI2, PI3 }&lt;/p&gt; &lt;p&gt;The following tests should pass:&lt;/p&gt; &lt;p&gt;1.&amp;nbsp;Finder.FindAll&amp;lt;&lt;strong&gt;Solution&lt;/strong&gt;&amp;gt;(&lt;strong&gt;col&lt;/strong&gt;, delegate( return Predicates.&lt;em&gt;GetNullPredicate&lt;/em&gt;&amp;lt;T&amp;gt;())) &lt;strong&gt;contains&lt;/strong&gt; {&lt;em&gt;S1&lt;/em&gt;}&lt;br&gt;2.&amp;nbsp;Finder.FindAll&amp;lt;&lt;strong&gt;Project&lt;/strong&gt;&amp;gt;(&lt;strong&gt;col&lt;/strong&gt;, delegate( return Predicates.&lt;em&gt;GetNullPredicate&lt;/em&gt;&amp;lt;T&amp;gt;())) &lt;strong&gt;contains&lt;/strong&gt; {&lt;em&gt;P1, P2, P3&lt;/em&gt;}&lt;br&gt;3.&amp;nbsp;Finder.FindAll&amp;lt;&lt;strong&gt;ProjectItem&lt;/strong&gt;&amp;gt;(&lt;strong&gt;col&lt;/strong&gt;, delegate( return Predicates.&lt;em&gt;GetNullPredicate&lt;/em&gt;&amp;lt;T&amp;gt;())) &lt;strong&gt;contains&lt;/strong&gt; {&lt;em&gt;PI1, PI2, PI3&lt;/em&gt;}&lt;/p&gt; &lt;p&gt;So I am&amp;nbsp;able to&amp;nbsp;get a IEnumerable&amp;lt;T&amp;gt; where T is { S | P | PI }. I could also specify&amp;nbsp;any other&amp;nbsp;predicate to&amp;nbsp;evaluate specific properties of each T. Notice that I am using the Predicates.Is&amp;lt;T&amp;gt; helper method I published in my &lt;a href="http://adrianalonso.blogspot.com/2007/04/andoris-predicates.html"&gt;previous post&lt;/a&gt; to validate if the predicate can be evaluated. I am also using the &lt;strong&gt;yield&lt;/strong&gt; support to collect the result.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Finder&lt;br&gt;{&lt;br&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; T Find&amp;lt;T&amp;gt;(IEnumerable elements, Predicate&amp;lt;T&amp;gt; predicate) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;br&gt;    {&lt;br&gt;        IEnumerator&amp;lt;T&amp;gt; enumerator = Find(elements, predicate, &lt;span class="kwrd"&gt;true&lt;/span&gt;).GetEnumerator();&lt;br&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; enumerator.MoveNext() ? enumerator.Current : &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; FindAll&amp;lt;T&amp;gt;(IEnumerable elements, Predicate&amp;lt;T&amp;gt; predicate) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;br&gt;    {&lt;br&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; Find&amp;lt;T&amp;gt;(elements, predicate, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; Find&amp;lt;T&amp;gt;(IEnumerable elements, Predicate&amp;lt;T&amp;gt; predicate, &lt;span class="kwrd"&gt;bool&lt;/span&gt; returnFirst) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;br&gt;    {&lt;br&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;null&lt;/span&gt; != elements)&lt;br&gt;        {&lt;br&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt; element &lt;span class="kwrd"&gt;in&lt;/span&gt; elements)&lt;br&gt;            {&lt;br&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (Predicates.Is&amp;lt;T&amp;gt;(element, predicate))&lt;br&gt;                {&lt;br&gt;                    &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; (T)element;&lt;br&gt;                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (returnFirst) &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;        &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;br&gt;    }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;</description><pubDate>Wed, 04 Apr 2007 22:04:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/net-generic-finder-vs-automation-model-usage</guid><category>.NET</category><category>C#</category></item><item><title>And/Or/Is Predicates</title><link>https://weblogs.asp.net:443/adalon/and-or-is-predicates</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The .Net fx doesn't have any support to compose Predicates so I decided to create a Predicates helper for a small project I was working on the last weeks. Here you have my composite&amp;nbsp;predicate methods:&lt;/p&gt;&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Predicates&lt;br&gt;    {&lt;br&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Predicate&amp;lt;T&amp;gt; And&amp;lt;T&amp;gt;(Predicate&amp;lt;T&amp;gt; predicate, Predicate&amp;lt;T&amp;gt; anotherPredicate)&lt;br&gt;        {&lt;br&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(T t) { &lt;span class="kwrd"&gt;return&lt;/span&gt; predicate(t) &amp;amp;&amp;amp; anotherPredicate(t); };&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Predicate&amp;lt;T&amp;gt; Or&amp;lt;T&amp;gt;(Predicate&amp;lt;T&amp;gt; predicate, Predicate&amp;lt;T&amp;gt; anotherPredicate)&lt;br&gt;        {&lt;br&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(T t) { &lt;span class="kwrd"&gt;return&lt;/span&gt; predicate(t) || anotherPredicate(t); };&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Is&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; target, Predicate&amp;lt;T&amp;gt; predicate) &lt;span class="kwrd"&gt;where&lt;/span&gt; T : &lt;span class="kwrd"&gt;class&lt;/span&gt;&lt;br&gt;        {&lt;br&gt;            T targetAsT = target &lt;span class="kwrd"&gt;as&lt;/span&gt; T;&lt;br&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; ( &lt;span class="kwrd"&gt;null&lt;/span&gt; != targetAsT  )&lt;br&gt;            {&lt;br&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; predicate(targetAsT);&lt;br&gt;            }&lt;br&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Predicate&amp;lt;T&amp;gt; GetNullPredicate&amp;lt;T&amp;gt;()&lt;br&gt;        {&lt;br&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(T t) { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; }; &lt;br&gt;        }&lt;br&gt;    }&lt;/pre&gt;&lt;br&gt;
&lt;p&gt;The Is&amp;lt;T&amp;gt; method allows you to validate if the target object is of T type before evaluating the predicate. This is something I found very useful when I am working with VS Automation Model because there are "Objects" that can implement many many interfaces so you have a collection of those objects that may or not target the T type. I will publish another post with a Finder example.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;</description><pubDate>Wed, 04 Apr 2007 21:20:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/and-or-is-predicates</guid><category>.NET</category><category>C#</category></item><item><title>Bela Fleck &amp; the Fleckstones @ Argentina! (or it could has been Victor Wooten &amp; the Wootenstones)</title><link>https://weblogs.asp.net:443/adalon/bela-fleck-amp-the-fleckstones-argentina-or-it-could-has-been-victor-wooten-amp-the-wootenstones</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Yesterday &lt;a href="http://www.flecktones.com/site.php"&gt;Bela Feck &amp;amp; the Fleckstones&lt;/a&gt;&amp;nbsp;presented @ Argentina with a spectacular&amp;nbsp;show. I listened and saw one of the most spectacular bass player performance ever seen performed&amp;nbsp;by &lt;a href="http://www.victorwooten.com/"&gt;Victor Lemonte Wooten&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://blog-adrianalonso.certant.com/blog/victorwooten.jpg"&gt; &lt;/p&gt; &lt;p&gt;If you&amp;nbsp;enjoy listening&amp;nbsp;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!&amp;nbsp;&lt;/p&gt; &lt;p&gt;By far, Victor was the&amp;nbsp;most&amp;nbsp;applauded artist in the shown so in that moment you don't know if the band should be called "Bela Fleck &amp;amp; the Fleckstones" or "Victor Wooten &amp;amp; the Wootenstones"!&lt;/p&gt;</description><pubDate>Sat, 24 Mar 2007 12:07:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/bela-fleck-amp-the-fleckstones-argentina-or-it-could-has-been-victor-wooten-amp-the-wootenstones</guid><category>Personal</category></item><item><title>Clarius SFT - Wix-based Setup Projects</title><link>https://weblogs.asp.net:443/adalon/clarius-sft-wix-based-setup-projects</link><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;One of the features SFT provides is&amp;nbsp;support for&amp;nbsp;Wix-based Setup projects. I&amp;nbsp;will show how you can use and extend it to generate a&amp;nbsp;MSI for your guidance package.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Wix-based Setup&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;When you are creating a Guidance Package with SFT, you can&amp;nbsp;choose to&amp;nbsp;create a VS Setup Project or a Wix-based one as is shown in the following picture:&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;img src="http://blog-adrianalonso.certant.com/blog/sft.JPG"&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;If you select the Wix-based option, the preview setup&amp;nbsp;project will be unfolded in your solution.Let's take a look at the files that are generated by the wizard:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Setup.wxs:&lt;/strong&gt; 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.&lt;br&gt;&lt;strong&gt;TemplatesContent.wxs/TemplateFeature.wxs:&lt;/strong&gt; Both files&amp;nbsp;are dynamic, this means that their content of&amp;nbsp;these files will be updated&amp;nbsp;&amp;nbsp;every time you build the Setup Project. They will included every file inside&amp;nbsp;any folder in the guidance package project&amp;nbsp;output directory.&amp;nbsp;&lt;br&gt;&lt;strong&gt;UI.wxs:&lt;/strong&gt; This contains the UI definition. This is probably the main file you will&amp;nbsp;need to customize to include your own branding.&lt;br&gt;&lt;strong&gt;Strings.wxl:&lt;/strong&gt; Wix localization stuff file.&lt;br&gt;&lt;strong&gt;MySoftwareFactoryInstaller.config.xml:&lt;/strong&gt; Guidance Package configuration file. For instance here&amp;nbsp;you can specify here the supported runtime version.&lt;br&gt;&lt;strong&gt;License\License.rtf:&lt;/strong&gt; The license file&amp;nbsp;for your Guidance Package.&lt;br&gt;&lt;strong&gt;Bitmaps Folder:&lt;/strong&gt; Image files&amp;nbsp;for the installer wizard branding.&lt;/p&gt; &lt;p&gt;&lt;em&gt;How it works:&lt;/em&gt;&lt;/p&gt; &lt;p&gt;The SFT Wix-based project is&amp;nbsp;a standard C# or VB&amp;nbsp;project (depending on what language you choose when you are creating a new MetaFactory solution).&amp;nbsp;It defines the AfterBuild/AfterRebuild targets and&amp;nbsp;the following import:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;font size="2"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Import&lt;/span&gt; &lt;span class="attr"&gt;Project&lt;/span&gt;&lt;span class="kwrd"&gt;="$(MSBuildExtensionsPath)\Clarius Consulting\Software Factories Toolkit\1.0\MetaFactory\wix.targets"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br&gt;
&lt;p&gt;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. &lt;br&gt;
&lt;p&gt;&lt;em&gt;Customizing the Wix-based Setup Project:&lt;/em&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;There are some scenarios where you may want to customize the code that the SFT wizard generates&amp;nbsp;for you. The most common scenarios&amp;nbsp;could include:&lt;/p&gt;&lt;br&gt;
&lt;ul&gt;&lt;br&gt;
&lt;li&gt;Changing the UI branding: You can&amp;nbsp;modify the images in the Bitmaps folder by&amp;nbsp;just overwriting them. You can also&amp;nbsp;customize the Dialogs order, descriptions, colors, etc just editing the&amp;nbsp;UI.wxs or Strings.wxl files. &lt;br&gt;
&lt;li&gt;Adding dependencies: If you need to&amp;nbsp;include more than the Guidance Package and Guidance Package Installer assemblies, you can add them in the Setup.wxs file just adding a &amp;lt;File&amp;gt; element inside an existing directory&amp;nbsp;or you could even create&amp;nbsp;your own new&amp;nbsp;directory structure.&amp;nbsp; &lt;br&gt;
&lt;li&gt;Launch Conditions: If you Guidance Package will relies on some&amp;nbsp;other software components that must be installed in the target machine, you can add Wix Launch Conditions in the Setup.wxs file.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;
&lt;p&gt;I hope this post help you to understand the SFT Wix-based Setup Project structure, how it works and how&amp;nbsp;you can easily customize it with a&amp;nbsp;low effort. If you have any questions about this or other features in SFT you can visit the following sites/forums:&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Guidance Automation.Net: &lt;a href="http://www.guidanceautomation.net"&gt;http://www.guidanceautomation.net&lt;/a&gt;&lt;br&gt;SFT: &lt;a title="http://www.softwarefactoriestoolkit.com/" href="http://www.softwarefactoriestoolkit.com/"&gt;http://www.softwarefactoriestoolkit.com/&lt;/a&gt;&lt;/p&gt;&lt;br&gt;
&lt;p&gt;Enjoy!&amp;nbsp;&lt;/p&gt;</description><pubDate>Thu, 22 Mar 2007 01:37:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/clarius-sft-wix-based-setup-projects</guid><category>.NET</category><category>Clarius</category><category>Clarius SFT</category><category>GAX</category><category>Visual Studio</category><category>WIX</category></item><item><title>Clarius Software Factories Toolkit (SFT) February 2007 CTP is out!!</title><link>https://weblogs.asp.net:443/adalon/clarius-software-factories-toolkit-sft-february-2007-ctp-is-out</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Clarius SFT Feb 2007 CTP is finally out!&lt;/p&gt; &lt;p&gt;The new release includes several&amp;nbsp;new features and improvements. &lt;a href="http://latincoder.com/cs2/blogs/jes/archive/2007/03/21/Clarius-Software-Factory-Toolkit-February-2007-CTP-is-out_2E00_.aspx"&gt;Jes&lt;/a&gt; has published a very interesting post describing some of them. You can also visit the SFT &lt;a href="http://softwarefactoriestoolkit.net/"&gt;website&lt;/a&gt; to take a look at the latest &lt;a href="http://softwarefactoriestoolkit.net/videos.aspx"&gt;videos&lt;/a&gt;, &lt;a href="http://softwarefactoriestoolkit.net/default.aspx"&gt;news&lt;/a&gt;, &lt;a href="http://softwarefactoriestoolkit.net/downloads.aspx"&gt;documentation&lt;/a&gt;, &lt;a href="http://softwarefactoriestoolkit.net/support.aspx"&gt;support&lt;/a&gt; and &lt;a href="http://softwarefactoriestoolkit.net/downloads.aspx"&gt;download it&lt;/a&gt;!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Some useful&amp;nbsp;links:&lt;br&gt;&lt;/strong&gt;SFT Home Page: &lt;a href="http://softwarefactoriestoolkit.net"&gt;http://softwarefactoriestoolkit.net&lt;/a&gt;&lt;br&gt;Support: &lt;a href="http://softwarefactoriestoolkit.net/support.aspx"&gt;http://softwarefactoriestoolkit.net/support.aspx&lt;/a&gt;&lt;br&gt;Download: &lt;a href="http://softwarefactoriestoolkit.net/Download_Feb07CTP.aspx"&gt;http://softwarefactoriestoolkit.net/Download_Feb07CTP.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;</description><pubDate>Wed, 21 Mar 2007 20:07:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/clarius-software-factories-toolkit-sft-february-2007-ctp-is-out</guid><category>.NET</category><category>Clarius SFT</category><category>WIX</category></item><item><title>Windows Workflow Foundation @ MS Argentina</title><link>https://weblogs.asp.net:443/adalon/windows-workflow-foundation-ms-argentina</link><description>&lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;This post was originally published at &lt;/font&gt;&lt;/em&gt;&lt;a href="http://adrianalonso.blogspot.com"&gt;&lt;em&gt;&lt;font color="#808080"&gt;http://adrianalonso.blogspot.com&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://solepano.blogspot.com/"&gt;Sole&lt;/a&gt; will be taking part of the "Introduction to Windows Workflow Foundation" conference&amp;nbsp;jointly with Diego Gonzalez and Jorge Fioranelli. You can check the detailed event information in&amp;nbsp;&lt;a href="http://solepano.blogspot.com/"&gt;Sole's blog&lt;/a&gt;. Here is the&amp;nbsp;event summary:&lt;/p&gt; &lt;p&gt;When? &lt;strong&gt;April 12 from 9 to 13&lt;br&gt;&lt;/strong&gt;Where? &lt;strong&gt;Bouchard 710, 4 piso,&amp;nbsp; Buenos Aires, Argentina&lt;br&gt;&lt;/strong&gt;How to sign up? Follow this &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032334436&amp;amp;Culture=es-AR"&gt;link&lt;/a&gt;&lt;br&gt;What is it about?&lt;/p&gt; &lt;p&gt;&lt;em&gt;“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.&lt;/em&gt;  &lt;p&gt;&lt;em&gt;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.”&lt;/em&gt;&lt;/p&gt;</description><pubDate>Tue, 20 Mar 2007 19:48:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adalon/windows-workflow-foundation-ms-argentina</guid><category>.NET</category><category>Conferences</category><category>WWF</category></item></channel></rss>