<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://addinit.com">
<channel>
 <title>A.D.D. In IT</title>
 <link>http://addinit.com</link>
 <description />
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/addinit" /><feedburner:info uri="addinit" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
 <title>Quick Memory Improvement for Firefox</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/h_pnN02PyB4/68</link>
 <description>&lt;p&gt;Its been a while since I posted, but I wanted to share a setting that really shouldn't be enabled by default in Firefox.&lt;/p&gt;
&lt;p&gt;I had been following various threads on Firefox memory usage, and after installing Firefox 10 I noticed Firefox started with something like 200 MB of RAM but quickly ballooned to some 500 MB after a few tabs open.&lt;/p&gt;
&lt;p&gt;After some research, I tried out a setting in the &lt;span class="geshifilter"&gt;&lt;code class="text geshifilter-text"&gt;about:config&lt;/code&gt;&lt;/span&gt; page, and it literally halved my RAM usage, especially with large numbers of tabs.&lt;/p&gt;
&lt;p&gt;This is the &lt;span class="geshifilter"&gt;&lt;code class="text geshifilter-text"&gt;image.mem.decodeondraw&lt;/code&gt;&lt;/span&gt; setting in Firefox.&lt;br /&gt;
&lt;span class="inline inline-none"&gt;&lt;a href="http://addinit.com/sites/default/files/images/decodeondraw.preview.png" onclick="launch_popup(69, 640, 178); return false;" target="_blank"&gt;&lt;img src="http://addinit.com/sites/default/files/images/decodeondraw.thumbnail.png" alt="Decodeondraw setting" title="Decodeondraw setting"  class="image image-thumbnail " width="100" height="28" /&gt;&lt;/a&gt;&lt;span class="caption" style="width: 98px;"&gt;&lt;strong&gt;Decodeondraw setting&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you go to &lt;span class="geshifilter"&gt;&lt;code class="text geshifilter-text"&gt;about:config&lt;/code&gt;&lt;/span&gt; in Firefox and type in &lt;span class="geshifilter"&gt;&lt;code class="text geshifilter-text"&gt;decodeondraw&lt;/code&gt;&lt;/span&gt; and double click the &lt;span class="geshifilter"&gt;&lt;code class="text geshifilter-text"&gt;image.mem.decodeondraw&lt;/code&gt;&lt;/span&gt; setting, then restart Firefox, you should see some immediate results.&lt;/p&gt;
&lt;div class="image-clear"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/h_pnN02PyB4" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/68#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/108">browser</category>
 <category domain="http://addinit.com/taxonomy/term/83">firefox</category>
 <category domain="http://addinit.com/taxonomy/term/109">memory</category>
 <category domain="http://addinit.com/taxonomy/term/4">OS &amp; Applications</category>
 <pubDate>Mon, 05 Mar 2012 16:38:45 +0000</pubDate>
 <dc:creator>khuang</dc:creator>
 <guid isPermaLink="false">68 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/68</feedburner:origLink></item>
<item>
 <title>Canned VirtualPC Instances for IE 6, 7, 8 on XP/Vista</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/5SHJxRDcIAI/67</link>
 <description>&lt;p&gt;Its been a while since I've posted here, but I have a quick (and useful) link to share. Microsoft has canned VirtualPC images to virtualize IE6/7/8 on XP with SP3 and Vista.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=21EABB90-958F-4B64-B5F1-73D0A413C8EF&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=21EABB90-958F-4B64-B5F1-73D0A413C8EF&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;VirtualPC is available from Microsoft for free here:&lt;br /&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=28C97D22-6EB8-4A09-A7F7-F6C7A1F000B5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=28C97D22-6EB8-4A09-A7F7-F6C7A1F000B5&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/5SHJxRDcIAI" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/67#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <category domain="http://addinit.com/taxonomy/term/107">microsoft virtualization</category>
 <pubDate>Fri, 28 May 2010 16:27:25 +0000</pubDate>
 <dc:creator>khuang</dc:creator>
 <guid isPermaLink="false">67 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/67</feedburner:origLink></item>
<item>
 <title>Checking assembly dependencies for .NET</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/sBoUJwePYhg/65</link>
 <description>&lt;p&gt;Are you getting the dreaded "Could not load file or assembly" error in C#?  Well there might be several causes of that, the most difficult to track down and fix is a missing assembly dependency.&lt;/p&gt;
&lt;p&gt;The exception that is usually generated is along similar to this one:&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text"&gt;System.IO.FileLoadException: Could not load file or assembly 'Utility, Version=1.2.0.200, Culture=neutral, PublicKeyToken=764d581291d764f7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)&lt;br /&gt;
&lt;br /&gt;
at x.Foo.FooGO() at x.Foo.Foo2(String groupName_) in Foo.cs:line 123 at x.Foo.UnitTests.FooTests.TestFoo() in FooTests.cs:line 98&lt;br /&gt;
&lt;br /&gt;
System.IO.FileLoadException: Could not load file or assembly 'Utility, Version=1.2.0.203, Culture=neutral, PublicKeyToken=764d581291d764f7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This exception means one of two things, you are missing a direct reference (or version) to the DLL that you are attempting to use... or that a DLL that your DLL references is missing or is the incorrect version.&lt;/p&gt;
&lt;p&gt;In the case of the later, you can enable Assembly reference logging by adding a registry value under HKLM\Software\Microsoft\Fusion.  Add a DWord entry named EnableLog and set its value to 1.  This will allow you to see where the missing assembly was first referenced from.&lt;/p&gt;
&lt;p&gt;From that point, you can load a tool called CheckAsm, found here: &lt;a href="http://checkasm.booring.net/" title="http://checkasm.booring.net/"&gt;http://checkasm.booring.net/&lt;/a&gt;.  With this tool, you can load an assembly and view all of its dependencies, it will show you the references and which are currently missing.  The best feature of CheckAsm is that you can scan an entire directory. From there, it's a matter of fixing the references either by adding the dependencies or modifying the DLL to point to the correct dependencies.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/sBoUJwePYhg" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/65#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/40">C#</category>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <pubDate>Thu, 17 Dec 2009 17:58:32 +0000</pubDate>
 <dc:creator>bmancini</dc:creator>
 <guid isPermaLink="false">65 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/65</feedburner:origLink></item>
<item>
 <title>Google's Public DNS</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/2nVoXR3PCoU/64</link>
 <description>&lt;p&gt;Announced today was Google's free public DNS servers. Whats different is that these servers are free of redirections to advertising pages on DNS resolutions of non-existant sites. When the DNS fails, it fails according to standards.&lt;/p&gt;
&lt;p&gt;To use their servers set your DNS lookup servers to 8.8.8.8 or 8.8.4.4 and everything should work.&lt;br /&gt;
See their site for more details.&lt;br /&gt;
&lt;a href="http://code.google.com/speed/public-dns/"&gt;http://code.google.com/speed/public-dns/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/2nVoXR3PCoU" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/64#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/105">google dns</category>
 <category domain="http://addinit.com/taxonomy/term/13">News</category>
 <pubDate>Thu, 03 Dec 2009 20:08:54 +0000</pubDate>
 <dc:creator>khuang</dc:creator>
 <guid isPermaLink="false">64 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/64</feedburner:origLink></item>
<item>
 <title>Server Utility Functions for Non-Web Apps</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/0WLsMU5H7Rk/63</link>
 <description>&lt;p&gt;This is just a quick post. Normally, when one needs to use such functions as HtmlEncode, HtmlDecode, UrlEncode, UrlDecode and related functions, one would normally go to the Server class in your current HttpContext.&lt;/p&gt;
&lt;p&gt;However, in the case that you're running in a console application for any particular reason, you don't have an HttpContext.Current, and you would then throw a "Object reference not set to an instance of an object" (aka Null Reference Exception).&lt;/p&gt;
&lt;p&gt;The correct way to do this is to use the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx"&gt;System.Web.HttpUtility&lt;/a&gt; class. This utility is the one used internally by the Server object.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/0WLsMU5H7Rk" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/63#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <category domain="http://addinit.com/taxonomy/term/104">httpcontext server asp.net</category>
 <pubDate>Mon, 23 Nov 2009 17:13:09 +0000</pubDate>
 <dc:creator>khuang</dc:creator>
 <guid isPermaLink="false">63 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/63</feedburner:origLink></item>
<item>
 <title>reCAPTCHA for ASP.NET MVC that uses ModelState</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/AQJZ595OAIA/62</link>
 <description>&lt;p&gt;Here is a reCAPTCHA control for ASP.NET MVC that uses ModelState.  This code includes the ActionFilter as well as the HTML Helper for rendering the reCAPTCHA control.&lt;/p&gt;
&lt;p&gt;To use it, add the ActionFilter to the Controller Action that will be performing the verification.  You can either provide the Private Key in the web.config or explicitly state it.  You can also use the IgnoreOnMobile boolean property to ignore reCAPTCHA verification if a mobile browser is detected.  You can also add a function delegate that returns a boolean value to the Ignore property to add custom logic to ignore reCAPTCHA under any condition you would like.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;Recaptcha&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Mvc&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;RecaptchaFilter&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;PrivateKey &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;my_private_key&amp;quot;&lt;/span&gt;, IgnoreOnMobile&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw1"&gt;true&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;AcceptVerbs&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;HttpVerbs&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Post&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&lt;span class="kw1"&gt;public&lt;/span&gt; ActionResult Create&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Post post&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="sy0"&gt;!&lt;/span&gt;ModelState&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;IsValid&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="co1"&gt;// model state and recaptcha were valid, continue onwards!&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="kw1"&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="co1"&gt;// model state was not valid, redirect back to source page&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;To render the reCAPTCHA control, simply add the Recaptcha.Mvc to the page and use the HtmlHelper.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="sy0"&gt;&amp;lt;%&lt;/span&gt;@ Import &lt;span class="kw1"&gt;Namespace&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Recaptcha.Mvc&amp;quot;&lt;/span&gt; &lt;span class="sy0"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="sy0"&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="sy0"&gt;&amp;lt;%=&lt;/span&gt; Html&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;CreateRecaptcha&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;recaptcha&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;my_private_key&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;my_public_key&amp;quot;&lt;/span&gt;, &lt;span class="st0"&gt;&amp;quot;clean&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="sy0"&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;If you wish to set the private/public keys in the web.config you can set them in the appSettings section.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="xml geshifilter-xml"&gt;&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;appSettings&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="re0"&gt;key&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;RecaptchaPrivateKey&amp;quot;&lt;/span&gt; &lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;my_private_key&amp;quot;&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="re0"&gt;key&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;RecaptchaPublicKey&amp;quot;&lt;/span&gt; &lt;span class="re0"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;my_public_key&amp;quot;&lt;/span&gt;&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;appSettings&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The source code is attached below as a Solution and Project that needs to be built.  Alternatively you can just add the csharp source files and drop them into your project appropriately.&lt;/p&gt;
&lt;table id="attachments" class="sticky-enabled"&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a href="http://addinit.com/sites/default/files/Recaptcha.Mvc_.zip"&gt;Recaptcha.Mvc_.zip&lt;/a&gt;&lt;/td&gt;&lt;td&gt;12.38 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/AQJZ595OAIA" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/62#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/103">asp.net mvc</category>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <category domain="http://addinit.com/taxonomy/term/36">recaptcha</category>
 <enclosure url="http://addinit.com/sites/default/files/Recaptcha.Mvc_.zip" length="12682" type="application/zip" />
 <pubDate>Sat, 07 Nov 2009 15:50:49 +0000</pubDate>
 <dc:creator>bmancini</dc:creator>
 <guid isPermaLink="false">62 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/62</feedburner:origLink></item>
<item>
 <title>Adding a container to ValidationSummary helper in ASP.NET MVC</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/DuOJn6CC-3Y/59</link>
 <description>&lt;p&gt;The one thing that is annoying about the validation summary HTML Helper in ASP.NET MVC is that it doesn't render a container element. Problem solved...&lt;/p&gt;
&lt;p&gt;The source code below uses an Extension method to append the method ValidationSummaryWithContainer to the HtmlHelper class.  This method works by grabbing the actual ValidationSummary first, checking to see if it has output any content, and if it has, wrapping a div element around the generated output. It's pretty simple, but effective.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="kw1"&gt;using&lt;/span&gt; &lt;span class="co3"&gt;System&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="kw1"&gt;using&lt;/span&gt; &lt;span class="co3"&gt;System.Text&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="kw1"&gt;namespace&lt;/span&gt; &lt;span class="kw5"&gt;System.&lt;span class="me1"&gt;Web&lt;/span&gt;&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Mvc&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Html&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;static&lt;/span&gt; &lt;span class="kw4"&gt;class&lt;/span&gt; ValidationSummaryExtension&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="co1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="co1"&gt;/// Creates a validation summary with a container element &lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="co1"&gt;/// surrounding the summary and error messages.&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="co1"&gt;/// &amp;lt;/summary&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;static&lt;/span&gt; &lt;span class="kw4"&gt;string&lt;/span&gt; ValidationSummaryWithContainer&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;this&lt;/span&gt; HtmlHelper ext, &lt;span class="kw4"&gt;string&lt;/span&gt; message&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var summaryoutput &lt;span class="sy0"&gt;=&lt;/span&gt; ext&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;ValidationSummary&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;message&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="sy0"&gt;!&lt;/span&gt;&lt;span class="kw4"&gt;string&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;IsNullOrEmpty&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;summaryoutput&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; StringBuilder sb &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;new&lt;/span&gt;&lt;/a&gt; StringBuilder&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;AppendLine&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;lt;div class='validation-summary-errors-container'&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Append&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;summaryoutput&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sb&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Append&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; sb&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;ToString&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="kw4"&gt;string&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Empty&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;To use this helper, on your view page, just call the helper method as you normally would:&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="sy0"&gt;&amp;lt;%=&lt;/span&gt;Html&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;ValidationSummaryWithContainer&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Please fix the following errors:&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;If there are no errors, it will render nothing, if there are errors, it will render the output with a containing div element.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text"&gt;&amp;lt;div class='validation-summary-errors-container'&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;span class=&amp;quot;validation-summary-errors&amp;quot;&amp;gt;Please fix the following errors:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;ul class=&amp;quot;validation-summary-errors&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;Title is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;Description is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;Contact email address is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;Specific area is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;li&amp;gt;Recaptcha was not valid, please try again.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Finally, the whole point of this exercise, is so that you can add css style to the containing element and make your error's very pretty. &lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="css geshifilter-css"&gt;&lt;span class="coMULTI"&gt;/*************************************************/&lt;/span&gt;&lt;br /&gt;
&lt;span class="coMULTI"&gt;/* VALIDATION ERROR*/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="re1"&gt;.validation-summary-errors-container&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;padding&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;1.5em&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;margin&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;.5em&lt;/span&gt; &lt;span class="re3"&gt;0px&lt;/span&gt; &lt;span class="re3"&gt;.5em&lt;/span&gt; &lt;span class="re3"&gt;0px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;background-color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#ffffdf&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;border&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;1px&lt;/span&gt; &lt;span class="kw2"&gt;solid&lt;/span&gt; &lt;span class="re0"&gt;#df6b6b&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#dc3535&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span class="re1"&gt;.field-validation-error&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#dc3535&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span class="re1"&gt;.input-validation-error&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;border&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;1px&lt;/span&gt; &lt;span class="kw2"&gt;solid&lt;/span&gt; &lt;span class="re0"&gt;#df6b6b&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;background-color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#ffffdf&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
span&lt;span class="re1"&gt;.validation-summary-errors&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;font-weight&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="kw2"&gt;bold&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/DuOJn6CC-3Y" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/59#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/103">asp.net mvc</category>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <pubDate>Sat, 17 Oct 2009 14:47:41 +0000</pubDate>
 <dc:creator>bmancini</dc:creator>
 <guid isPermaLink="false">59 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/59</feedburner:origLink></item>
<item>
 <title>Generic XML Serialization Class</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/tgXRFMtSCto/57</link>
 <description>&lt;p&gt;We had to add XML Serialization functionality to a bunch of different classes. Here is a nice generic class for adding static methods for Serialization and Deserialization to any of your classes...&lt;/p&gt;
&lt;p&gt;Well any class that doesn't inherit from another class. In that case, I guess you can use it as a standalone class. Regardless, it's good enough for me at 6:15PM on a Friday evening in the office when I'm trying to get out of here.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="kw1"&gt;using&lt;/span&gt; &lt;span class="co3"&gt;System&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="kw1"&gt;using&lt;/span&gt; &lt;span class="co3"&gt;System.Xml.Serialization&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="kw1"&gt;using&lt;/span&gt; &lt;span class="co3"&gt;System.IO&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="kw1"&gt;namespace&lt;/span&gt; HRXml&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw4"&gt;class&lt;/span&gt; GenericXmlSerialization&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;T&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;where&lt;/span&gt; T &lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="kw4"&gt;class&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;static&lt;/span&gt; T Deserialize&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw4"&gt;string&lt;/span&gt; input&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; XmlSerializer serialization &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;new&lt;/span&gt;&lt;/a&gt; XmlSerializer&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;typeof&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;T&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; StringReader reader &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;new&lt;/span&gt;&lt;/a&gt; StringReader&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;input&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw4"&gt;object&lt;/span&gt; result &lt;span class="sy0"&gt;=&lt;/span&gt; serialization&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Deserialize&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;reader&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; result &lt;span class="kw1"&gt;as&lt;/span&gt; T&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;static&lt;/span&gt; Stream Serialize&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;T input&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; XmlSerializer serialization &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;new&lt;/span&gt;&lt;/a&gt; XmlSerializer&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;typeof&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;T&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MemoryStream results &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;new&lt;/span&gt;&lt;/a&gt; MemoryStream&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="nu0"&gt;4096&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; serialization&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Serialize&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;results, input&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; results&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Position&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; results&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;static&lt;/span&gt; &lt;span class="kw4"&gt;string&lt;/span&gt; SerializeToString&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;T input&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Stream stream &lt;span class="sy0"&gt;=&lt;/span&gt; Serialize&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;input&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; StreamReader sr &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;new&lt;/span&gt;&lt;/a&gt; StreamReader&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;stream&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; sr&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;ReadToEnd&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This can be added to different classes by inheriting from the GenericXmlSerialization class with the current type as the Generic type.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;partial&lt;/span&gt; &lt;span class="kw4"&gt;class&lt;/span&gt; AssessmentOrderRequestType &lt;span class="sy0"&gt;:&lt;/span&gt; GenericXmlSerialization&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;AssessmentOrderRequestType&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="co1"&gt;// STUFF HERE&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;partial&lt;/span&gt; &lt;span class="kw4"&gt;class&lt;/span&gt; AssessmentOrderAcknowledgementType &lt;span class="sy0"&gt;:&lt;/span&gt; GenericXmlSerialization&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;AssessmentOrderAcknowledgementType&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="co1"&gt;// STUFF HERE&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Or you can use it standalone.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;var stream &lt;span class="sy0"&gt;=&lt;/span&gt; GenericXmlSerialization&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;AssessmentOrderAcknowledgementType&lt;span class="sy0"&gt;&amp;gt;.&lt;/span&gt;&lt;span class="me1"&gt;Serialize&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;myobject&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Time to get out of here!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/tgXRFMtSCto" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/57#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/40">C#</category>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <category domain="http://addinit.com/taxonomy/term/80">xml</category>
 <pubDate>Fri, 09 Oct 2009 23:03:39 +0000</pubDate>
 <dc:creator>bmancini</dc:creator>
 <guid isPermaLink="false">57 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/57</feedburner:origLink></item>
<item>
 <title>Re-throwing Exceptions in C# with InternalPreserveStackTrace</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/GuhrYoCuDfo/56</link>
 <description>&lt;p&gt;It is often the case that you need to re-throw an exception after handling it. The common problem with re-throwing exceptions is that you often lose stack trace information that can be extraordinarily useful for debugging purposes. I'll explain a technique that can be used to force the entire stack to be propagated when an exception is re-thrown.&lt;/p&gt;
&lt;p&gt;The solution is to perform a reflective invocation of the InternalPreserveStackTrace method, which is an internal method belonging to System.Exception. Usually, this can be accomplished in a single line of code using reflection as follows:&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="kw1"&gt;try&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="co1"&gt;// DOES SOMETHING&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span class="kw1"&gt;catch&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;Exception ex&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"&gt;&lt;span class="kw3"&gt;typeof&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw5"&gt;System&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Exception&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;GetMethod&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;InternalPreserveStackTrace&amp;quot;&lt;/span&gt;, &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kw5"&gt;System.&lt;span class="me1"&gt;Reflection&lt;/span&gt;&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;BindingFlags&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Instance&lt;/span&gt; &lt;span class="sy0"&gt;|&lt;/span&gt; &lt;span class="kw5"&gt;System.&lt;span class="me1"&gt;Reflection&lt;/span&gt;&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;BindingFlags&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;NonPublic&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Invoke&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;ex, &lt;span class="kw1"&gt;null&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span class="kw1"&gt;throw&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The InternalPreserveStackTrace method simply grabs the StackTrace from the point of the exception to the location where InternalPreserveStackTrace method was invoked.  It stores this trace information in a temporary field for usage in subsequent requests to StackTrace.  &lt;/p&gt;
&lt;p&gt;A little deeper analysis using Reflector shows exactly how this method works.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="kw1"&gt;internal&lt;/span&gt; &lt;span class="kw4"&gt;void&lt;/span&gt; InternalPreserveStackTrace&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw4"&gt;string&lt;/span&gt; stackTrace &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;StackTrace&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;stackTrace &lt;span class="sy0"&gt;!=&lt;/span&gt; &lt;span class="kw1"&gt;null&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="sy0"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;stackTrace&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;Length&lt;/span&gt; &lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_remoteStackTraceString &lt;span class="sy0"&gt;=&lt;/span&gt; stackTrace &lt;span class="sy0"&gt;+&lt;/span&gt; Environment&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;NewLine&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_stackTrace &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw1"&gt;null&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_stackTraceString &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw1"&gt;null&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;span class="kw1"&gt;public&lt;/span&gt; &lt;span class="kw1"&gt;virtual&lt;/span&gt; &lt;span class="kw4"&gt;string&lt;/span&gt; StackTrace&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; get&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_stackTraceString &lt;span class="sy0"&gt;!=&lt;/span&gt; &lt;span class="kw1"&gt;null&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_remoteStackTraceString &lt;span class="sy0"&gt;+&lt;/span&gt; &lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_stackTraceString&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_stackTrace &lt;span class="sy0"&gt;==&lt;/span&gt; &lt;span class="kw1"&gt;null&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_remoteStackTraceString&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw4"&gt;string&lt;/span&gt; stackTrace &lt;span class="sy0"&gt;=&lt;/span&gt; Environment&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="me1"&gt;GetStackTrace&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;this&lt;/span&gt;, &lt;span class="kw1"&gt;true&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw1"&gt;this&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;_remoteStackTraceString &lt;span class="sy0"&gt;+&lt;/span&gt; stackTrace&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;If you use reflection to analyze what this code does during execution you will see that it follows this process:&lt;/p&gt;
&lt;p&gt;When the Exception enters the initial catch block it contains the following information: _stackTrace field contains an sbyte array, _stackTraceString is null, and _remoteStackTraceString is null. &lt;/p&gt;
&lt;p&gt;Upon the invocation of the InternalPreserveStackTrace method, the StackTrace property's getter is invoked in the first line of InternalPreserveStackTrace.&lt;/p&gt;
&lt;p&gt;When get_StackTrace is called neither of the the first two conditional statements execute because _stackTraceString is null and _stackTrace is not null. The Environment.GetStrackTrace method is invoked and the stack from the source of the exception to the first catch block is returned and stored in the stackTrace variable.  &lt;/p&gt;
&lt;p&gt;InternalPreserveStackTrace then checks if the stackTrace variable is not null and has a length.  Because this variable now contains the stack trace from the source of the exception, the condition is true and it stores the stackTrace information in the _remoteStackTraceString field of the current Exception.  Finally, it sets the _stackTrace and _stackTraceString fields to null.&lt;/p&gt;
&lt;p&gt;If the StackTrace property is now accessed it will only return the contents of the _remoteStackTraceString field. &lt;/p&gt;
&lt;p&gt;At this point in our application the Exception is re-thrown using either &lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="kw1"&gt;throw&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="csharp geshifilter-csharp"&gt;&lt;span class="kw1"&gt;throw&lt;/span&gt; ex&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;When the exception is subsequently caught again, the _stackTrace field will once again be set to an sbyte array since the stack has changed.  This time, the _remoteStackTraceString field will contain our original stack trace from the source of the exception to the first catch block.  This stack trace information is then combined with the stack trace from the re-throw to give a complete picture of the stack at the time the exception occurred.&lt;/p&gt;
&lt;p&gt;CAVEAT EMPTOR&lt;/p&gt;
&lt;p&gt;Because this technique uses reflection to access private fields in the Exception class by using the NonPublic BindingFlag, it may not work if the system does not have FullTrust enabled. I have not investigated this yet... so beware in hosted environments that do not execute with Full Trust.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/GuhrYoCuDfo" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/56#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/40">C#</category>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <pubDate>Wed, 07 Oct 2009 21:57:29 +0000</pubDate>
 <dc:creator>bmancini</dc:creator>
 <guid isPermaLink="false">56 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/56</feedburner:origLink></item>
<item>
 <title>Solving xsd generation error: 'The element .... is missing'</title>
 <link>http://feedproxy.google.com/~r/addinit/~3/n3Jnq8LAMHw/55</link>
 <description>&lt;p&gt;In attempting to build source from an XML schema using the XSD command line tool, I kept getting an error about an element missing.&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text"&gt;C:\dev\hrxml\xsd AssessmentResult.xsd /classes /fields /language:CS /namespace:hrxml.AssessmentResult&lt;br /&gt;
Microsoft (R) Xml Schemas/DataTypes support utility&lt;br /&gt;
[Microsoft (R) .NET Framework, Version 2.0.50727.3038]&lt;br /&gt;
Copyright (C) Microsoft Corporation. All rights reserved.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:title' element is not declared. Line 1074, position 5.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:format' element is not declared. Line 1075, position 5.&lt;br /&gt;
Schema validation warning: The 'http://www.w3.org/2000/09/xmldsig#:Signature' element is not declared. Line 1173, position 5.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:creator' element is not declared. Line 1079, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:subject' element is not declared. Line 1080, position 8.&lt;br /&gt;
Schema validation warning: The &amp;lt;a href=&amp;quot;http://purl.org/dc/elements/1.1/:description'&amp;quot; title=&amp;quot;http://purl.org/dc/elements/1.1/:description'&amp;quot;&amp;gt;http://purl.org/dc/elements/1.1/:description'&amp;lt;/a&amp;gt; element is not declared. Line 1081, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:publisher' element is not declared. Line 1082, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:contributor' element is not declared. Line 1083, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:date' element is not declared. Line 1084, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:type' element is not declared. Line 1085, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:identifier' element is not declared. Line 1086, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:source' element is not declared. Line 1087, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:language' element is not declared. Line 1088, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:relation' element is not declared. Line 1089, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:coverage' element is not declared. Line 1090, position 8.&lt;br /&gt;
Schema validation warning: The 'http://purl.org/dc/elements/1.1/:rights' element is not declared. Line 1091, position 8.&lt;br /&gt;
&lt;br /&gt;
Warning: Schema could not be validated. Class generation may fail or may produce incorrect results.&lt;br /&gt;
&lt;br /&gt;
Error: Error generating classes for schema 'AssessmentResult'.&lt;br /&gt;
&amp;nbsp; - The element 'http://purl.org/dc/elements/1.1/:title' is missing.&lt;br /&gt;
&lt;br /&gt;
If you would like more help, please type &amp;quot;xsd /?&amp;quot;.&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The error was related to the import of external schemas into the document.  The solution is to download the external schemas and build your source using your target schema file as well as the import schema files. &lt;/p&gt;
&lt;p&gt;In the example below, AssessmentResult.xsd is my target, XmlSignatureSyntaxProcessing.xsd and DublicCoreSimple.xsd are the imports in the AssessmentResult schema:&lt;/p&gt;
&lt;p&gt;&lt;div class="geshifilter"&gt;&lt;div class="text geshifilter-text"&gt;xsd AssessmentResult.xsd DublinCoreSimple.xsd XmlSignatureSyntaxProcessing.xsd /classes /fields /language:CS /namespace:hrxml.AssessmentResult&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Voila!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/addinit/~4/n3Jnq8LAMHw" height="1" width="1"/&gt;</description>
 <comments>http://addinit.com/node/55#comments</comments>
 <category domain="http://addinit.com/taxonomy/term/24">.net</category>
 <category domain="http://addinit.com/taxonomy/term/40">C#</category>
 <category domain="http://addinit.com/taxonomy/term/3">Development</category>
 <category domain="http://addinit.com/taxonomy/term/80">xml</category>
 <category domain="http://addinit.com/taxonomy/term/102">xsd</category>
 <pubDate>Wed, 23 Sep 2009 13:41:43 +0000</pubDate>
 <dc:creator>bmancini</dc:creator>
 <guid isPermaLink="false">55 at http://addinit.com</guid>
<feedburner:origLink>http://addinit.com/node/55</feedburner:origLink></item>
</channel>
</rss>

