<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.artinsoft.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ArtinSoft's Blogs</title><link>http://blogs.artinsoft.net/</link><description>Software Migration Experts</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>ASP.NET &amp; Web Standards</title><link>http://blogs.artinsoft.net/fzoufaly/archive/2008/05/09/asp-net-amp-web-standards.aspx</link><pubDate>Fri, 09 May 2008 22:38:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1599</guid><dc:creator>Fzoufaly</dc:creator><slash:comments>0</slash:comments><description>Aggiorno is an add-in for Visual Studio 2005/2008 that can swallow horrible non-validating markup and help you make an ASP.NET site web standards compliant with little effort. With Aggiorno web developers can improve their ASP.NET or HTML sites by making them comply with the latest web standards and incorporating the latest technology trends. This will immediately mean increased productivity and immediate business value. Beta 1 has just been released, so you might want to give it a try and send some...(&lt;a href="http://blogs.artinsoft.net/fzoufaly/archive/2008/05/09/asp-net-amp-web-standards.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1599" width="1" height="1"&gt;</description></item><item><title>A note on Visual Studio Team System 2008</title><link>http://blogs.artinsoft.net/juan_fernando/archive/2008/05/06/a-note-on-visual-studio-team-system-2008.aspx</link><pubDate>Wed, 07 May 2008 00:42:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1598</guid><dc:creator>jpena</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Last March I attended the Microsoft Inner Circle conference in Bellevue, WA, in which they presented the 2008 version of Visual Studio Team System.&amp;nbsp; This was my first view of VSTS, and I was impressed by some of the features they included to help developers in tasks such as gathering statistics on their source code, writing and executing unit tests, and looking for potential performance bottlenecks. &lt;/p&gt;
&lt;p&gt;We were also introduced to Visual Studio Testing Edition, which contains a set of tools to help QA teams automate tasks such as tracking and managing stabilization processes, controlling code churn and performing load tests.&lt;/p&gt;
&lt;p&gt;From a tester’s or developer’s perspective, I have no doubt that VSTS is going to be a great tool; however, I think it still needs to extend its support for Project Management tasks, as well as database design and requirements elicitation, documentation and tracking.&amp;nbsp; We were told that many of these features will be included in the next version of VSTS, code named “Rosario”.&lt;/p&gt;
&lt;p&gt;More information on VSTS can be found at &lt;a href="http://msdn.microsoft.com/en-us/teamsystem/default.aspx"&gt;http://msdn.microsoft.com/en-us/teamsystem/default.aspx&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1598" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/juan_fernando/archive/tags/Microsoft+Inner+Circle/default.aspx">Microsoft Inner Circle</category><category domain="http://blogs.artinsoft.net/juan_fernando/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category><category domain="http://blogs.artinsoft.net/juan_fernando/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>VB Runtime NOT in next Windows</title><link>http://blogs.artinsoft.net/fzoufaly/archive/2008/04/30/vb-runtime-not-in-next-windows.aspx</link><pubDate>Wed, 30 Apr 2008 19:44:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1595</guid><dc:creator>Fzoufaly</dc:creator><slash:comments>0</slash:comments><description>Here is an excerpt from an article that Greg DeMichillie wrote on Directions on Microsoft April Edition: &amp;quot;The planned follow-on release to Windows Vista, code-named Windows 7, will not include the Visual Basic 6.0 (VB 6) runtime libraries, Microsoft has begun informing customers. This sets a timeframe for the final end of support for the runtime.&amp;quot; As we have informed on several occasion in this Blog, Microsoft is performing all the normal steps to retire a technology from market. Visual...(&lt;a href="http://blogs.artinsoft.net/fzoufaly/archive/2008/04/30/vb-runtime-not-in-next-windows.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1595" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/fzoufaly/archive/tags/Visual+Basic+6+end+of+support/default.aspx">Visual Basic 6 end of support</category></item><item><title>ActiveX Controls in .NET and the Enabled bug</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/04/18/activex-controls-in-net-and-the-enabled-bug.aspx</link><pubDate>Fri, 18 Apr 2008 18:04:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1593</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;We found and interesting bug during a migration. The issue was that when there was an iteration through the controls in the forms, and you set the Enabled property, the property didn&amp;#39;t get set.&lt;/p&gt;
&lt;p&gt;After some research my friend Olman found this workaroung&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;foreach(Control c in Controls)&lt;br /&gt;{&amp;nbsp;&lt;br /&gt;&amp;nbsp; ctrl.Enabled = true;&lt;br /&gt;&amp;nbsp; if (ctrl is AxHost) ((AxHost)ctrl).Enabled&amp;nbsp;= true;&lt;br /&gt;}&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1593" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>Install Assembly in GAC with C#</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/04/09/install-assembly-in-gac-with-c.aspx</link><pubDate>Wed, 09 Apr 2008 16:42:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1588</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Do you want to create a program to install your assembly in the GAC using C#. Well if you had that requirement or you are just curious, here is how.&lt;/p&gt;
&lt;p&gt;I read these three articles:&lt;/p&gt;
&lt;p&gt;&lt;span class="ArticleTopTitle" id="ctl00_ArticleTopHeader_ArticleTitle"&gt;&lt;a href="http://www.codeproject.com/KB/dotnet/demystifygac.aspx"&gt;Demystifying the .NET Global Assembly Cache&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="ArticleTopTitle" id="ctl00_ArticleTopHeader_ArticleTitle0"&gt;&lt;a href="http://www.codeproject.com/KB/system/gacapi.aspx"&gt;GAC API Interface&lt;/a&gt;&lt;/span&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;span class="ArticleTopTitle" id="ctl00_ArticleTopHeader_ArticleTitle1"&gt;&lt;a href="http://www.codeproject.com/KB/dotnet/undocumentedfusion.aspx"&gt;Undocumented Fusion&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;What I wanted just a straight answer of how to do it. Well here is how:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.GAC;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;//// Artinsoft&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;//// Author: Mauricio Rojas orellabac@gmail.com mrojas@artinsoft.com&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;//// This program uses the undocumented GAC API to perform a simple install of an assembly in the GAC&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; AddAssemblyToGAC&lt;/pre&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;&lt;pre class="alt"&gt;    {&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;&lt;pre class="alt"&gt;        {&lt;/pre&gt;&lt;pre&gt;            &lt;span class="rem"&gt;// Create an FUSION_INSTALL_REFERENCE struct and fill it with data&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;            FUSION_INSTALL_REFERENCE[] installReference = &lt;span class="kwrd"&gt;new&lt;/span&gt; FUSION_INSTALL_REFERENCE[1];&lt;/pre&gt;&lt;pre&gt;            installReference[0].dwFlags = 0;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="rem"&gt;// Using opaque scheme here&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            installReference[0].guidScheme = System.GAC.AssemblyCache.FUSION_REFCOUNT_OPAQUE_STRING_GUID;&lt;/pre&gt;&lt;pre class="alt"&gt;            installReference[0].szIdentifier = &lt;span class="str"&gt;&amp;quot;My Pretty Aplication Identifier&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;            installReference[0].szNonCannonicalData= &lt;span class="str"&gt;&amp;quot;My other info&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="rem"&gt;// Get an IAssemblyCache interface&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            IAssemblyCache pCache = AssemblyCache.CreateAssemblyCache();&lt;/pre&gt;&lt;pre class="alt"&gt;            String AssemblyFilePath = args[0];&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!System.IO.File.Exists(AssemblyFilePath))&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Hey! Please use a valid path to an assembly, assembly was not found!&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; result = pCache.InstallAssembly(0, AssemblyFilePath,installReference);&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Process returned &amp;quot;&lt;/span&gt; + result);&lt;/pre&gt;&lt;pre&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Done!&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And here&amp;#39;s the complete source code for this application: &lt;a href="http://blogs.artinsoft.net/public_img/AddAssemblyToGAC.zip"&gt;DOWNLOAD SOURCE CODE AND BINARIES&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1588" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>April 8th 2008 and the end of Visual Basic 6 Support</title><link>http://blogs.artinsoft.net/fzoufaly/archive/2008/04/08/april-8th-2008-and-the-end-of-visual-basic-6-support.aspx</link><pubDate>Tue, 08 Apr 2008 21:04:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1586</guid><dc:creator>Fzoufaly</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;The date has arrived Visual Basic 6 leaves Extended support today.&lt;/p&gt;
&lt;p&gt;Rob Helm recently wrote on &amp;quot;Directions on Microsoft&amp;quot;: &amp;quot;Some organizations will let support lapse on the VB6 development environment, gambling that any serious problems in the VB6 environment has already been discovered&amp;quot;&amp;nbsp; Additionally, Rob adds: &amp;quot;... organizations remaining loyal to VB6 applications will have to make increasingly heroic efforts to keep those applications running as their IT environments change.&amp;quot;&lt;/p&gt;
&lt;p&gt;Organizations that GAMBLE with their business continuity, IT professionals that need to make HEROIC efforts to keep applications running!&amp;nbsp; Don&amp;#39;t you believe that maintaining an IT organization supporting a business is already enough of an effort to add to the mix unsupported applications?&lt;/p&gt;
&lt;p&gt;Do you plan to be a GAMBLING HERO or is it about time to consider ways out of Visual Basic 6?&lt;/p&gt;
&lt;p&gt;Well this might be just the right time.&amp;nbsp; ArtinSoft is about to release a new version of the Visual Basic Upgrade companion. The effort required to migrate has been reduced even further and it now makes more sense than ever to automatically upgrade your applications to C# or VB.NET.&lt;/p&gt;
&lt;p&gt;Have you been procrastinating the decision to move?&amp;nbsp; Act now!!&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1586" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/fzoufaly/archive/tags/VB6+Upgrade/default.aspx">VB6 Upgrade</category><category domain="http://blogs.artinsoft.net/fzoufaly/archive/tags/VB6+migration/default.aspx">VB6 migration</category><category domain="http://blogs.artinsoft.net/fzoufaly/archive/tags/VB6+to+.NET/default.aspx">VB6 to .NET</category></item><item><title>VBUC 2.0 Feature Spotlight: Migration Profiles</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/04/08/vbuc-2-0-feature-spotlight-migration-profiles.aspx</link><pubDate>Tue, 08 Apr 2008 14:39:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1585</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>One of the new features of the Visual Basic Upgrade Companion version 2.0 is the support for Migration Profiles. These profiles give you control over which translations to use for a particular migration, improving the quality of the generated code and applying only the conversions desired (for example, for specific third party components). ...(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/04/08/vbuc-2-0-feature-spotlight-migration-profiles.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1585" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC/default.aspx">VBUC</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC2.0/default.aspx">VBUC2.0</category></item><item><title>Birth pangs to ease your .NET migration pains: ArtinSoft’s Visual Basic Upgrade Companion v2.0 is born!</title><link>http://blogs.artinsoft.net/erick_nassar_blog/archive/2008/04/08/birth-pangs-to-ease-your-net-migration-pains-artinsoft-s-visual-basic-upgrade-companion-v2-0-is-born.aspx</link><pubDate>Tue, 08 Apr 2008 01:04:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1584</guid><dc:creator>enassar</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;I &lt;a href="http://blogs.artinsoft.net/erick_nassar_blog/archive/2008/04/01/vb6-is-dead-long-live-net.aspx"&gt;mentioned&lt;/a&gt;
a few days ago that ArtinSoft was about to release a new version of its VB to
.NET migration product. Well, today it is official: finally, the &lt;a href="http://www.artinsoft.com/pr_vbcompanion.aspx"&gt;Visual Basic Upgrade Companion&lt;/a&gt;
v2.0 has been released! After an incredible amount of work
(kudos to everyone involved), the tool now includes a series of enhancements
basically aimed towards increasing the generated code quality and the overall
automation of the upgrade process, allowing to reduce even further the manual
effort required to convert and compile your VB6 code to &lt;b&gt;VB.NET or C#&lt;/b&gt;.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;These are just some of the new features and improvements
included in this version of ArtinSoft’s Visual Basic Upgrade Companion (VBUC):&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;

&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Upgrade Manager: The VBUC v2.0 now sports a
dashing GUI and Command Line interface that improves the user experience. Incorporating
a screen to set up migration profiles, it allows selecting and applying only
those features you require for a specific conversion.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Support for conversion of multi-project
applications.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Migration of mixed ASP and VB6 code to ASP.NET
and VB.Net or C#.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Individual conversion patterns designed to
improve the migration of a large amount of diverse specific language patterns.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Conversion of unstructured to structured code, reducing
the presence of spaghetti code and improving code maintainability and
evolution.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This includes the
transformation of frequently used patterns related to error handling. For
example, the VBUC recognizes “On Error Goto” and “On Error Resume Next”
constructs patterns and replace them with the .NET “Try-Catch” structure. It
also performs “Goto” removals.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Improved typing system, which provides
additional information to assign more accurate target types to existing VB6 variables,
functions, fields, parameters, etc.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Improved Array migration, such as conversion of
non-zero-based arrays and re-dimensioning of arrays.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;C# specific generation enhancements:
declarations and typing, events declaration and invocation, error handling,
conversion of modules to classes, indexer properties, case sensitive
corrections, brackets generation for array access, variable initialization
generation, and much more.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Migration of ADO to ADO.NET using .NET Common Interfaces.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Support for converting many new 3rd-party
components such as SSDataWidgets SSDBGrid, TrueDBList80, Janus Grid, TX Text
Control, ActiveToolBars, ActiveTabs, ActiveBar 1 and 2, etc.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;New helper classes that offer frequently used
VB6 functionality that is either unavailable in .NET and/or that is encapsulated
for the sake of readability.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Automatic stub generation of no-maps as a proven
strategy to manage overall remaining effort towards successful compilation of upgraded
code.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;;font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;And much more!&lt;/li&gt;&lt;/ul&gt;



















































&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;For more info, you can visit ArtinSoft’s &lt;a href="http://www.artinsoft.com/"&gt;website&lt;/a&gt;, and let us know about your specific
migration requirements.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1584" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/erick_nassar_blog/archive/tags/Visual+Basic+to+.NET+upgrades/default.aspx">Visual Basic to .NET upgrades</category></item><item><title>Visual Basic Upgrade Companion 2.0 - The tool you have been waiting for</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/04/07/visual-basic-upgrade-companion-2-0-the-tool-you-have-been-waiting-for.aspx</link><pubDate>Mon, 07 Apr 2008 22:25:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1583</guid><dc:creator>Jaguilar</dc:creator><slash:comments>2</slash:comments><description>The Visual Basic Upgrade Companion version 2.0 was released today! The VBUC2.0 is a considerable improvement over previous versions of the Companion....(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/04/07/visual-basic-upgrade-companion-2-0-the-tool-you-have-been-waiting-for.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1583" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/News/default.aspx">News</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC/default.aspx">VBUC</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC2.0/default.aspx">VBUC2.0</category></item><item><title>So Long VB6, and Thanks for all the Fish</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/04/07/so-long-vb6-and-thanks-for-all-the-fish.aspx</link><pubDate>Mon, 07 Apr 2008 18:41:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1581</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>I may be a little late to the obituary, but VB6 support is finally, officially, irrefutably gone. The IDE, as stated in Microsoft&amp;#39;s Product Life-Cycle guidelines, &amp;quot;... will no longer be supported starting March 2008&amp;quot;. We will miss you VB6......(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/04/07/so-long-vb6-and-thanks-for-all-the-fish.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1581" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/ArtinSoft/default.aspx">ArtinSoft</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC/default.aspx">VBUC</category></item><item><title>Useful MSBuild Custom Tasks</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/04/03/useful-msbuild-custom-tasks.aspx</link><pubDate>Thu, 03 Apr 2008 19:48:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1580</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;I present here the implementation of some useful tasks&lt;br /&gt;In Artinsoft we perform massive migrations of VB6 code to VB.Net&lt;br /&gt;and C#.&lt;/p&gt;
&lt;p&gt;And sometimes after migration there are customizations to be &lt;br /&gt;performed on the code, to add new functionality or to set certain new&lt;br /&gt;properties.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;The idea was to provide a couple of very simple and puntual MSBuildTask&lt;br /&gt;&amp;nbsp;to illustrate how easy it is to create custom tasks and to provide a starting&lt;br /&gt;&amp;nbsp;point to create new one.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;You can freely use this code, just keep this comments and remember this is just&lt;br /&gt;&amp;nbsp;a sample code. There are not warranties. ;) And i made it a rush I know it could have&lt;br /&gt;&amp;nbsp;been written better&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Artinsoft&lt;br /&gt;&amp;nbsp;&lt;a href="mailto:mrojas@artinsoft.com"&gt;mrojas@artinsoft.com&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The implemented tasks are:&lt;/p&gt;
&lt;table class="" id="table1"&gt;

&lt;tr&gt;
&lt;td class=""&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;&lt;b&gt;RemoveCOMReference&lt;/b&gt; &lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=""&gt;&amp;nbsp;Removes COMReferences from your project. COM references are for when you are using things thru Interop&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&lt;b&gt;FixOutputPath&lt;/b&gt; &lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=""&gt;&amp;nbsp;Resets the output paths to bin\Release and bin\Debug&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;&lt;b&gt;&lt;span class="kwrd"&gt;AddProjectReference&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class=""&gt;Add a reference to another project. A nice feature is that it generates RelativePaths the way Visual Studio does&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;&lt;b&gt;&lt;span class="kwrd"&gt;AddSimpleReference&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class=""&gt;Add a reference to a very simple references like the ones you add when you click Add Reference and add System.EnterpriseServices &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=""&gt;&lt;b&gt;&lt;span class="kwrd"&gt;ChangeCurrentBuildSetting&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td class=""&gt;This can be used for a lot of things. 
&lt;p&gt;For example to turn on or off the RegisterForComInterop setting&lt;/p&gt;
&lt;p&gt;To set conditional compilation variables&lt;/p&gt;
&lt;p&gt;To set debug info to pdbonly&lt;/p&gt;
&lt;p&gt;The sky is the limit jeje&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The following is a sample project file &lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Project&lt;/span&gt; &lt;span class="attr"&gt;DefaultTargets&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Build&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/developer/msbuild/2003&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;&amp;lt;!-- make sure that the Assembly is in a place where msbuild can find it, a simple way is just to put it &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;in the same directory of your .proj file --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UsingTask&lt;/span&gt; &lt;span class="attr"&gt;TaskName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.MSBuild.RemoveCOMReference&amp;quot;&lt;/span&gt;    &lt;span class="attr"&gt;
  AssemblyFile&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.dll&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UsingTask&lt;/span&gt; &lt;span class="attr"&gt;TaskName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.MSBuild.FixOutputPath&amp;quot;&lt;/span&gt;         &lt;span class="attr"&gt;
  AssemblyFile&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.dll&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UsingTask&lt;/span&gt; &lt;span class="attr"&gt;TaskName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.MSBuild.AddProjectReference&amp;quot;&lt;/span&gt;   &lt;span class="attr"&gt;
  AssemblyFile&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.dll&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UsingTask&lt;/span&gt; &lt;span class="attr"&gt;TaskName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.MSBuild.AddSimpleReference&amp;quot;&lt;/span&gt;    &lt;span class="attr"&gt;
  AssemblyFile&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.dll&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;UsingTask&lt;/span&gt; &lt;span class="attr"&gt;TaskName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.MSBuild.ChangeProjectBuildSetting&amp;quot;&lt;/span&gt;    &lt;span class="attr"&gt;
  AssemblyFile&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SomeUsefulTasks.dll&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;VSProjects&lt;/span&gt; &lt;span class="attr"&gt;Include&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;$(Start)\**\*.*proj&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;&amp;lt;!--&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;Run with 
MSBUILD SampleProject.proj /target:COMReference /p:Start=&amp;quot;C:\MyCode&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;COMReference&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RemoveCOMReference&lt;/span&gt; &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(VSProjects)&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ComReferenceName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MSXML2&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;  &lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;&amp;lt;!-- &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;Adds a project reference  &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;Run with &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;MSBUILD SampleProject.proj /target:AddProjectReference /p:Start=&amp;quot;C:\MyCode&amp;quot; /p:ProjectPath=&amp;quot;C:\MyCode\MyNewSuperProject\Project1.csproj&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AddProjectReference&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AddProjectReference&lt;/span&gt; &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(VSProjects)&amp;quot;&lt;/span&gt;  &lt;span class="attr"&gt;AbsolutePathToProject&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;$(ProjectPath)&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;   &lt;/pre&gt;&lt;pre class="alt"&gt;   &lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;&amp;lt;!-- 
Adds a reference to a standard assembly &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;Run with &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;MSBUILD SampleProject.proj /target:AddSimpleReference /p:Start=&amp;quot;C:\MyCode&amp;quot; /p:Reference=&amp;quot;System.EnterpriseServices&amp;quot;   &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AddSimpleReference&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AddSimpleReference&lt;/span&gt; &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(VSProjects)&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Reference&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;$(Reference)&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;&amp;lt;!-- 
Resets the OutputPaths to .\bin\Debug and .\bin\Release &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;Run with &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;MSBUILD SampleProject.proj /target:FixOutput /p:Start=&amp;quot;C:\MyCode&amp;quot; /p:Reference=&amp;quot;System.EnterpriseServices&amp;quot;   &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;FixOutput&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;FixOutputPath&lt;/span&gt; &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(VSProjects)&amp;quot;&lt;/span&gt;  &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;  &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;&amp;lt;!-- &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;Adds a reference to a standard assembly &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;There are several options here for example to set the project debug info to pdb-only do this:&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;Run with &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;MSBUILD SampleProject.proj /target:ChangeSettingToPDBOnly /p:Start=&amp;quot;C:\MyCode&amp;quot; &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;Or run with &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;MSBUILD SampleProject.proj /target:ChangeSettingAddAConstant /p:Start=&amp;quot;C:\MyCode&amp;quot; &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;Or run with &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="rem"&gt;MSBUILD SampleProject.proj /target:SettingComInterop /p:Start=&amp;quot;C:\MyCode&amp;quot; &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="rem"&gt;ChangeSettingToPDBOnly&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ChangeProjectBuildSetting&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(VSProjects)&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;ConfigurationType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;All&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;Setting&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;DebugType&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;NewValue&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;pdbonly&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;   &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="rem"&gt;ChangeSettingAddAConstant&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ChangeProjectBuildSetting&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(VSProjects)&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;ConfigurationType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;All&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;Setting&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;DefineConstants&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;NewValue&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;MYNEWVAL&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;          &lt;span class="attr"&gt;Add&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="rem"&gt;SettingComInterop&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ChangeProjectBuildSetting&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="attr"&gt;SourceFiles&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;@(VSProjects)&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="attr"&gt;ConfigurationType&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;All&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;          &lt;span class="attr"&gt;Setting&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;RegisterForComInterop&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;         &lt;span class="attr"&gt;NewValue&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Target&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;  &lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Project&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://blogs.artinsoft.net/public_img/SomeUsefulTasks.zip"&gt;DOWNLOAD CODE AND BINARIES&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1580" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>Get Relative Path</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/04/03/get-relative-path.aspx</link><pubDate>Thu, 03 Apr 2008 15:24:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1579</guid><dc:creator>Mrojas</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;I had the requirement of creating a MSBuild custom task that opens a .csproj &lt;br /&gt;adds a reference to another project.&lt;/p&gt;
&lt;p&gt;The problem I faced is that references in VisualStudio are generated as relative paths, &lt;br /&gt;so I needed something to help me generate relative paths.&lt;/p&gt;
&lt;p&gt;After some Googleing I finally found this code. It was in a long forum discussion &lt;br /&gt;and was posted by a guy named something like Marcin Grzabski. And here it is for posterity.&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EvaluateRelativePath(&lt;span class="kwrd"&gt;string&lt;/span&gt; mainDirPath, &lt;span class="kwrd"&gt;string&lt;/span&gt; absoluteFilePath)&lt;/pre&gt;&lt;pre&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt;[]&lt;/pre&gt;&lt;pre&gt;            firstPathParts = &lt;/pre&gt;&lt;pre&gt;             mainDirPath.Trim(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar);&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt;[]&lt;/pre&gt;&lt;pre&gt;            secondPathParts = &lt;/pre&gt;&lt;pre&gt;             absoluteFilePath.Trim(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar);&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; sameCounter = 0;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; Math.Min(firstPathParts.Length,secondPathParts.Length); i++)&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;/pre&gt;&lt;pre&gt;                !firstPathParts[i].ToLower().Equals(secondPathParts[i].ToLower()))&lt;/pre&gt;&lt;pre class="alt"&gt;                {&lt;/pre&gt;&lt;pre&gt;                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;                }&lt;/pre&gt;&lt;pre&gt;                sameCounter++;&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (sameCounter == 0)&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; absoluteFilePath;&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; newPath = String.Empty;&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = sameCounter; i &amp;lt; firstPathParts.Length; i++)&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (i &amp;gt; sameCounter)&lt;/pre&gt;&lt;pre&gt;                {&lt;/pre&gt;&lt;pre class="alt"&gt;                    newPath += Path.DirectorySeparatorChar;&lt;/pre&gt;&lt;pre&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;                newPath += &lt;span class="str"&gt;&amp;quot;..&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (newPath.Length == 0)&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                newPath = &lt;span class="str"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = sameCounter; i &amp;lt; secondPathParts.Length; i++)&lt;/pre&gt;&lt;pre&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;                newPath += Path.DirectorySeparatorChar;&lt;/pre&gt;&lt;pre&gt;                newPath += secondPathParts[i];&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; newPath;&lt;/pre&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And to use is just do somelines like:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;            String test = EvaluateRelativePath(&lt;span class="str"&gt;@&amp;quot;E:\Source_Code\Code\ProjectsGroup1\Project1&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;@&amp;quot;E:\Source_Code\Code\ProjecstGroup2\Project2&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;//This will genearate something like ..\..\ProjectGroup2\Project2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1579" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>VB6 is dead. Long live .NET</title><link>http://blogs.artinsoft.net/erick_nassar_blog/archive/2008/04/01/vb6-is-dead-long-live-net.aspx</link><pubDate>Tue, 01 Apr 2008 21:00:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1578</guid><dc:creator>enassar</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Well, not exactly. But &lt;b&gt;official
support for Visual Basic 6.0 has certainly ended&lt;/b&gt;, as I’ve mentioned on
previous &lt;a href="http://blogs.artinsoft.net/erick_nassar_blog/archive/2008/01/11/vb-6-0-support-end.aspx"&gt;posts&lt;/a&gt;.
VB 6 has been used by millions of people all over the world to develop
applications ranging from thousands to millions of lines of code. It’s definitely time to move those significant organizational investments to .NET, and appropriately
&lt;a href="http://www.artinsoft.com/"&gt;ArtinSoft&lt;/a&gt; is about to launch a new
enhanced version of its VB to .NET migration product (&lt;a href="http://www.artinsoft.com/pr_vbcompanion.aspx"&gt;Visual Basic Upgrade Companion&lt;/a&gt;).
Stay tuned for details…&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1578" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/erick_nassar_blog/archive/tags/Visual+Basic+to+.NET+upgrades/default.aspx">Visual Basic to .NET upgrades</category></item><item><title>Jay Roxe on VB to .NET migration motivations and benefits</title><link>http://blogs.artinsoft.net/erick_nassar_blog/archive/2008/03/25/jay-roxe-on-vb-to-net-migration-motivations-and-benefits.aspx</link><pubDate>Tue, 25 Mar 2008 22:21:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1577</guid><dc:creator>enassar</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Browsing through some of the good old VB to .NET migration
resources I’ve accumulated through all these years, I rediscovered a &lt;a href="http://www.ddj.com/windows/184407843;jsessionid=DBEPCIOIFJ04UQSNDLPCKHSCJUNN2JVN?_requestid=958705"&gt;Dr.
Dobb’s interview&lt;/a&gt; by &lt;a href="http://www.swigartconsulting.com/"&gt;Scott
Swigart&lt;/a&gt; with &lt;a href="http://blogs.msdn.com/jroxe/"&gt;Jay Roxe&lt;/a&gt;. Among
other things, they talked about the motivations for migrating from Visual Basic
6.0 to the .NET platform, either to VB.NET or C#, and some of the benefits of
the new environment.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Putting aside the VB6 support end concerns, he describes the
lifecycle of any application as one of the motivations for a .NET upgrade: &lt;i&gt;“The application has reached a point where
the code has grown beyond its original scope, and it&amp;#39;s time to rewrite the
application anyways, and it just makes sense to transition to the latest development
platform at the same time”&lt;/i&gt;. Other incentives relate directly to the .NET
Framework’s new functionality and development capabilities, and that’s where
the benefits come under the spotlight. For instance, he mentions that &lt;i&gt;“We&amp;#39;re also seeing, particularly for some of
our Web customers, that when they took a VB6/ASP application, and moved it to a
VB.NET/ASP.NET application, it was 300 percent more scalable, and they got 200
percent more throughput from the application”&lt;/i&gt;.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Roxe also explains how the ClickOnce technology solves the
DLL Hell issue by providing better deployment and management, checking the
prerequisites availability before installing the application itself, with the
option of setting up version checking and without impact to any other
applications on the machine. There’s also the possibility of deploying a COM
component with an application without having to register it, allowing multiple side-by-side
installations of that component without conflicts.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Finally, he responds to the questions around choosing the
programming language (VB.NET or C#) once you decide to move to the .NET platform,
adding some advice around VB to .NET migrations and pointing some of the
available resources. You can read the whole article &lt;a href="http://www.ddj.com/windows/184407843;jsessionid=DBEPCIOIFJ04UQSNDLPCKHSCJUNN2JVN?_requestid=958705"&gt;here&lt;/a&gt;,
and if you have a VB to .NET migration project in your hands or want to share
any experience you’ve had with such upgrades, I’d definitely love to hear about
it.&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1577" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/erick_nassar_blog/archive/tags/Visual+Basic+to+.NET+upgrades/default.aspx">Visual Basic to .NET upgrades</category></item><item><title>Upcoming VB Webcasts</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/03/05/upcoming-vb-webcasts.aspx</link><pubDate>Wed, 05 Mar 2008 15:42:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1575</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>Beth Massi, Program Manager on the Visual Studio Community Team, will be doing a series of webcasts on Visual Basic 9. They will be mostly about the new features of VB9, including one about LINQ in VB that I am particularly interested in. Another one of them deals specifically with Visual Basic 6.0 to .NET migrations, called Live From Redmond: Migrating Your Visual Basic 6 Investments to .NET. If you haven&amp;#39;t yet considered moving your VB6 application to the .NET Framework, this may be a good place to start....(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/03/05/upcoming-vb-webcasts.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1575" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+Upgrade+Wizard/default.aspx">Visual Basic Upgrade Wizard</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC/default.aspx">VBUC</category></item><item><title>Pretty Printers / Format Code / for C# VB.NET</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/03/04/pretty-printers-for-c.aspx</link><pubDate>Tue, 04 Mar 2008 20:49:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1573</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In my past life I spent a few eons writing Java code. And it wasn&amp;#39;t bad. We had nice tools like Jalopy! that allowed us to have&lt;br /&gt;code in a very standard way.&lt;/p&gt;
&lt;p&gt;And I missed that. I&amp;#39;ve been looking around for something similar but I havent found anything like that :(&lt;/p&gt;
&lt;p&gt;Until I found a great post from &lt;a class="" href="http://www.chriseargle.com/post/Format-Solution.aspx"&gt;Chris Eargle&lt;/a&gt;, he improved the original solution from &lt;a class="" href="http://blogs.msdn.com/kevinpilchbisson/archive/2004/05/17/133371.aspx"&gt;Kelvinpinch&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Well here&amp;#39;s the code.&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; FormatSolution()&lt;br /&gt;     &lt;span class="kwrd"&gt;Dim&lt;/span&gt; sol &lt;span class="kwrd"&gt;As&lt;/span&gt; Solution = DTE.Solution&lt;br /&gt;     &lt;span class="kwrd"&gt;For&lt;/span&gt; i &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 1 &lt;span class="kwrd"&gt;To&lt;/span&gt; sol.Projects.Count&lt;br /&gt;          FormatProject(sol.Projects.Item(i))&lt;br /&gt;     &lt;span class="kwrd"&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; FormatProject(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; proj &lt;span class="kwrd"&gt;as&lt;/span&gt; Project)&lt;/pre&gt;&lt;pre class="alt"&gt;     &lt;span class="kwrd"&gt;For&lt;/span&gt; i &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 1 &lt;span class="kwrd"&gt;To&lt;/span&gt; proj.ProjectItems.Count&lt;br /&gt;          FormatProjectItem(proj.ProjectItems.Item(i))&lt;br /&gt;     &lt;span class="kwrd"&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; FormatProjectItem(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; projectItem &lt;span class="kwrd"&gt;As&lt;/span&gt; ProjectItem)&lt;/pre&gt;&lt;pre class="alt"&gt;     &lt;span class="kwrd"&gt;If&lt;/span&gt; projectItem.Kind = Constants.vsProjectItemKindPhysicalFile &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;          &lt;span class="kwrd"&gt;If&lt;/span&gt; projectItem.Name.LastIndexOf(&lt;span class="str"&gt;&amp;quot;.cs&amp;quot;&lt;/span&gt;) = projectItem.Name.Length - 3 &lt;span class="kwrd"&gt;Then&lt;br /&gt;&lt;/span&gt;               &lt;span class="kwrd"&gt;Dim&lt;/span&gt; window &lt;span class="kwrd"&gt;As&lt;/span&gt; Window = projectItem.Open(Constants.vsViewKindCode)&lt;br /&gt;               window.Activate()&lt;br /&gt;               projectItem.Document.DTE.ExecuteCommand(&lt;span class="str"&gt;&amp;quot;Edit.FormatDocument&amp;quot;&lt;/span&gt;)&lt;br /&gt;               window.Close(vsSaveChanges.vsSaveChangesYes)&lt;br /&gt;          &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;br /&gt;&lt;/span&gt;     &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;&amp;#39;Be sure to format all of the ProjectItems.&lt;br /&gt;&lt;/span&gt;     &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; projectItem.ProjectItems &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;br /&gt;&lt;/span&gt;          &lt;span class="kwrd"&gt;For&lt;/span&gt; i &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 1 &lt;span class="kwrd"&gt;To&lt;/span&gt; projectItem.ProjectItems.Count&lt;br /&gt;               FormatProjectItem(projectItem.ProjectItems.Item(i))&lt;br /&gt;          &lt;span class="kwrd"&gt;Next&lt;br /&gt;&lt;/span&gt;     &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;&amp;#39;Format the SubProject if it exists.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;     &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; projectItem.SubProject &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt; &lt;span class="kwrd"&gt;Then&lt;br /&gt;&lt;/span&gt;          FormatProject(projectItem.SubProject)&lt;br /&gt;     &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;br /&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To use it perform the following steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;Go to the VS IDE Tools Option &lt;br /&gt;&lt;img height="85" alt="" src="http://farm3.static.flickr.com/2058/2310442745_c57daf1827_o.jpg" width="652" border="0" /&gt;&lt;/li&gt;
&lt;li&gt;Then Select the Macros option and select Macros IDE...&lt;br /&gt;&lt;img height="272" alt="" src="http://farm3.static.flickr.com/2267/2311271190_dd82993430_o.jpg" width="454" border="0" /&gt;&lt;/li&gt;
&lt;li&gt;This will open the macros IDE&lt;br /&gt;&lt;img height="396" alt="" src="http://farm4.static.flickr.com/3124/2311285360_6de5781e9e_o.jpg" width="324" border="0" /&gt;&lt;/li&gt;
&lt;li&gt;In the Macros IDE navigate to the Module1, and Insert the code&lt;br /&gt;&lt;img height="308" alt="" src="http://farm4.static.flickr.com/3140/2311285700_8eebe3cd3d_o.jpg" width="814" border="0" /&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;To run the Macro go to Tools\Macros\Macro Explorer&lt;/p&gt;
&lt;p&gt;&lt;img height="185" alt="" src="http://farm4.static.flickr.com/3074/2311293264_d90b373eef_o.jpg" width="199" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;And select FormatAll :)&lt;/p&gt;
&lt;p&gt;And last but not least if you want to runit from the command line just do:&lt;/p&gt;
&lt;p&gt;devenv /command &amp;quot;Macros.MyMacros.Module1.FormalAll&amp;quot; MyProject.csproj or&lt;/p&gt;
&lt;p&gt;devenv /command &amp;quot;Macros.MyMacros.Module1.FormalAll&amp;quot; MySol.sln or&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1573" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>Upgrade a VB6 Application Incrementally: The Interop Forms Toolkit</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/03/03/upgrade-a-vb6-application-incrementally-the-interop-forms-toolkit.aspx</link><pubDate>Mon, 03 Mar 2008 11:19:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1574</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>If you&amp;#39;re still waiting to upgrade your VB6 applications to the .NET Framework, maybe the Interop Toolkit will help you to make a decision and get started with the process....(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/03/03/upgrade-a-vb6-application-incrementally-the-interop-forms-toolkit.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1574" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC/default.aspx">VBUC</category></item><item><title>Killing open Terminal Services sessions remotely</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/02/29/killing-open-terminal-services-sessions-remotely.aspx</link><pubDate>Fri, 29 Feb 2008 17:22:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1570</guid><dc:creator>Jaguilar</dc:creator><slash:comments>3</slash:comments><description>How to use two relatively obscure command line tools to remotely close a Terminal Services session....(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/02/29/killing-open-terminal-services-sessions-remotely.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1570" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Windows Server 2008 released</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/02/28/Windows-Server-2008-released.aspx</link><pubDate>Thu, 28 Feb 2008 16:54:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1569</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description>A quick post to tell everyone that the day finally came: Windows Server 2008 was released today. it includes two technologies in particular that I think will be revolutionary: Hyper-V and RemoteApp....(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/02/28/Windows-Server-2008-released.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1569" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Informix/default.aspx">Informix</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/News/default.aspx">News</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Virtualization/default.aspx">Virtualization</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Tools/default.aspx">Tools</category></item><item><title>ActiveX exceptions when running in .NET </title><link>http://blogs.artinsoft.net/mrojas/archive/2008/02/05/activex-exceptions-when-running-in-net.aspx</link><pubDate>Tue, 05 Feb 2008 15:11:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1563</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;During migration to C# or .NET it is easier to keep the same ActiveX. &lt;br /&gt;The VBCompanion does a great work in migrating the ActiveX control using the .NET ActiveX wrappings and&amp;nbsp;fixing all&amp;nbsp;method calls.&amp;nbsp;&lt;br /&gt;Sadly sometimes those ActiveX do not work properly in .NET.&lt;br /&gt;&lt;br /&gt;Well we have good news.&lt;br /&gt;Recently my friend Jose David (who we keep bothering because he is now&amp;nbsp; &lt;br /&gt;a Project Manager and now he only programs in MS Excel and MS Project, I added the MS by his request :P) fixed a curious bug &lt;br /&gt;we had with an aplication we migrated from VB6 to C#.&lt;/p&gt;
&lt;p&gt;The thing is that the aplication had an ActiveX control with a strange runtime behaviour. &lt;br /&gt;We migrated the application keeping the ActiveX control and in most ocasions it worked ok.&lt;/p&gt;
&lt;p&gt;But randomly it started throwing exceptions.&lt;/p&gt;
&lt;p&gt;During the testing he discovered that if he repeated the steps slowly the bug did not reproduced.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;So his idea was that it was due a garbage collection issue. And SURPRINSINLY he was right :P&lt;/p&gt;
&lt;p&gt;He added this:&lt;/p&gt;
&lt;blockquote&gt;&lt;font size="2"&gt;System.&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;GC&lt;/font&gt;&lt;font size="2"&gt;.Collect();&lt;/font&gt;&lt;font size="2"&gt; 
&lt;p&gt;System.&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;GC&lt;/font&gt;&lt;font size="2"&gt;.WaitForPendingFinalizers();&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;/font&gt;&amp;nbsp;And the application started to work.&lt;/p&gt;
&lt;p&gt;It seems like some of the COM objects needed a little more time for releasing all references :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1563" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>IsMissing migration in VB.NET or C#</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/02/04/ismissing-migration-in-vb-net-or-c.aspx</link><pubDate>Mon, 04 Feb 2008 22:43:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1561</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Recently&amp;nbsp; we added some support for migrating the IsMissing function to VB.NEt or C#&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;The thing is. In VB6 the IsMissing Function is &lt;strong&gt;&lt;font color="#339966"&gt;TRUE&lt;/font&gt; &lt;/strong&gt;only if you have something like:&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;strong&gt;Public Sub Foo(Optional str)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;Where you dont specify the variable type, or if you have &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;strong&gt;Public Sub Foo(Optional str as Variant)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;And is IsMissing is &lt;strong&gt;FALSE&lt;/strong&gt; for any other case. Including Optional variables whose definition type is not Variant.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Times New Roman" size="3"&gt;So let&amp;#39;s see some examples to illustrate the idea: &lt;br /&gt;&lt;/font&gt;&lt;font face="Times New Roman" size="3"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font face="arial black,avant garde" size="3"&gt;&amp;nbsp;Example 1:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;Public Sub Foo(str, a As Integer, b As Integer, Optional c As Integer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Foo Is missing&amp;nbsp;a &amp;quot; &amp;amp; &lt;font color="#ff0000" size="2"&gt;&lt;strong&gt;IsMissing(a)&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Foo Is missing&amp;nbsp;b &amp;quot; &amp;amp; &lt;font color="#ff0000" size="2"&gt;&lt;strong&gt;IsMissing(b)&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Foo Is missing&amp;nbsp;c &amp;quot; &amp;amp; &lt;font color="#ff0000" size="2"&gt;&lt;strong&gt;IsMissing(c)&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;It occurs that IsMissing is really &lt;strong&gt;&lt;font color="#339966"&gt;FALSE&lt;/font&gt;&lt;/strong&gt; in all cases. So it is equivalent to:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font face="Times New Roman" size="3"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;Public Sub Foo(str, a As Integer, b As Integer, Optional c As Integer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Foo Is missing&amp;nbsp;a &amp;quot; &amp;amp; &lt;font color="#339966"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Foo Is missing&amp;nbsp;b &amp;quot; &amp;amp; &lt;font color="#339966"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Foo Is missing&amp;nbsp;c &amp;quot; &amp;amp; &lt;font color="#339966"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;End Sub&lt;/p&gt;&lt;/font&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="arial black,avant garde" size="3"&gt;Example 2:&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;Public Sub Goo(str, a As Integer, b As Integer, Optional c As Object, Optional d As Byte, Optional e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;a&amp;quot; &amp;amp; &lt;font color="#ff0000"&gt;IsMissing(a)&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;b&amp;quot; &amp;amp; &lt;font color="#ff0000"&gt;IsMissing(b)&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;c&amp;quot; &amp;amp;&lt;font color="#ff0000"&gt; IsMissing(c)&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;d&amp;quot; &amp;amp; &lt;font color="#ff0000"&gt;IsMissing(d)&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;e&amp;quot; &amp;amp; &lt;font color="#ff0000"&gt;IsMissing(e)&lt;/font&gt;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;All cases EXCEPT &amp;quot;e&amp;quot; are equivalent to FALSE&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;Public Sub Goo(str, a As Integer, b As Integer, Optional c As Object, Optional d As Byte, Optional e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;a&amp;quot; &amp;amp; &lt;font color="#339966"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;b&amp;quot; &amp;amp; &lt;font color="#339966"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;c&amp;quot; &amp;amp;&lt;font color="#ff0000"&gt; &lt;/font&gt;&lt;font color="#339966"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;d&amp;quot; &amp;amp; &lt;font color="#339966"&gt;&lt;strong&gt;false&lt;/strong&gt;&lt;/font&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox (str &amp;amp; &amp;quot;Goo Is missing&amp;nbsp;e&amp;quot; &amp;amp; &lt;font color="#ff0000"&gt;IsMissing(e)&lt;/font&gt;)&lt;br /&gt;End Sub&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;So if you are migrating your VB6 Code to C# put attention to these little details it can save you a lot of time.And remember that this is just one feature&amp;nbsp;of VBCompanion tool ;)&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1561" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VIsual+Basic+.NET/default.aspx">VIsual Basic .NET</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/.NET+General+Tip/default.aspx">.NET General Tip</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>Internet Explorer Runtime Error Do you Wish to Debug?</title><link>http://blogs.artinsoft.net/mrojas/archive/2008/02/04/internet-explorer-runtime-error-do-you-wish-to-debug.aspx</link><pubDate>Mon, 04 Feb 2008 22:37:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1560</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Hi, for&amp;nbsp;several months I lived with an extremely&amp;nbsp;unconfortable&amp;nbsp;bug.&lt;br /&gt;On some pages&amp;nbsp;IE will display an alert dialog indicating&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;Error &lt;br /&gt;A Runtime Error has occurred. &lt;br /&gt;Do you wish to Debug? &lt;br /&gt;Line: blablabla&lt;br /&gt;Error: blablalba&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&lt;font color="#000000"&gt;Well finally I looked in google and found this: &lt;a href="http://support.microsoft.com/kb/822521"&gt;http://support.microsoft.com/kb/822521&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;So if anybody had to live with this bug like me, I hope this helps him&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1560" width="1" height="1"&gt;</description></item><item><title>Opening Projects Migrated with the VB Upgrade Companion on Visual Studio 2008</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/01/31/Opening-Projects-Migrated-with-the-VB-Upgrade-Companion-on-Visual-Studio-2008.aspx</link><pubDate>Thu, 31 Jan 2008 01:29:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1558</guid><dc:creator>Jaguilar</dc:creator><slash:comments>1</slash:comments><description>Now that Visual Studio 2008 is available, you might wonder what will happen with the Visual Studio 2005 projects generated with the current version of the VB Upgrade Companion (VBUC). For starters, it is worth mentioning that Visual Studio 2008 fully supports projects created in the .NET Framework 2.0, like the ones generated with the VBUC. The newer version of the .NET Framework (3.0, shipped with Vista, and 3.5, shipped with VS2008) keep the same core version of the CLR (2.0) as before, with very few minor changes. There are no compatibility or breaking changes like when upgrading from versions 1.1 to 2.0 of the .NET Framework.

When you open a VS2005 project in VS2008, you are greeted with the new Visual Studio Conversion Wizard
...(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/01/31/Opening-Projects-Migrated-with-the-VB-Upgrade-Companion-on-Visual-Studio-2008.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1558" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+Upgrade+Wizard/default.aspx">Visual Basic Upgrade Wizard</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/VBUC/default.aspx">VBUC</category></item><item><title>Countdown to Extinction</title><link>http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/01/25/Countdown-to-Extinction.aspx</link><pubDate>Fri, 25 Jan 2008 14:32:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1554</guid><dc:creator>Jaguilar</dc:creator><slash:comments>0</slash:comments><description> .... and so we reached 2008. This may seem like any other &amp;quot;average&amp;quot; year - the price of gas keeps going up, everybody talks about global warming, and will be an election year in the US (so we have one more reason to stop watching TV). However, for a large group of IT departments around the world, 2008 is a BIG year. 2008 is the year when Microsoft officially kills support for Visual Basic 6.0....(&lt;a href="http://blogs.artinsoft.net/jose_aguilar_blog/archive/2008/01/25/Countdown-to-Extinction.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1554" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/News/default.aspx">News</category><category domain="http://blogs.artinsoft.net/jose_aguilar_blog/archive/tags/Visual+Basic+Upgrade+Wizard/default.aspx">Visual Basic Upgrade Wizard</category></item><item><title>The curtain unveils – Aggiorno is out!</title><link>http://blogs.artinsoft.net/erick_nassar_blog/archive/2008/01/15/Aggiorno-Beta-is-out.aspx</link><pubDate>Tue, 15 Jan 2008 16:56:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1549</guid><dc:creator>enassar</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormal"&gt;Since 2007, a team of &lt;a href="http://www.artinsoft.com/"&gt;ArtinSoft&lt;/a&gt;’s
experts has been working on a tool that helps automate a lot of actions commonly
performed by web developers, increasing their productivity and resulting in more
efficient pages. The outcome is &lt;a href="http://www.aggiorno.com/what-is-aggiorno.aspx"&gt;Aggiorno&lt;/a&gt;, an
expandable plug-in for Visual Studio that produces SEO friendly, XHTML compliant,
CSS styled HTML and ASP.NET, which eases enormously the task of delivering web
standards compliant web sites. Based on a unique pattern detection and
transformation engine, Aggiorno’s beta version is currently available on a
by-invitation-only basis, so &lt;a href="http://www.aggiorno.com/"&gt;register now&lt;/a&gt;
and get early access to this revolutionary product!&lt;/p&gt;

&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1549" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/erick_nassar_blog/archive/tags/ArtinSoft/default.aspx">ArtinSoft</category></item></channel></rss>