<?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>Mauricio Rojas Blog</title><link>http://blogs.artinsoft.net/mrojas/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1593</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/04/18/activex-controls-in-net-and-the-enabled-bug.aspx#comments</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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1588</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/04/09/install-assembly-in-gac-with-c.aspx#comments</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>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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1580</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/04/03/useful-msbuild-custom-tasks.aspx#comments</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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1579</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/04/03/get-relative-path.aspx#comments</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>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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1573</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/03/04/pretty-printers-for-c.aspx#comments</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>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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1563</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/02/05/activex-exceptions-when-running-in-net.aspx#comments</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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1561</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/02/04/ismissing-migration-in-vb-net-or-c.aspx#comments</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><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1560</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2008/02/04/internet-explorer-runtime-error-do-you-wish-to-debug.aspx#comments</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>Debugging AJAX</title><link>http://blogs.artinsoft.net/mrojas/archive/2007/12/12/debugging-ajax.aspx</link><pubDate>Wed, 12 Dec 2007 16:00:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1537</guid><dc:creator>Mrojas</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1537</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2007/12/12/debugging-ajax.aspx#comments</comments><description>AJAX applications are great &lt;br /&gt;
Their coolness factor is high, and your clients &lt;br /&gt;
will be trilled by the new interactivity of your pages &lt;br /&gt;
But as a developer when you have a problem with&lt;br /&gt;
AJAX it could be hard to track. Because there is &lt;br /&gt;
a lot going on behind the scenes &lt;br /&gt;

Some of our costumers migrate their ASP applications to &lt;br /&gt;
to ASP.NET and it&amp;#39;s natural that they want &lt;br /&gt;
some AJAX in it. &lt;br /&gt;
So I found a GREAT GREAT application for AJAX debugging &lt;br /&gt;
It&amp;#39;s called fiddler. I cannot describe it all for you so go its site and watch the videos &lt;br /&gt;
The tool is just amazing :)&lt;br /&gt;
It really can see everything that the browser &lt;br /&gt;
receives and sends and more. &lt;br /&gt;
A definitive must &lt;a href="http://www.fiddler2.com/Fiddler/help/"&gt;Fiddler&lt;/a&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1537" 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/ASP+Migration/default.aspx">ASP Migration</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>MSBuild and Visual Studio</title><link>http://blogs.artinsoft.net/mrojas/archive/2007/11/09/1529.aspx</link><pubDate>Fri, 09 Nov 2007 15:50:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1529</guid><dc:creator>Mrojas</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1529</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2007/11/09/1529.aspx#comments</comments><description>One of my purposes for this year was to start &lt;br&gt;
using more the MSBuild &lt;br&gt;
Saldly I'm still not as good on it as I expected &lt;br&gt;
This link provided some interetings points 
&lt;a href="http://blogs.conchango.com/stuartpreston/archive/2007/07/29/Using-MSBuild-with-the-Visual-Studio-IDE-and-Source-Control.aspx"&gt;MS Build and VS&lt;/a&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1529" width="1" height="1"&gt;</description><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/Software+Development/default.aspx">Software Development</category></item><item><title>Case Sensitive SQL Server</title><link>http://blogs.artinsoft.net/mrojas/archive/2007/10/26/1527.aspx</link><pubDate>Fri, 26 Oct 2007 17:29:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1527</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1527</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2007/10/26/1527.aspx#comments</comments><description>

Recently a friend at work had a problem querying a SQL server that indicated 
that the column name was wrong.


&lt;p&gt;The only thing wrong was the the case. For example he had COLUMN1 instead of 
Column1. I had never seen that problem in SQLServer. &lt;br&gt;
I had seed that in Sybase but not in SQLServer. He solved that by changing the 
database collating sequence to something like this:&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;alter database database1 collate 
SQL_Latin1_General_CP1_CI_AI&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;the CI in the collating indicates &lt;i&gt;Case Insensitive&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;For more information on SQL Server collations check:
&lt;a href="http://msdn2.microsoft.com/en-us/library/aa258233(SQL.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa258233(SQL.80).aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;And you determine your current database collation use a code like this:&lt;/p&gt;
								&lt;font face="Tahoma" size="2"&gt;
								&lt;font color="#0000ff" size="2"&gt;
								&lt;font face="Courier New"&gt;USE&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#808080" size="2"&gt;&lt;font size="2"&gt;yourdb&lt;/font&gt;&lt;font color="#808080" size="2"&gt;&gt;&lt;br&gt;
								&lt;/font&gt;&lt;font size="2"&gt;GO&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;p&gt;
								&lt;font face="Courier New"&gt;print&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;'My 
								database ['&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;
								&lt;font color="#808080" size="2"&gt;+&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;db_name&lt;/font&gt;&lt;font color="#808080" size="2"&gt;()&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#808080" size="2"&gt;+&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;'] 
								collation is: '&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;
								&lt;font color="#808080" size="2"&gt;+&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;cast&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;
								DATABASEPROPERTYEX&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;
								&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;db_name&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(),&lt;/font&gt;&lt;font size="2"&gt; 
								N&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;'Collation'&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;as&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;varchar&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;128&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/p&gt;
								&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
								&lt;p&gt;&lt;font face="Courier New"&gt;print&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;'My tempdb 
								database collation is: '&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#808080" size="2"&gt;+&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;cast&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff00ff" size="2"&gt;
								DATABASEPROPERTYEX&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;
								&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;'tempdb'&lt;/font&gt;&lt;font color="#808080" size="2"&gt;,&lt;/font&gt;&lt;font size="2"&gt; 
								N&lt;/font&gt;&lt;font color="#ff0000" size="2"&gt;'Collation'&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;as&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;varchar&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;128&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/font&gt;&lt;font size="2"&gt;
								&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1527" width="1" height="1"&gt;</description><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/Databases/default.aspx">Databases</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>Track Changes in VSS (Visual Source Safe)</title><link>http://blogs.artinsoft.net/mrojas/archive/2007/10/24/1526.aspx</link><pubDate>Wed, 24 Oct 2007 17:18:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1526</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1526</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2007/10/24/1526.aspx#comments</comments><description>&lt;p&gt;MS VSS (Visual SourceSafe) is not really my preferred Source Control 
application, but &lt;br&gt;
sometimes in your company
that is what is available and you need to used it to have &lt;br&gt;
at least some 
versioning of the code.&lt;/p&gt;
&lt;p&gt;But haven't you had a situation where last week everything worked and &lt;br&gt;
now 
everything is broken.
And now is up to you to determine what went &lt;br&gt;
wrong? I have it all the time.&lt;br&gt;
 &lt;/p&gt;
&lt;p&gt;VSS have some search tools but I really do not enjoy using them. &lt;br&gt;
The &lt;a href="http://www.codeproject.com"&gt;Code 
Project Site&lt;/a&gt; provides an excellent tool called
&lt;a href="http://www.codeproject.com/tools/VssReporter.asp"&gt;VssReporter&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span id="intelliTXT"&gt;
&lt;img alt="Sample Image - VssReporter.jpg" src="http://www.codeproject.com/tools/VssReporter/VssReporter.jpg"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Do take a look at it, it makes it more easy to track changes. :)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1526" 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/SVN/default.aspx">SVN</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/Source+Control+Management/default.aspx">Source Control Management</category></item><item><title>Get GUIDs/CLSIDs from Exe, dll, ocx, tlb, etc</title><link>http://blogs.artinsoft.net/mrojas/archive/2007/10/23/1525.aspx</link><pubDate>Tue, 23 Oct 2007 21:08:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1525</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1525</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2007/10/23/1525.aspx#comments</comments><description>&lt;p&gt;A simple way of getting the GUID from an exe, dll, ocx, tlb is using the  
TLBINF32.dll &lt;/p&gt;
&lt;p&gt;This file is in the system path and it must be registered &lt;br&gt;
(Remember to use regsvr32 if you haven't registered).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;div&gt;            TLI.&lt;font&gt;TLIApplicationClass&lt;/span&gt; 
a = &lt;span&gt;new&lt;/span&gt; TLI.&lt;span&gt;TLIApplicationClass&lt;/span&gt;();&lt;br&gt;
            &lt;span&gt;try&lt;br&gt;
&lt;/span&gt;            {&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span&gt;                TLI.&lt;span&gt;TypeLibInfo&lt;/span&gt; 
inf = a.TypeLibInfoFromFile(&lt;span&gt;@"c:\windows\system32\MSHFLXGD.OCX"&lt;/span&gt;);&lt;br&gt;
                &lt;span&gt;MessageBox&lt;/span&gt;.Show(&lt;br&gt;
                &lt;span&gt;"TypeLibrary Name "&lt;/span&gt; +  
inf.Name + &lt;span&gt;"\r\n"&lt;/span&gt; + &lt;span&gt;
//name of (Type Library)&lt;br&gt;
&lt;/span&gt;                &lt;span&gt;"Tlb ID "&lt;/span&gt; +  inf.GUID 
+ &lt;span&gt;"\r\n"&lt;/span&gt; + &lt;span&gt;// GUID 
for Library&lt;br&gt;
&lt;/span&gt;                &lt;span&gt;"LCID "&lt;/span&gt;  + inf.LCID +
&lt;span&gt;"\r\n"&lt;/span&gt; + &lt;span&gt;// 
Language / Country&lt;br&gt;
&lt;/span&gt;                &lt;span&gt;"Major Version "&lt;/span&gt;+ 
inf.MajorVersion + &lt;span&gt;"\r\n"&lt;/span&gt; +
&lt;span&gt;// Major Version&lt;br&gt;
&lt;/span&gt;                &lt;span&gt;"Minor Version "&lt;/span&gt;+ 
inf.MinorVersion); &lt;span&gt;// Minor Version&lt;br&gt;
&lt;/span&gt;                &lt;span&gt;for&lt;/span&gt; (&lt;span&gt;short&lt;/span&gt; 
i = 1; i &amp;lt; inf.TypeInfoCount; i++)&lt;br&gt;
                {&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span&gt;                    
TLI.&lt;span&gt;TypeInfo&lt;/span&gt; inf2 = inf.TypeInfos[i];&lt;br&gt;
                    &lt;span&gt;MessageBox&lt;/span&gt;.Show(&lt;span&gt;"CLSID 
"&lt;/span&gt; + inf2.Name + &lt;span&gt;" - "&lt;/span&gt; + inf2.GUID,i +
&lt;span&gt;" of "&lt;/span&gt; +&lt;br&gt;
inf.TypeInfoCount);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;span&gt;                }&lt;br&gt;
            }&lt;br&gt;
            &lt;span&gt;catch&lt;/span&gt; (&lt;span&gt;Exception&lt;/span&gt; 
ee)&lt;br&gt;
            {&lt;br&gt;
                &lt;span&gt;MessageBox&lt;/span&gt;.Show(&lt;span&gt;"No 
guid"&lt;/span&gt;);&lt;br&gt;
            }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1525" width="1" height="1"&gt;</description><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>cfgrid or ext grid change column align</title><link>http://blogs.artinsoft.net/mrojas/archive/2007/10/23/1524.aspx</link><pubDate>Tue, 23 Oct 2007 16:42:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1524</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1524</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2007/10/23/1524.aspx#comments</comments><description>&lt;p&gt;If you are using Coldfusion MX 8 cfgrid or the excelent
&lt;a href="http://extjs.com/"&gt;Ext library&lt;/a&gt; and &lt;br&gt;
you want to change the aligment for the column then a simple way&lt;br&gt;
to do that is:&lt;/p&gt;
&lt;p&gt;Add an style block like &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt; .x-grid-col-0 {text-align:center}&lt;br&gt;
 .x-grid-col-1 {text-align:left}&lt;br&gt;
 .x-grid-col-2 {text-align:right}&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;And that's all just remember to change  .x-grid-col-&lt;i&gt;n&lt;/i&gt; change the 
n for the column you want to modify.&lt;/p&gt;&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1524" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ColdFusion/default.aspx">ColdFusion</category></item><item><title>Clean Up your Coldfusion application</title><link>http://blogs.artinsoft.net/mrojas/archive/2007/10/22/1523.aspx</link><pubDate>Mon, 22 Oct 2007 20:56:00 GMT</pubDate><guid isPermaLink="false">871fd81c-a111-489f-851d-e9637b8e2ce4:1523</guid><dc:creator>Mrojas</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.artinsoft.net/mrojas/rsscomments.aspx?PostID=1523</wfw:commentRss><comments>http://blogs.artinsoft.net/mrojas/archive/2007/10/22/1523.aspx#comments</comments><description>Currently I'm working in some tools to clean &lt;br&gt;
your code, whether it is VB, ASP or Coldfusion.&lt;br&gt;
&lt;br&gt;
Mostly simple tools, but for now if you are a &lt;br&gt;
ColdFusion Developer I want to recommend a nice &lt;br&gt;
application called &lt;a href="http://www.masrizal.com/index.cfm?fuseaction=idea.download_detail&amp;ProductID=cfprojectcleaner"&gt;CF Project Cleaner&lt;/a&gt; &lt;br&gt;
This tools lends you a hand so you can &lt;br&gt;get rid of unused files.
The tool is not perfect. But it is always handy &lt;br&gt;
to review your code.&lt;img src="http://blogs.artinsoft.net/aggbug.aspx?PostID=1523" width="1" height="1"&gt;</description><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/ColdFusion/default.aspx">ColdFusion</category><category domain="http://blogs.artinsoft.net/mrojas/archive/tags/VB6+Migration/default.aspx">VB6 Migration</category></item></channel></rss>