<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET Programming</title>
        <link>http://geekswithblogs.net/scarpenter/category/3082.aspx</link>
        <description>.NET Programming</description>
        <language>en-US</language>
        <copyright>Sean Carpenter</copyright>
        <managingEditor>sean@seancarpenter.net</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Custom Config Sections and CallbackValidatorAttribute</title>
            <link>http://geekswithblogs.net/scarpenter/archive/2008/10/31/126447.aspx</link>
            <description>&lt;p&gt;I was recently working on creating a custom configuration section (deriving from &lt;a href="http://msdn.microsoft.com/library/system.configuration.configurationsection"&gt;ConfigurationSection&lt;/a&gt;) to provide some configuration metadata to an app I’m working on.  In creating a &lt;a href="http://msdn.microsoft.com/library/system.configuration.configurationelement"&gt;ConfigurationElement&lt;/a&gt;, I wanted to validate that one of the attributes of the element was a valid value for the application.  While looking at the example &lt;a href="http://msdn.microsoft.com/library/system.configuration.configurationelement"&gt;here&lt;/a&gt; I noticed the use of various validation attributes applied to validate the format of configuration values.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/library/system.configuration.callbackvalidatorattribute"&gt;CallbackValidatorAttribute&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/library/system.configuration.callbackvalidator"&gt;CallbackValidator&lt;/a&gt; seemed like they would fit the bill for doing custom validation.  Unfortunately, the documentation on CallbackValidatorAttribute is severely lacking.  Here’s what I found out using Reflector:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Both the CallbackMethodName and Type properties of the CallbackValidatorAttribute must be specified.  The Type property is the type of object that contains the CallbackMethodName method.&lt;/li&gt;
    &lt;li&gt;The callback method must be public, static and be a &lt;a href="http://msdn.microsoft.com/library/system.configuration.validatorcallback"&gt;ValidatorCallback&lt;/a&gt; delegate. &lt;/li&gt;
    &lt;li&gt;To fail validation, throw an ArgumentException during execution of the callback.  Reflector isn’t actually any help here for the CallbackValidator, but this is what the other validator types do.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font face="Tahoma"&gt;I’ve created a small sample demonstrating the use of the CallbackValidatorAttribute.  You can get it &lt;a href="http://cid-2be80146260ca97d.skydrive.live.com/self.aspx/Public/CallbackValidator.zip"&gt;here&lt;/a&gt;.  The sample validator itself isn’t very useful, but hopefully it illustrates the concept well enough.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126447"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=126447" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/scarpenter/aggbug/126447.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Carpenter</dc:creator>
            <guid>http://geekswithblogs.net/scarpenter/archive/2008/10/31/126447.aspx</guid>
            <pubDate>Fri, 31 Oct 2008 21:01:51 GMT</pubDate>
            <comments>http://geekswithblogs.net/scarpenter/archive/2008/10/31/126447.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/scarpenter/comments/commentRss/126447.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/scarpenter/services/trackbacks/126447.aspx</trackback:ping>
        </item>
        <item>
            <title>NCover on Vista x64</title>
            <link>http://geekswithblogs.net/scarpenter/archive/2008/07/23/ncover_on_vista_x64.aspx</link>
            <description>&lt;p&gt;I've been trying to get NCover to run successfully on Vista Ultimate x64 on and off for the last month.  We're still using one of the free versions of NCover available from &lt;a href="http://www.ncover.com/download/discontinued"&gt;here&lt;/a&gt;, so there is no built-in x64 support.  I came across &lt;a href="http://rabdullin.com/how-to-run-free-ncover-on-a-64-bit-machine/"&gt;this post&lt;/a&gt; today that mentioned using corflags to set the 32BIT flag in both NCover and your testing application (the post is describes using NUnit, but this worked for me with MBUnit as well).&lt;/p&gt;
&lt;p&gt;Those changes got me past the&lt;/p&gt;
&lt;pre&gt;Profiled process terminated. Profiler connection not established.&lt;/pre&gt;
&lt;p&gt;error, but I was then confronted with a new wrinkle:&lt;/p&gt;
&lt;pre&gt;Index was outside the bounds of the array.&lt;/pre&gt;
&lt;p&gt;This error would appear at the end of the profiled MBUnit run.  I poked around some and found some old posts on the NCover forums talking about this error and how it didn't occur in NCover 1.5.5.  So I downloaded 1.5.5 (I had been using 1.5.8) and now all is good - coverage runs successfully!&lt;/p&gt;
&lt;p&gt;We're not doing that much with NCover at this point, so I don't think we're giving up anything going with 1.5.5.  Maybe someday we'll be able to purchase a current license that &lt;a href="http://www.ncover.com/info/feature_comp"&gt;supports x64 out of the box&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123976"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=123976" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/scarpenter/aggbug/123976.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Carpenter</dc:creator>
            <guid>http://geekswithblogs.net/scarpenter/archive/2008/07/23/ncover_on_vista_x64.aspx</guid>
            <pubDate>Wed, 23 Jul 2008 18:48:18 GMT</pubDate>
            <comments>http://geekswithblogs.net/scarpenter/archive/2008/07/23/ncover_on_vista_x64.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/scarpenter/comments/commentRss/123976.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/scarpenter/services/trackbacks/123976.aspx</trackback:ping>
        </item>
        <item>
            <title>Changing the Protocol Version for a Web Service Call</title>
            <link>http://geekswithblogs.net/scarpenter/archive/2006/05/27/79818.aspx</link>
            <description>&lt;P&gt;I've been playing with the &lt;A href="http://www.weather.gov/forecasts/xml/"&gt;National Digitial Forecast Database&lt;/A&gt; (NDFD) provided by the &lt;A href="http://www.weather.gov/"&gt;National Weather Service&lt;/A&gt;.&amp;nbsp; You can retrieve a forecast via a SOAP web service by providing your latitiude and longitude and a few other details.&amp;nbsp; The web service worked fine when I called it from &lt;A href="http://www.python.org/"&gt;Python&lt;/A&gt;, but&amp;nbsp;I was getting an error when calling it from .NET (using the generated proxy classes in VS 2003 and VS 2005).&amp;nbsp; It turns out that the service needs HTTP version 1.0, not 1.1 (the default in .NET).&amp;nbsp; Unfortunately, the generated proxy class doesn't expose the &lt;A href="http://msdn2.microsoft.com/library/System.Net.HttpWebRequest.ProtocolVersion"&gt;ProtocolVersion&lt;/A&gt; property of the underlying &lt;A href="http://msdn2.microsoft.com/library/System.Net.HttpWebRequest"&gt;HttpWebRequest&lt;/A&gt; object.&amp;nbsp; So, I added support for this property.&lt;/P&gt;
&lt;P&gt;It's a little easier with VS 2005 because of the support for partial classes:&lt;/P&gt;&lt;PRE&gt;public partial class ndfd {
    private Version _protocolVersion = System.Net.HttpVersion.Version11;
    public Version ProtocolVersion {
        get { return _protocolVersion; }
        set { _protocolVersion = value; }
    }

    protected override System.Net.WebRequest GetWebRequest(Uri uri) {
        System.Net.WebRequest req = base.GetWebRequest(uri);
        ((System.Net.HttpWebRequest)req).ProtocolVersion = _protocolVersion;
        return req;
    }
}
&lt;/PRE&gt;
&lt;P&gt;I just added a new file to my solution and added a partial class definition (ndfd is the proxy class generated for the web service) that adds a ProtocolVersion property. Then in the &lt;A href="http://msdn2.microsoft.com/library/System.Web.Services.Protocols.SoapHttpClientProtocol.GetWebRequest"&gt;GetWebRequest&lt;/A&gt; method, I set the protocol version of the WebRequest.&lt;/P&gt;
&lt;P&gt;For VS 2003, I just derived a new class from the generated proxy class and added my property and override there:&lt;/P&gt;&lt;PRE&gt;public class ndfd2 : ndfd {
    private Version _protocolVersion = System.Net.HttpVersion.Version11;
    public Version ProtocolVersion {
        get { return _protocolVersion; }
        set { _protocolVersion = value; }
    }

    protected override System.Net.WebRequest GetWebRequest(Uri uri) {
        System.Net.WebRequest req = base.GetWebRequest(uri);
        ((System.Net.HttpWebRequest)req).ProtocolVersion = _protocolVersion;
        return req;
    }
}
&lt;/PRE&gt;
&lt;P&gt;Then I can just use the new class in my code. Both of these approaches avoid doing anything to the actual generated class, so the Web Reference can be updated without losing any of the customizations.&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=79818"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=79818" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/scarpenter/aggbug/79818.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Carpenter</dc:creator>
            <guid>http://geekswithblogs.net/scarpenter/archive/2006/05/27/79818.aspx</guid>
            <pubDate>Sat, 27 May 2006 10:28:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/scarpenter/archive/2006/05/27/79818.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/scarpenter/comments/commentRss/79818.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/scarpenter/services/trackbacks/79818.aspx</trackback:ping>
        </item>
        <item>
            <title>Preventing Automatic Generation of Web Service WSDL File</title>
            <link>http://geekswithblogs.net/scarpenter/archive/2005/11/19/60601.aspx</link>
            <description>&lt;P&gt;We have a web service that is exposed on the internet but is only used by our client application.&amp;nbsp; The client uses SSL to connect to the server and we are using WS-Security to provide authorization.&amp;nbsp; Even so, I wanted to prevent someone from viewing the interface of the service by going to the default WSDL generated by ASP.Net (http://domain/Service.asmx?WSDL).&lt;/P&gt;
&lt;P&gt;It turns out that this is actually pretty easy to do.&amp;nbsp; I found &lt;A href="http://msdn2.microsoft.com/en-us/library/ms242494.aspx"&gt;documentation on it&lt;/A&gt; related to &lt;A href="http://msdn.microsoft.com/vstudio/teamsystem/default.aspx"&gt;Visual Studio Team System&lt;/A&gt; &lt;A href="http://msdn2.microsoft.com/en-us/library/ms181826.aspx"&gt;Application Designer&lt;/A&gt;, but that page mentions that it makes a change to a service's web.config file.&amp;nbsp; The answer is to remove the "Documentation" protocol from the &amp;lt;webServices&amp;gt;, &amp;lt;protocols&amp;gt section of the config file.&amp;nbsp; I chose to do it by using a &amp;lt;remove&amp;gt; directive in the service's web.config file, but you could also do it in the machine.config file to affect the whole server.&amp;nbsp; The nice thing about this solution is that I can leave it enabled on our development server so that Visual Studio can auto-generate the client proxy, but it won't be exposed at all on the production site.&lt;/P&gt;
&lt;P&gt;Here's my change:&lt;/P&gt;
&lt;PRE&gt;
&amp;lt;webServices&amp;gt;
    &amp;lt;protocols&amp;gt;
        &amp;lt;remove name="Documentation" /&amp;gt;
    &amp;lt;/protocols&amp;gt;
&amp;lt;/webServices&amp;gt;
&lt;/PRE&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=60601"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=60601" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/scarpenter/aggbug/60601.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Carpenter</dc:creator>
            <guid>http://geekswithblogs.net/scarpenter/archive/2005/11/19/60601.aspx</guid>
            <pubDate>Sat, 19 Nov 2005 17:32:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/scarpenter/archive/2005/11/19/60601.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/scarpenter/comments/commentRss/60601.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/scarpenter/services/trackbacks/60601.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET Framework 2.0 Breaking Changes</title>
            <link>http://geekswithblogs.net/scarpenter/archive/2005/10/24/57891.aspx</link>
            <description>&lt;P&gt;Now that the release of VS2005 and the&amp;nbsp;.NET Framework 2.0 is imminent, I'm able to justify more time at work for reviewing its impact.&amp;nbsp; &lt;A href="http://msdn.microsoft.com/netframework/programming/breakingchanges/default.aspx"&gt;This list&lt;/A&gt; of breaking changes for 2.0 is definitely useful in that regard.&lt;/P&gt;
&lt;P&gt;I think one of the most important changes is the fact that unhandled exceptions will now always end a process (search for &amp;#8220;Unhandled exceptions will always be fatal to a process&amp;#8221;on &lt;A href="http://msdn.microsoft.com/netframework/programming/breakingchanges/runtime/clr.aspx"&gt;this page&lt;/A&gt;).&amp;nbsp; The 1.1 behavior was that unhandled exceptions on threads other than the main thread would not end a process.&amp;nbsp; I ran into this twice while working on Windows Services that used background threads.&amp;nbsp; I know I should have been catching the exceptions, but it was still design/debug time and that error handling wasn't present yet.&amp;nbsp; The symptom I experienced was that the service would run for a while, but then stop polling a message queue for any more messages.&amp;nbsp; The problem was that the polling was done in response to the&amp;nbsp;&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemtimerstimerclasselapsedtopic.asp"&gt;Elapsed&lt;/A&gt; event of a non &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemtimerstimerclassautoresettopic.asp"&gt;auto-reset&lt;/A&gt; timer - when the processing was complete, the timer was re-enabled.&amp;nbsp; When an exception was raised in the processing (which took place on a background thread as a result of the timer Elapsed event) the processing stopped before getting to the re-enable code.&amp;nbsp; So essentially the service was dead, since it was no longer polling the message queue.&amp;nbsp; This change will prevent this kind of bug from creeping in.&lt;/P&gt;
&lt;P&gt;[Via &lt;A href="http://blogs.msdn.com/jmanning/archive/2005/10/24/484153.aspx"&gt;James Manning&lt;/A&gt;]&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=57891"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=57891" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/scarpenter/aggbug/57891.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Carpenter</dc:creator>
            <guid>http://geekswithblogs.net/scarpenter/archive/2005/10/24/57891.aspx</guid>
            <pubDate>Mon, 24 Oct 2005 13:47:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/scarpenter/archive/2005/10/24/57891.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/scarpenter/comments/commentRss/57891.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/scarpenter/services/trackbacks/57891.aspx</trackback:ping>
        </item>
        <item>
            <title>Finding the source of a Microsoft DLL</title>
            <link>http://geekswithblogs.net/scarpenter/archive/2005/10/24/57874.aspx</link>
            <description>&lt;P&gt;&lt;A href="http://codebetter.com/blogs/geoff.appleby"&gt;Geoff Appleby&lt;/A&gt;&amp;nbsp;posts a link to a Microsoft support page that can tell you what DLL came from what package.&amp;nbsp; Very cool.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://codebetter.com/blogs/geoff.appleby/archive/2005/10/24/133596.aspx"&gt;Where'd that DLL come from?&lt;/A&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=57874"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=57874" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/scarpenter/aggbug/57874.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sean Carpenter</dc:creator>
            <guid>http://geekswithblogs.net/scarpenter/archive/2005/10/24/57874.aspx</guid>
            <pubDate>Mon, 24 Oct 2005 12:08:00 GMT</pubDate>
            <comments>http://geekswithblogs.net/scarpenter/archive/2005/10/24/57874.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/scarpenter/comments/commentRss/57874.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/scarpenter/services/trackbacks/57874.aspx</trackback:ping>
        </item>
    </channel>
</rss>