<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.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>Omer van Kloeten's .NET Zen : CodeDOM Adventures</title><link>http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx</link><description>Tags: CodeDOM Adventures</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>[Updated (1.8)] Commonly Used .NET Coding Patterns in CodeDom</title><link>http://weblogs.asp.net/okloeten/archive/2006/10/31/772843.aspx</link><pubDate>Tue, 31 Oct 2006 16:46:24 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:772843</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=772843</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/10/31/772843.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin: 0px 0px 0px 5px" src="http://www.codeplex.com/Project/FileDownload.aspx?ProjectName=CodePlex&amp;amp;DownloadId=1744" align="right"&gt; The latest update (1.8) of my article &lt;a href="http://www.codeproject.com/cs/design/codedompatterns.asp" target="_blank"&gt;Commonly Used .NET Coding Patterns in CodeDom&lt;/a&gt; is now out.&lt;br&gt;Changes made since 1.7:  &lt;ol&gt; &lt;li&gt;The Code Access Security Decorator Patterns have been added.  &lt;li&gt;The Assembly Information Pattern has been added.  &lt;li&gt;Security demand added to GetObjectData in the Serializable Type Pattern.  &lt;li&gt;Xml Comment Patterns moved to .Xml namespace and had their CodeXmlComment prefix removed (too long).  &lt;li&gt;&lt;strong&gt;Binaries now target .NET 2.0&lt;/strong&gt; instead of .NET 1.1, but they are still mostly backwards compatible.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;The project is now &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=CodeDomPatterns" target="_blank"&gt;hosted on CodePlex&lt;/a&gt;, complete with forums, an rss feed, an issue tracker and the whole nine yards. As always, suggestions are more than&amp;nbsp;welcome.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=772843" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+CodeDom+Patterns/default.aspx">Tools: CodeDom Patterns</category></item><item><title>CodeDom Tip: Cache Reusable Objects</title><link>http://weblogs.asp.net/okloeten/archive/2006/10/26/730076.aspx</link><pubDate>Thu, 26 Oct 2006 01:23:07 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:730076</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=730076</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/10/26/730076.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin: 0px 0px 0px 5px" src="http://www.lib.cycu.edu.tw/exams_new/doctor/del/91/del91201/image1.gif" align="right"&gt; Because CodeDom is so verbose and uses a massive grid of objects to represent code structures, it also has many small reusable objects, such as &lt;code&gt;CodeTypeReference&lt;/code&gt; objects. &lt;strong&gt;Many people overlook this fact because there are so many object being created anyway&lt;/strong&gt;, but sometimes a certain object will be used over and over. Since both the creation of these objects takes time and they also take up memory as unnecessary copies, consider creating a cache.&lt;/p&gt; &lt;p&gt;For example,&amp;nbsp;for the next release of the CodeDom Patterns library, I've created a cache for &lt;code&gt;CodeTypeReference&lt;code&gt;&lt;/code&gt;&lt;/code&gt; objects:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:77cb0348-a2db-4a2f-9d29-32fb02f9e002" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System;
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System.Collections.Generic;
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;using&lt;/span&gt;&lt;span style="color: #000000; "&gt; System.CodeDom;

&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;namespace&lt;/span&gt;&lt;span style="color: #000000; "&gt; DotNetZen.CodeDom
{
    &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;
    &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; Acts as a cache for &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;see cref=&amp;quot;CodeTypeReference&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt; objects.
    &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080; "&gt;
&lt;/span&gt;&lt;span style="color: #000000; "&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;public&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;static&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;class&lt;/span&gt;&lt;span style="color: #000000; "&gt; CodeTypeReferenceStore
    {
        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;private&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;static&lt;/span&gt;&lt;span style="color: #000000; "&gt; Dictionary&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;RuntimeTypeHandle, CodeTypeReference&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt; typeReferences &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; 
            &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; Dictionary&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;RuntimeTypeHandle, CodeTypeReference&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;();
        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;private&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;static&lt;/span&gt;&lt;span style="color: #000000; "&gt; Dictionary&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt;, CodeTypeReference&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt; nameReferences &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; 
            &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; Dictionary&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt;, CodeTypeReference&lt;/span&gt;&lt;span style="color: #000000; "&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;();

        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; Gets a &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;see cref=&amp;quot;CodeTypeReference&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt; by the &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;see cref=&amp;quot;Type&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt; it should reference.
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;param name=&amp;quot;type&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;The type being referenced.&lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;A &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;see cref=&amp;quot;CodeTypeReference&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt; object.&lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080; "&gt;
&lt;/span&gt;&lt;span style="color: #000000; "&gt;        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;public&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;static&lt;/span&gt;&lt;span style="color: #000000; "&gt; CodeTypeReference Get(Type type)
        {
            RuntimeTypeHandle handle &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; type.TypeHandle;

            &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; (&lt;/span&gt;&lt;span style="color: #000000; "&gt;!&lt;/span&gt;&lt;span style="color: #000000; "&gt;typeReferences.ContainsKey(handle))
            {
                typeReferences.Add(handle, &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; CodeTypeReference(type));
            }

            &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;return&lt;/span&gt;&lt;span style="color: #000000; "&gt; typeReferences[handle];
        }

        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; Gets a &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;see cref=&amp;quot;CodeTypeReference&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt; by the name of the &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;see cref=&amp;quot;Type&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt; it should reference.
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;param name=&amp;quot;type&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;The name of the type being referenced.&lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;
        &lt;/span&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt; &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt;A &lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;see cref=&amp;quot;CodeTypeReference&amp;quot;/&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; "&gt; object.&lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080; "&gt;
&lt;/span&gt;&lt;span style="color: #000000; "&gt;        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;public&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;static&lt;/span&gt;&lt;span style="color: #000000; "&gt; CodeTypeReference Get(&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt; typeName)
        {
            &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; (&lt;/span&gt;&lt;span style="color: #000000; "&gt;!&lt;/span&gt;&lt;span style="color: #000000; "&gt;nameReferences.ContainsKey(typeName))
            {
                nameReferences.Add(typeName, &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; CodeTypeReference(typeName));
            }

            &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;return&lt;/span&gt;&lt;span style="color: #000000; "&gt; nameReferences[typeName];
        }
    }
}
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=730076" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Advices/default.aspx">Advices</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+CodeDom+Patterns/default.aspx">Tools: CodeDom Patterns</category></item><item><title>[Updated (1.7)] Commonly Used .NET Coding Patterns in CodeDom</title><link>http://weblogs.asp.net/okloeten/archive/2006/10/05/_5B00_Updated-_2800_1.7_29005D00_-Commonly-Used-.NET-Coding-Patterns-in-CodeDom.aspx</link><pubDate>Thu, 05 Oct 2006 20:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:621126</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=621126</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/10/05/_5B00_Updated-_2800_1.7_29005D00_-Commonly-Used-.NET-Coding-Patterns-in-CodeDom.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;It&amp;#39;s been a while, but the latest update (1.7) of my article &lt;a href="http://www.codeproject.com/csharp/CodeDomPatterns.asp"&gt;Commonly Used .NET Coding Patterns in CodeDom&lt;/a&gt; is now out.&lt;br /&gt;Changes made since 1.6:  &lt;/p&gt;&lt;ol&gt; &lt;li&gt;The Nullable Value Type Property Pattern has been added. &lt;/li&gt; &lt;li&gt;The Enum.IsDefined and String.IsNullOrEmpty assertions have been added. &lt;/li&gt; &lt;li&gt;The Serializable Type Pattern has been added. &lt;/li&gt; &lt;li&gt;The Disposable Type Pattern is now a part of CodePatternTypeDeclaration.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I&amp;#39;d love to hear any and all opinions.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=621126" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Toys/default.aspx">Toys</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+CodeDom+Patterns/default.aspx">Tools: CodeDom Patterns</category></item><item><title>Fast Generic Dynamic Property Access with C# - Now With 10% More Awesome!</title><link>http://weblogs.asp.net/okloeten/archive/2006/06/21/Fast-Dynamic_2C00_-Generic-and-Simple-Property-Access-with-C_2300_.aspx</link><pubDate>Wed, 21 Jun 2006 05:59:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:454154</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=454154</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/06/21/Fast-Dynamic_2C00_-Generic-and-Simple-Property-Access-with-C_2300_.aspx#comments</comments><description>After reading James Nies's great piece, &lt;a href="http://www.codeproject.com/csharp/fast_dynamic_properties.asp"&gt;Fast Dynamic Property Access with C#&lt;/a&gt;, which gives a great performance alternative for repetative reflection tasks, I started reading the comments and found two forks from it, &lt;a href="http://sehe.xs4all.nl/FastDynamicMemberAccessor.zip"&gt;one for more than just properties&lt;/a&gt; by Seth Heeren and the other being an &lt;a href="http://saftsack.fs.uni-bayreuth.de/%7Edun3/archives/it/programming/fast-dynamic-property-access-using-reflection-emit/33.html"&gt;implementation that supports generics&lt;/a&gt; (and sports better performance, of course) by Tobias Hertkorn, all of the above being excellent work.&lt;br&gt;These, in turn, got me to start thinking there had to be a better way to create the dynamic assembly than having to hack pieces of IL, so I just decided to generate a CodeDom graph on the fly.&lt;br&gt;This is my first time creating on-the-fly assemblies and it really wasn't so difficult - just a matter of setting the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.codedom.compiler.compilerparameters.generateinmemory.aspx"&gt;CompilerParameters.GenerateInMemory&lt;/a&gt; property to &lt;i&gt;true&lt;/i&gt;.&lt;br&gt;
&lt;br&gt;Although it's more maintainable and is less likely to break in future CLR versions, it's slower than the previous version, given the fact that there's a compiler involved, but once you get over that hurdle (say, by caching the original object), it's about the same if not better.&lt;br&gt;Here is the source of the modified &lt;a href="http://spaz.ice.org/code/tools/GenericPropertyAccessor.cs"&gt;GenericPropertyAccessor.cs&lt;/a&gt;, but the rest you need to download from the &lt;a href="http://saftsack.fs.uni-bayreuth.de/%7Edun3/archives/it/programming/fast-dynamic-property-access-using-reflection-emit/33.html"&gt;previous article&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Last bit: During work on my code, I've come across yet another bug in CodeDom, "&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98469"&gt;The C# CodeDom provider does not work correctly with PrivateImplementationType with TypeArguments&lt;/a&gt;", which has been flagged as fixed in the next version. Another bug in CodeDom - who'd've thunk?&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=454154" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+Misc/default.aspx">Tools: Misc</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category></item><item><title>[Updated (1.6)] Commonly Used .NET Coding Patterns in CodeDom (now under a CC license)</title><link>http://weblogs.asp.net/okloeten/archive/2006/05/08/445674.aspx</link><pubDate>Mon, 08 May 2006 18:17:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:445674</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=445674</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/05/08/445674.aspx#comments</comments><description>The latest update (1.6) of my article &lt;a href="http://www.codeproject.com/csharp/CodeDomPatterns.asp"&gt;Commonly Used .NET Coding Patterns in CodeDom&lt;/a&gt; is now out.&lt;br /&gt;Major changes made since 1.5:&lt;ul&gt;&lt;ol&gt;&lt;li&gt;The Asynchronous Operation pattern has been added. &lt;/li&gt;&lt;li&gt;The Disposable Type pattern has been added. &lt;/li&gt;&lt;li&gt;The XML Comment patterns have been added. &lt;/li&gt;&lt;li&gt;Automatic documentation of the Begin/End Process, Custom Attribute, Custom Exception, Delegate, Event, Observer, Singleton, and Typed Collection patterns. &lt;/li&gt;&lt;li&gt;The Unary operators IsNull and NotNull have been added.&lt;/li&gt;&lt;li&gt;Several bug fixes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The work is now licensed under the &lt;a href="http://creativecommons.org/licenses/by/2.5/"&gt;Creative Commons Attribution 2.5 License&lt;/a&gt;: You can copy, freely distribute, derive, and even use the code in a commercial product, but you must attribute it to the author (that is, me).&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;As always, I&amp;#39;m looking for new ideas to add, so let me know if you think of anything else you&amp;#39;d like to add to the package.&lt;br /&gt;The formatting is a little screwey, especially in the code samples, but it&amp;#39;s ok.&lt;br /&gt;&lt;br /&gt;Please note that the new license now permits free use of this code in commercial products. If you decide to use the library, I&amp;#39;d love to know about it. :)&lt;br /&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=445674" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Toys/default.aspx">Toys</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+CodeDom+Patterns/default.aspx">Tools: CodeDom Patterns</category></item><item><title>Half-Baked</title><link>http://weblogs.asp.net/okloeten/archive/2006/04/08/442298.aspx</link><pubDate>Sat, 08 Apr 2006 15:10:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:442298</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=442298</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/04/08/442298.aspx#comments</comments><description>Whenever I have to write a large project using CodeDom (and this doesn't happen as often as you'd think), I almost always find something lacking. It's as if the whole of CodeDom is half baked.&lt;br /&gt;&lt;br /&gt;What's bugging me the most is that even with the framework's latest version, 2.0, when Microsoft had the chance to fix things up, they decided, for reasons unknown to anyone outside the company to only implement the new features and fix very few bugs.&lt;br /&gt;Microsoft developers, on their blogs, keep saying that they want not only software to be built with the framework, but also tools. One of the greatest tool-making capabilities they placed in the framework is CodeDom and I'm very appreciative of it, but when such a feature lacks in so many areas, it in several occasions becomes unusable.&lt;br /&gt;&lt;br /&gt;What brought this on? Here are the two latest bugs I found and reported:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://lab.msdn.microsoft.com/ProductFeedback/viewFeedback.aspx?feedbackId=FDBK48085"&gt;CodeDom Does Not Allow For Creation of ParamArrays&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://lab.msdn.microsoft.com/ProductFeedback/viewFeedback.aspx?feedbackId=FDBK48431"&gt;CodeDom Does Not Allow For Creation of Finalizers (Destructors)&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;(&lt;A href="http://weblogs.asp.net/okloeten/archive/2005/10/29/428824.aspx"&gt;Previously&lt;/a&gt;, &lt;A href="http://weblogs.asp.net/okloeten/archive/2004/07/06/174159.aspx"&gt;and then some&lt;/a&gt;, &lt;A href="http://weblogs.asp.net/okloeten/archive/2004/04/09/110491.aspx"&gt;and then some more&lt;/a&gt;, &lt;A href="http://weblogs.asp.net/okloeten/archive/2004/03/04/83748.aspx"&gt;and one more to boot&lt;/a&gt;)&lt;br /&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=442298" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/2+_5B21_s/default.aspx">2 ⅛s</category></item><item><title>CodeDom Reflection Generator</title><link>http://weblogs.asp.net/okloeten/archive/2006/04/07/442222.aspx</link><pubDate>Fri, 07 Apr 2006 16:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:442222</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=442222</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/04/07/442222.aspx#comments</comments><description>As a step to &lt;A href="http://weblogs.asp.net/okloeten/archive/2004/07/17/185732.aspx"&gt;further&lt;/a&gt; promote correct writing of generators using CodeDom, I've created a utility that takes an entire assembly and creates typed methods that create every type in it, invoke every method, reference every member, etc..&lt;br /&gt;&lt;br /&gt;Now wait a second and try and understand what I just wrote up there. Give up? That's ok, I gave before you did. Let's just take an example and it'll all be clear:&lt;br /&gt;&lt;br /&gt;Take the Chars indexer for System.String. To access it, I would have to write an awefully long and untyped piece of code:&lt;pre&gt;System.CodeDom.CodeIndexerExpression expression =&lt;br /&gt; &lt;font color="#0000ff"&gt;new &lt;/font&gt;System.CodeDom.CodeIndexerExpression(&lt;font color="#0000ff"&gt;new &lt;/font&gt;System.CodeDom.CodePropertyReferenceExpression(&lt;i&gt;myStringObjectReference&lt;/i&gt;, "Chars"), &lt;i&gt;positionExpression&lt;/i&gt;);&lt;/pre&gt;&lt;br /&gt;Using the reflected assembly, I could simply write:&lt;pre&gt;System.CodeDom.CodeIndexerExpression expression = System.ReflectedString.Properties.ReferenceIndexerChars(&lt;i&gt;myStringObjectReference&lt;/i&gt;, &lt;i&gt;positionExpression&lt;/i&gt;);&lt;/pre&gt;&lt;br /&gt;Let's look at the greater scale now. Again, take .NET 1.1's &lt;a href="http://spaz.ice.org/code/tools/System.String.jpg"&gt;&lt;code&gt;String&lt;/code&gt;&lt;/a&gt; class as an example. After putting &lt;code&gt;mscorlib&lt;/code&gt; through the tool, you will receive a class named &lt;a href="http://spaz.ice.org/code/tools/System.ReflectedString.jpg"&gt;&lt;code&gt;ReflectedString&lt;/code&gt;&lt;/a&gt; in an assembly named &lt;a href="http://spaz.ice.org/code/tools/%5BCodeDomReflection%5Dmscorlib.zip"&gt;&lt;code&gt;[CodeDomReflection]mscorlib.dll&lt;/code&gt;&lt;/a&gt; that knows exactly how not only the &lt;code&gt;String&lt;/code&gt; class works, but the whole of the &lt;code&gt;mscorlib&lt;/code&gt; assembly and can strongly reference every single part of it. Also, a complete documentation xml file is included for Intellisense's sake.&lt;br /&gt;&lt;br /&gt;&lt;hr size="2" width="100%" /&gt;&lt;br /&gt;The version I'm placing online for download is a perliminary beta. I've tested it on the entire framework and it worked great, but things may always break. &lt;A href="http://weblogs.asp.net/okloeten/contact.aspx"&gt;Please let me know if they do.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://spaz.ice.org/code/tools/DotNetZen.CodeDom.Reflect.zip"&gt;Here are the bits&lt;/a&gt;. To do some magic, just use &lt;code&gt;DotNetZen.CodeDom.Reflect assembly [strong name key file]&lt;/code&gt; (Yes, you can sign your assembly with a strong name key file so you could use it from your own signed generators).&lt;br /&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=442222" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Toys/default.aspx">Toys</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+Misc/default.aspx">Tools: Misc</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category></item><item><title>[Updated (1.5)] Commonly Used .NET Coding Patterns in CodeDom</title><link>http://weblogs.asp.net/okloeten/archive/2006/04/03/441740.aspx</link><pubDate>Mon, 03 Apr 2006 11:29:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:441740</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=441740</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/04/03/441740.aspx#comments</comments><description>I have uploaded another update (1.5) to my article: &lt;a href="http://www.codeproject.com/csharp/CodeDomPatterns.asp"&gt;Commonly Used .NET Coding Patterns in CodeDom.&lt;/a&gt;&lt;br /&gt;Major changes made since 1.4:&lt;ol&gt;&lt;li&gt;The Typed Collection pattern has been added.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Argument Assertion patterns have been added.&lt;/li&gt;&lt;li&gt;Assembly and all types are now CLSCompliant.&lt;/li&gt;&lt;li&gt;All types are now marked as serializable.&lt;/li&gt;&lt;li&gt;The Custom Attribute pattern now produces sealed attributes, to increase the efficiency of generated code. &lt;/li&gt;&lt;li&gt;Several overload additions and bug fixes.&lt;/li&gt;&lt;/ol&gt;Upcoming features:&lt;ol&gt;&lt;li&gt;Automatic documentation of members.&lt;/li&gt;&lt;li&gt;Async patterns.&lt;/li&gt;&lt;li&gt;Dispose pattern.&lt;/li&gt;&lt;li&gt;Serialization pattern.&lt;/li&gt;&lt;li&gt;And more...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=441740" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Toys/default.aspx">Toys</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+CodeDom+Patterns/default.aspx">Tools: CodeDom Patterns</category></item><item><title>Visualizers</title><link>http://weblogs.asp.net/okloeten/archive/2006/03/03/439501.aspx</link><pubDate>Fri, 03 Mar 2006 16:03:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:439501</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=439501</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/03/03/439501.aspx#comments</comments><description>I really like the idea of visualizers that has been implemented in Visual Studio 2005 and have wanted to write some for quite some time.&lt;br /&gt;So I have added to the mix another passion of mine - CodeDom and therefore present:&lt;h3&gt;The CodeDom Visualizer&lt;/h3&gt;&lt;img src="http://spaz.ice.org.nyud.net:8080/code/visualizers/cdv.1.png" /&gt;&lt;br /&gt;&lt;img src="http://spaz.ice.org.nyud.net:8080/code/visualizers/cdv.2.png" /&gt;&lt;br /&gt;&lt;br /&gt;The Visualizer will use all of the languages you have defined on your computer (using machine.config) to represent the unit, namespace, type, member, statement or expression.&lt;br /&gt;You can download from here: &lt;strike&gt;&lt;a class="linkification-ext" href="http://spaz.ice.org/code/cdv/cdvis.zip" title="Linkification: http://spaz.ice.org/code/cdv/cdvis.zip"&gt;http://spaz.ice.org/code/cdv/cdvis.zip&lt;/a&gt;&lt;/strike&gt;.&lt;br /&gt;To install, simply drag the binaries to &lt;i&gt;%DEVPATH%\Common7\Packages\Debugger\Visualizers&lt;/i&gt;.&lt;br /&gt;[&lt;b&gt;Update&lt;/b&gt;: &lt;a href="http://blogs.msdn.com/haibo_luo/default.aspx"&gt;Haibo Luo&lt;/a&gt; has a &lt;a href="http://blogs.msdn.com/haibo_luo/archive/2005/10/25/484861.aspx"&gt;really cool visualizer for dynamic methods&lt;/a&gt;. I have a feeling I'll need it some day... :)]&lt;br /&gt;&lt;br /&gt;&lt;A href="http://weblogs.asp.net/okloeten/archive/2006/03/07/439774.aspx"&gt;What's next?&lt;/a&gt;&lt;br /&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=439501" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Toys/default.aspx">Toys</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+Misc/default.aspx">Tools: Misc</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category></item><item><title>[Updated (1.4)] Commonly Used .NET Coding Patterns in CodeDom</title><link>http://weblogs.asp.net/okloeten/archive/2006/02/11/437983.aspx</link><pubDate>Sat, 11 Feb 2006 13:16:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:437983</guid><dc:creator>Omer van Kloeten</dc:creator><author>Omer van Kloeten</author><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/okloeten/rsscomments.aspx?PostID=437983</wfw:commentRss><comments>http://weblogs.asp.net/okloeten/archive/2006/02/11/437983.aspx#comments</comments><description>I have uploaded another update (1.4) to my article: &lt;a href="http://www.codeproject.com/csharp/CodeDomPatterns.asp"&gt;Commonly Used .NET Coding Patterns in CodeDom.&lt;/a&gt;&lt;br /&gt;Major changes made since 1.2:&lt;ul&gt;&lt;ol&gt;&lt;li&gt;Now compatible with generation for Visual Basic. Sorry about that.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Custom Attribute pattern has been added. &lt;/li&gt;&lt;li&gt;The Custom Exception pattern has been added. &lt;/li&gt;&lt;li&gt;The For Each pattern now works according to the C# specifications.&lt;/li&gt;&lt;li&gt;Interface more intuitive. &lt;/li&gt;&lt;li&gt;Lots of bug fixes.&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;I&amp;#39;m always looking for new ideas to add, so let me know if you think of anything else you&amp;#39;d like to add to the package.&lt;br /&gt;&lt;br /&gt;Also, there&amp;#39;s a conversation in the comments on how to add these as macros for Visual Studio.NET 2003 (to act as code snippets).&lt;br /&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=437983" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/okloeten/archive/tags/Toys/default.aspx">Toys</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/CodeDOM+Adventures/default.aspx">CodeDOM Adventures</category><category domain="http://weblogs.asp.net/okloeten/archive/tags/Tools_3A00_+CodeDom+Patterns/default.aspx">Tools: CodeDom Patterns</category></item></channel></rss>