<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.objectsharp.com/CS/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>Dan's  Blog</title><link>http://blogs.objectsharp.com/CS/blogs/dan/default.aspx</link><description>Random Ramblings on Software</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Silverlight Binding Lesson</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2010/02/05/silverlight-binding-lesson.aspx</link><pubDate>Fri, 05 Feb 2010 16:40:10 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:193619</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/193619.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=193619</wfw:commentRss><description>&lt;p&gt;I learned a very important lesson about binding in Silverlight that I thought I would share.&amp;#160; &lt;/p&gt;  &lt;p&gt;Here is what I was trying to do:&lt;/p&gt;  &lt;p&gt;&amp;lt;TextBlock Text=”{Binding Path=MyPeople, Converter={StaticResource OldestPersonNameConverter}}” /&amp;gt;&lt;/p&gt;  &lt;p&gt;MyPeople is a collection of People and the converter is going to take that collection, find the oldest person and return their name.&amp;#160; I thought this would just work and it does the first time.&amp;#160; However in this case, adding a new person to MyPeople will NOT trigger the binding to update, your converter will never run again.&lt;/p&gt;  &lt;p&gt;Right? Wrong?&amp;#160; I’ve been debating the point with a few people at Objectsharp, and I didn’t expect this to fail (some did).&amp;#160; I was under the assumption that binding was binding, the magic behind the covers would look for INotifyPropertyChanged or INotifyCollectionChanged regardless of the property you are trying to bind.&lt;/p&gt;  &lt;p&gt;This doesn’t work for my example, but in my actual code I was able to bind to myCollection.Count which will fire a PropertyChanged event when you add or remove an item from the collection.&amp;#160; In the actual example above, I don’t have a good answer, they all have drawbacks.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=193619" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/silverlight/default.aspx">silverlight</category></item><item><title>WCF Ria Services vs Entity Framework</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2010/02/01/wcf-ria-services-vs-entity-framework.aspx</link><pubDate>Mon, 01 Feb 2010 16:20:15 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:193319</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/193319.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=193319</wfw:commentRss><description>&lt;p&gt;This is a quick tip for anyone using WCF RIA Services with Entity Framework.&amp;#160; The WCF RIA Services team has fixed what I consider a fairly annoying ‘bug’ with Entity Framework.&amp;#160; In Entity Framework the EntityCollection class does not implement INotifyCollectionChanged, however the client side EntityCollection class that RIA uses is part of the RIA framework and they have fixed this issue.&amp;#160; They have explicitly implemented the interface however so you will need to cast the EntityCollection to a INotifyCollectionChanged before you see the CollectionChanged event.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=193319" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/ria/default.aspx">ria</category><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/silverlight/default.aspx">silverlight</category></item><item><title>RIA Services XMLMetaDataProvider and Dynamic Assemblies</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2010/01/15/ria-services-xmlmetadataprovider-and-dynamic-assemblies.aspx</link><pubDate>Sat, 16 Jan 2010 00:12:22 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:192117</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/192117.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=192117</wfw:commentRss><description>&lt;p&gt;If you are using the &lt;a href="http://code.msdn.microsoft.com/RiaServices/Release/ProjectReleases.aspx?ReleaseId=2659" target="_blank"&gt;XMLMetaDataProvider&lt;/a&gt; and have a dynamic assembly reference your service might fail with the following error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;em&gt;The invoked member is not supported in a dynamic assembly&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;There are two fixes for this problem, one is to use the full attribute names.&amp;#160; So ‘DisplayAttribute’ instead of just ‘Display’.&amp;#160; Second option is to fix the code in MetadataSet.cs.&amp;#160; The problem is with the TryGetType method around line 421.&amp;#160; You should be able to find the code below, the GetExportedTypes needs to be changed to GetTypes.&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;     &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;       &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// TODO : the metadata file might need a way to specify the set&lt;/span&gt;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// of source assemblies to load from - for now search all loaded assemblies&lt;/span&gt;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (Assembly assembly &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; AppDomain.CurrentDomain.GetAssemblies())&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (Type t &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; assembly.GetTypes())&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (t.Name == typeName || t.FullName == typeName)&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;         {&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;             typeMap[typeName] = t;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; t;&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;         }&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;


      &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://manfredlange.blogspot.com/2005/12/invoked-member-is-not-supported-in.html" target="_blank"&gt;Thanks to Manfred Lange for the tip on the error message.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=192117" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/ria/default.aspx">ria</category><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/silverlight/default.aspx">silverlight</category></item><item><title>WCF RIA Services XMLMetaDataProvider Problem</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2010/01/14/wcf-ria-services-xmlmetadataprovider-problem.aspx</link><pubDate>Fri, 15 Jan 2010 01:52:32 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:192053</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/192053.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=192053</wfw:commentRss><description>&lt;p&gt;The current RIA Services project I’m working on has been using the &lt;a href="http://code.msdn.microsoft.com/RiaServices/Release/ProjectReleases.aspx?ReleaseId=2659" target="_blank"&gt;XMLMetaDataProvider&lt;/a&gt; due to the fact that our model and DomainService are in different projects.&amp;#160; This rules out defining your metadata in a partial class for each entity.&amp;#160;&amp;#160; As the project got bigger we noticed that randomly our metadata was not being created at build time.&amp;#160; Turns out there is a race condition with loading the XML file and the requests for metadata.&amp;#160; Here is the new XmlMetadataProvider.cs file where we now load the dataset in the constructor, not the first time it is requested.&amp;#160; After all that, I think we’ll try using &lt;a href="http://www.nikhilk.net/RIA-Services-Fluent-Metadata-API.aspx" target="_blank"&gt;Nikhil Kothari’s fluent API style&lt;/a&gt;, I like the look of it over the mass amount of XML.&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; XmlMetadataProvider : TypeDescriptionProvider&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Type domainServiceType;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; MetadataSet metadataSet;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// Constructor that accepts a metadata context to use when generating custom type descriptors&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;existingProvider&amp;quot;&amp;gt;The parent TDP instance&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;domainServiceType&amp;quot;&amp;gt;The DomainService Type exposing the entity Types this provider will be registered for&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; XmlMetadataProvider(TypeDescriptionProvider existingProvider, Type domainServiceType)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;             : &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;(existingProvider)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.domainServiceType = domainServiceType;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;             LoadMetadataSet();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; ICustomTypeDescriptor GetTypeDescriptor(Type objectType, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; instance)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XmlMetadataTypeDescriptor(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.MetadataSet, objectType, &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.GetTypeDescriptor(objectType, instance));&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; MetadataSet MetadataSet&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;             get&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;             {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (metadataSet == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;                 {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;                     LoadMetadataSet();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;                 }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; metadataSet;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum32"&gt;  32:&lt;/span&gt;             }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum33"&gt;  33:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum34"&gt;  34:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum35"&gt;  35:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; LoadMetadataSet()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum36"&gt;  36:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum37"&gt;  37:&lt;/span&gt;             metadataSet = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; MetadataSet();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum38"&gt;  38:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum39"&gt;  39:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;// load all the metadata files found&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum40"&gt;  40:&lt;/span&gt;             IEnumerable&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; metadataFiles = domainServiceType.Assembly.GetManifestResourceNames().Where(p =&amp;gt; p.EndsWith(&lt;span style="color:#006080;"&gt;&amp;quot;.metadata.xml&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase));&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum41"&gt;  41:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; metadataFile &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; metadataFiles)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum42"&gt;  42:&lt;/span&gt;             {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum43"&gt;  43:&lt;/span&gt;                 Stream stream = domainServiceType.Assembly.GetManifestResourceStream(metadataFile);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum44"&gt;  44:&lt;/span&gt;                 StreamReader streamReader = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StreamReader(stream);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum45"&gt;  45:&lt;/span&gt;                 String metadata = streamReader.ReadToEnd();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum46"&gt;  46:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum47"&gt;  47:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum48"&gt;  48:&lt;/span&gt;                 {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum49"&gt;  49:&lt;/span&gt;                     metadataSet.Load(metadata);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum50"&gt;  50:&lt;/span&gt;                 }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum51"&gt;  51:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception e)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum52"&gt;  52:&lt;/span&gt;                 {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum53"&gt;  53:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; msg = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(CultureInfo.CurrentCulture, Resource.MetadataLoadError, metadataFile) + &lt;span style="color:#006080;"&gt;&amp;quot; : &amp;quot;&lt;/span&gt; + e.Message;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum54"&gt;  54:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; InvalidOperationException(msg, e);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum55"&gt;  55:&lt;/span&gt;                 }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum56"&gt;  56:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum57"&gt;  57:&lt;/span&gt;             }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum58"&gt;  58:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum59"&gt;  59:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum60"&gt;  60:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=192053" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/ria/default.aspx">ria</category><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/silverlight/default.aspx">silverlight</category></item><item><title>Windows 7 RC1 and VMWare Workstation</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2009/05/25/windows-7-rc1-and-vmware-workstation.aspx</link><pubDate>Mon, 25 May 2009 22:15:15 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:174000</guid><dc:creator>dan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/174000.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=174000</wfw:commentRss><description>&lt;p&gt;I just finished upgrading Vista to win7 RC1 on my work laptop.&amp;#160; Everything went smoothly right up until I got to work this morning and tried to use VMWare Workstation, which booted up without issue, but the network wasn’t working.&lt;/p&gt;  &lt;p&gt;“The network bridge on device VMnet0 is not running”&amp;#160; and “VMNet0: Overlapped I/O operation is in progress&amp;#160; which failed to connect” were the messages I was getting.&amp;#160;&amp;#160; The problem was that thewin7 upgrade failed to add the VMWare Bridge Protocol back to my network card.&amp;#160; You could probably add this manually, but I just did a repair from my original msi and a reboot later I was up and running.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=174000" width="1" height="1"&gt;</description></item><item><title>What you might have missed at Mix09</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2009/03/25/what-you-might-have-missed-at-mix09.aspx</link><pubDate>Wed, 25 Mar 2009 10:10:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:168620</guid><dc:creator>dan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/168620.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=168620</wfw:commentRss><description>&lt;a href="http://blogs.objectsharp.com/cs/blogs/dan/MIX09_BlogBling_InterfaceInspiration_CR4_2_6771CF81.jpg"&gt;&lt;img src="http://blogs.objectsharp.com/cs/blogs/dan/MIX09_BlogBling_InterfaceInspiration_CR4_2_thumb_0D677FD8.jpg" title="MIX09_BlogBling_InterfaceInspiration_CR4_2" style="border-width:0px;display:inline;margin-left:0px;margin-right:0px;" alt="MIX09_BlogBling_InterfaceInspiration_CR4_2" width="184" align="left" border="0" height="244"&gt;&lt;/a&gt;   &lt;p&gt;The first and foremost thing that you missed if you didn’t attend &lt;a href="http://live.visitmix.com/" target="_blank"&gt;Mix09&lt;/a&gt; was the opportunity to hang out with &lt;a href="http://blogs.objectsharp.com/cs/blogs/barry/default.aspx" target="_blank"&gt;Barry&lt;/a&gt;, &lt;a href="http://blogs.objectsharp.com/cs/blogs/bruce/default.aspx" target="_blank"&gt;Bruce&lt;/a&gt; and &lt;a href="http://blogs.objectsharp.com/cs/blogs/Dan/default.aspx" target="_blank"&gt;myself&lt;/a&gt;.&amp;nbsp; If you were at Mix09 and didn’t come over and say hello, I can only assume it had something to do with the unnatural resemblance &lt;a href="http://cid-59ff4ebecaa94076.skydrive.live.com/self.aspx/Public/barryevil.jpg" target="_blank"&gt;Barry shares with Dr. Evil&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For me, the two big things at Mix were Expression Blend improvements (preview) and Silverlight 3 beta.&amp;nbsp; If you are interested in something other than those two products check out both keynotes and all of the session videos on the &lt;a href="http://videos.visitmix.com/" target="_blank"&gt;Mix09 site&lt;/a&gt;.&amp;nbsp; For a nice non-technical change of pace I strongly recommend watching the &lt;a href="http://videos.visitmix.com/MIX09/KEY02" target="_blank"&gt;Day 2 keynote&lt;/a&gt; around minute 32 for a great example of UX design.&amp;nbsp; Deborah Adler explains how she set out to change the design of prescription bottles after her grandmother mistakenly took her husbands medication instead of her own.&lt;/p&gt;  &lt;h4&gt;Expression Blend 3 Preview&lt;/h4&gt;  &lt;p&gt;Expression Blend took some &lt;a href="http://expression.microsoft.com/en-us/dd565875.aspx" target="_blank"&gt;really big steps&lt;/a&gt; to become a more mature product for both developers and designers.&amp;nbsp; For a good overview of what’s new in blend check out Douglas Olsen and Christian Schormann in their &lt;a href="http://videos.visitmix.com/MIX09/C04F" target="_blank"&gt;‘The Future of Expression Blend’&lt;/a&gt; session.&lt;/p&gt;  &lt;h5&gt;SketchFlow&lt;/h5&gt;  &lt;p&gt;&lt;i&gt;Not actually available in the preview.&lt;/i&gt; Sketchflow is an amazingly simple way to sketch out some rough UI designs and publish them in a manner that allows you to actually navigate around your app (no code required, but XAML is actually produced) and also provides a mechanism for stakeholders to leave feedback on each of your designs.&amp;nbsp; Hard to do this functionality justice, so be sure to checkout &lt;a href="http://electricbeach.org/?p=145" target="_blank"&gt;Christian Schormann’s blog&lt;/a&gt;, his &lt;a href="http://videos.visitmix.com/MIX09/C01F" target="_blank"&gt;presentation at Mix09&lt;/a&gt; or the &lt;a href="http://videos.visitmix.com/MIX09/KEY01" target="_blank"&gt;Day 1 keynote presentation&lt;/a&gt; (About minute 97), this had a lot of buzz during the week. &lt;/p&gt;  &lt;blockquote&gt;   &lt;h5&gt;A Better IDE&lt;/h5&gt;    &lt;p&gt;Blend 3 also went a long way to make the integration of developers and designers much smoother.&amp;nbsp; Developers get &lt;b&gt;Code-Behind Support &lt;/b&gt;and &lt;b&gt;TFS Functionality&lt;/b&gt; (designers should find this helpful as well hopefully).&amp;nbsp; Designers get SketchFlow and the ability to import files from Adobe Photoshop and Illustrator.&amp;nbsp; Blend can parse these files and replicate the gradients, shapes, layers, etc and create Xaml.&amp;nbsp; A demo of the Adobe support can be found in the &lt;a href="http://videos.visitmix.com/MIX09/KEY01" target="_blank"&gt;Keynote Day 1&lt;/a&gt; (again around the 97 minute mark) and the ‘&lt;a href="http://videos.visitmix.com/MIX09/C28M" target="_blank"&gt;Integrating Microsoft Expression Blend with Adobe Creative Suite&lt;/a&gt;‘ session.&amp;nbsp; Designers (and those of us that pretend to be) will also enjoy the new simple &lt;b&gt;Sample Data&lt;/b&gt; panel to generate sample data, or read it from an xml file.&amp;nbsp; This gives you a very simple way to see your Xaml in the designer exactly how you would see in the actual application.&amp;nbsp; There is a sample in the &lt;a href="http://videos.visitmix.com/MIX09/KEY01" target="_blank"&gt;Keynote Day 1&lt;/a&gt; (minute 97, it was an exciting point of the keynote).&lt;/p&gt;    &lt;h4&gt;Silverlight 3&lt;/h4&gt;    &lt;p&gt;There was a &lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx" target="_blank"&gt;beta release of Silverlight 3&lt;/a&gt; made available at Mix this year as well as a new drop of the &lt;a href="http://www.codeplex.com/Silverlight" target="_blank"&gt;Silverlight Toolkit&lt;/a&gt;. &lt;a href="http://blogs.msdn.com/sburke/archive/2009/03/20/silverlight-toolkit-march-2009-release.aspx" target="_blank"&gt;Shawn Burke&lt;/a&gt; has a great breakdown of the Toolkit drop and the work they did to make it work with Silverlight 2 and 3.&amp;nbsp; Silverlight 3 has &lt;a href="http://blogs.msdn.com/jonbox/archive/2009/03/22/what-s-new-in-silverlight-3.aspx" target="_blank"&gt;made many changes&lt;/a&gt; that will make working in Silverlight a lot less painful, bringing it more in line with WPF.&amp;nbsp; Checkout the ‘&lt;a href="http://videos.visitmix.com/MIX09/T14F" target="_blank"&gt;What’s New In Microsoft Silverlight 3&lt;/a&gt;’ session video for a great overview of all the features.&amp;nbsp; The big features that I found interesting were &lt;b&gt;Out Of Browser Support&lt;/b&gt; (&lt;a href="http://videos.visitmix.com/MIX09/T45F" target="_blank"&gt;video&lt;/a&gt;), which &lt;a href="http://blogs.objectsharp.com/cs/blogs/bruce/archive/2009/03/24/where-does-off-browser-silverlight-run.aspx" target="_blank"&gt;Bruce explains isn’t really out out of browser&lt;/a&gt;, but is still a great feature for giving your Silverlight app that WPF application feel.&amp;nbsp; You can couple out of browser with the new &lt;b&gt;Offline support&lt;/b&gt; (&lt;a href="http://videos.visitmix.com/MIX09/T78M" target="_blank"&gt;video&lt;/a&gt;) and really turn your Silverlight application into an &lt;a href="http://blogs.objectsharp.com/cs/blogs/bruce/archive/2009/03/19/off-line-and-off-browser-silverlight.aspx" target="_blank"&gt;almost fully fledged desktop application&lt;/a&gt; that can run across several different operating systems.&amp;nbsp; &lt;/p&gt;    &lt;p&gt;&lt;b&gt;Application Navigation Framework&lt;/b&gt; is great way to get some built-in navigation between pages, I’m really loving this feature.&amp;nbsp; &lt;a href="http://timheuer.com/blog/archive/2009/03/22/silverlight-navigation-framework-and-uri-routing.aspx" target="_blank"&gt;Tim Heuer&lt;/a&gt; shows you how to do some URI routing with the&lt;b&gt; deep-linking&lt;/b&gt; that is available with this framework as well.&amp;nbsp; There doesn’t seem to be a lot of info out on the internet about this feature, but you can create a new Silverlight Navigation Project and the stubs it creates will explain everything you need to know.&lt;/p&gt;    &lt;p&gt;The other features that will probably be of interest to you include &lt;b&gt;Perspective 3D&lt;/b&gt; for easy, yet stunning, 3D transforms, the &lt;b&gt;Blur Effect&lt;/b&gt;, &lt;b&gt;Element-to-Element Binding &lt;/b&gt;(yay! It’s about time), &lt;b&gt;Merged Resource Dictionaries&lt;/b&gt;, and &lt;b&gt;Style Inheritance.&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Mix09 showed us that in the next few months as Silverlight 3 and Expression Blend 3 get released, the designer-developer workflow gets easier, and you no longer have any excuses to avoid using Silverlight in your personal or &lt;a href="http://videos.visitmix.com/MIX09/T69M" target="_blank"&gt;business applications&lt;/a&gt;.&amp;nbsp; If you haven’t even looked at Silverlight yet, get cracking.&amp;nbsp; If you want to try SL3 and still deploy SL2 apps, check out this &lt;a href="http://www.jeff.wilcox.name/2009/03/sxs-sl2-sl3-building/" target="_blank"&gt;article by Jeff Wilcox&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=168620" width="1" height="1"&gt;</description><category domain="http://blogs.objectsharp.com/CS/blogs/dan/archive/tags/Silverlight+Mix09/default.aspx">Silverlight Mix09</category></item><item><title>UI Safe BindingSource</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2009/01/12/ui-safe-bindingsource.aspx</link><pubDate>Mon, 12 Jan 2009 15:08:00 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:160926</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/160926.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=160926</wfw:commentRss><description>
&lt;p&gt;It caught me off guard that the BindingSource is not really UI thread safe.&amp;nbsp; The situation we had was a model running on a background thread that was updating a dataset.&amp;nbsp; My view contained a grid, that was bound to a BindingSource which was bound to a table in that dataset.&amp;nbsp;&amp;nbsp;&amp;nbsp; The result was cross-threading exceptions being thrown as soon as we opened our view.&amp;nbsp; The thread that updates the dataset is the same thread that fires off the events that tell the BindingSource the underlying data has changed, which in turn tells the UI piece that data has changed, all the while still on that background thread. &lt;/p&gt;
  
&lt;p&gt;My first pass at fixing the issue was to override OnListChanged in the BindingSource and marshal the thread back on to the UI thread.&amp;nbsp; This seemed to solve the problem until we bound to the entire dataset instead of just a table.&amp;nbsp; Internally the BindingSource creates a BindingSource for every list inside the collection of lists.&amp;nbsp; In this case, for every table in the dataset.&amp;nbsp; &lt;/p&gt;
  
&lt;p&gt;Thanks to Reflector and the ability to debug into the source code, I found a way to get around the creation of more BindingSources, and instead created my own ObjectsharpBindingSource internally.&amp;nbsp; &lt;/p&gt;
  
&lt;p&gt;This solution is probably only happy path, but that is the only path my code was following so that’s the only code I looked into. &lt;/p&gt;
  
&lt;p&gt;Comments?&amp;nbsp; Questions?&amp;nbsp; Concerns?&amp;nbsp; Don’t like my code?&amp;nbsp; Better idea? Let me know, feedback is always welcome.&lt;/p&gt;
  
&lt;p&gt;The idea behind UIThreadMarshal can be found at this great article by &lt;/p&gt;
&lt;div style="overflow:auto;"&gt;
&lt;blockquote&gt;   
&lt;pre&gt;&lt;span&gt;    public&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; ObjectsharpBindingSource : BindingSource&lt;br&gt;    {&lt;br&gt;        &lt;span&gt;private&lt;/span&gt; &lt;span&gt;delegate&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; OnListChangedDelegate(ListChangedEventArgs e);&lt;br&gt;        &lt;span&gt;private&lt;/span&gt; Dictionary&amp;lt;&lt;span&gt;string&lt;/span&gt;, ObjectsharpBindingSource&amp;gt; relatedBindingSources;&lt;br&gt;&lt;br&gt;        &lt;span&gt;public&lt;/span&gt; ObjectsharpBindingSource() : &lt;span&gt;base&lt;/span&gt;()&lt;br&gt;        {&lt;br&gt;            relatedBindingSources = &lt;span&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span&gt;string&lt;/span&gt;, ObjectsharpBindingSource&amp;gt;();&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span&gt;public&lt;/span&gt; ObjectsharpBindingSource(&lt;span&gt;object&lt;/span&gt; dataSource, &lt;span&gt;string&lt;/span&gt; dataMember)&lt;br&gt;            : &lt;span&gt;base&lt;/span&gt;(dataSource, dataMember)&lt;br&gt;        {&lt;br&gt;        }&lt;br&gt;        &lt;br&gt;        &lt;span&gt;public&lt;/span&gt; &lt;span&gt;override&lt;/span&gt; CurrencyManager GetRelatedCurrencyManager(&lt;span&gt;string&lt;/span&gt; dataMember)&lt;br&gt;        {&lt;br&gt;            CurrencyManager result = &lt;span&gt;null&lt;/span&gt;;&lt;br&gt;            &lt;span&gt;if&lt;/span&gt; (&lt;span&gt;string&lt;/span&gt;.IsNullOrEmpty(dataMember))&lt;br&gt;            {&lt;br&gt;                &lt;span&gt;//If you call the CurrencyManager property you end up in a recursive loop&lt;/span&gt;&lt;br&gt;                Type t = &lt;span&gt;this&lt;/span&gt;.GetType().BaseType;&lt;br&gt;                result = t.InvokeMember("&lt;span&gt;currencyManager&lt;/span&gt;", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, &lt;span&gt;null&lt;/span&gt;, &lt;span&gt;this&lt;/span&gt;, &lt;span&gt;null&lt;/span&gt;) &lt;span&gt;as&lt;/span&gt; CurrencyManager;&lt;br&gt;            }&lt;br&gt;            &lt;span&gt;else&lt;/span&gt; &lt;span&gt;if&lt;/span&gt; (dataMember.IndexOf("&lt;span&gt;.&lt;/span&gt;") != -1)&lt;br&gt;            {&lt;br&gt;                &lt;span&gt;//dot notation is not supported by the BindingSource&lt;/span&gt;&lt;br&gt;                result = &lt;span&gt;null&lt;/span&gt;;&lt;br&gt;            }&lt;br&gt;            &lt;span&gt;else&lt;/span&gt; &lt;span&gt;if&lt;/span&gt; (relatedBindingSources.ContainsKey(dataMember))&lt;br&gt;            {&lt;br&gt;                result = relatedBindingSources[dataMember].CurrencyManager;&lt;br&gt;            }&lt;br&gt;            &lt;span&gt;else&lt;/span&gt;&lt;br&gt;            {&lt;br&gt;                ObjectsharpBindingSource bindingSource = &lt;span&gt;new&lt;/span&gt; ObjectsharpBindingSource(&lt;span&gt;this&lt;/span&gt;, dataMember);&lt;br&gt;                &lt;span&gt;this&lt;/span&gt;.relatedBindingSources.Add(dataMember, bindingSource);&lt;br&gt;                result = bindingSource.CurrencyManager;&lt;br&gt;            }&lt;br&gt;            &lt;span&gt;return&lt;/span&gt; result;&lt;br&gt;        }&lt;br&gt;       &lt;br&gt;        &lt;span&gt;protected&lt;/span&gt; &lt;span&gt;override&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; OnListChanged(System.ComponentModel.ListChangedEventArgs e)&lt;br&gt;        {&lt;br&gt;            &lt;span&gt;if&lt;/span&gt; (UIThreadMarshal.InvokeRequired)&lt;br&gt;            {&lt;br&gt;                OnListChangedDelegate changeDelegate = &lt;span&gt;new&lt;/span&gt; OnListChangedDelegate(&lt;span&gt;base&lt;/span&gt;.OnListChanged);&lt;br&gt;                UIThreadMarshal.Invoke(&lt;span&gt;new&lt;/span&gt; MethodInvoker( &lt;span&gt;delegate&lt;/span&gt; { OnListChanged(e); } ));&lt;br&gt;            }&lt;br&gt;            &lt;span&gt;else&lt;/span&gt;&lt;br&gt;            {&lt;br&gt;                &lt;span&gt;base&lt;/span&gt;.OnListChanged(e);&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    }&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=160926" width="1" height="1"&gt;</description></item><item><title>New MS (Dundas) Chart Controls</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2008/11/12/new-ms-dundas-chart-controls.aspx</link><pubDate>Wed, 12 Nov 2008 01:46:28 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:155382</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/155382.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=155382</wfw:commentRss><description>&lt;p&gt;The client I’m currently working with needed a charting control that would allow us to create something similar to a Gantt chart.&amp;#160; Unfortunately the control suite we were using wasn’t quite up to the task.&amp;#160; Fortunately a fellow Objectsharpee (and former Dundas employee) told me that Microsoft was going to be putting the Dundas controls they had purchased into the framework, even better was that it had been released just the week previous.&amp;#160; I’ve never used Dundas controls previous to this, so I’m not 100% clear what the feature set differences are, or if there are any.&amp;#160; The MS Chart control did everything we needed and it was dead simple to do.&amp;#160; &lt;/p&gt;  &lt;p&gt;All you need to do is download and install the &lt;a target="_blank"&gt;small installer&lt;/a&gt; and have &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7&amp;amp;displaylang=en" target="_blank"&gt;.Net 3.5 SP1&lt;/a&gt; already installed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EE8F6F35-B087-4324-9DBA-6DD5E844FD9F&amp;amp;displaylang=en" target="_blank"&gt;Chart Docs&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&amp;amp;displaylang=en" target="_blank"&gt;Chart Controls&lt;/a&gt;     &lt;br /&gt;&lt;a target="_blank"&gt;Chart Forums&lt;/a&gt; – Note: Not a lot of information in the forums as of this posting, but the Dundas support forums are filled with great, applicable, information.    &lt;br /&gt;&lt;a href="http://code.msdn.microsoft.com/mschart" target="_blank"&gt;Chart Samples&lt;/a&gt;&lt;/p&gt; Also, &lt;a href="http://blogs.msdn.com/alexgor/default.aspx" target="_blank"&gt;Alex Gorev&lt;/a&gt; has started a blog all about the new data visualization in the .Net Framework.   &lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=155382" width="1" height="1"&gt;</description></item><item><title>TFS Powershell PSSnapin</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2008/11/12/tfs-powershell-pssnapin.aspx</link><pubDate>Wed, 12 Nov 2008 01:19:11 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:155381</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/155381.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=155381</wfw:commentRss><description>&lt;p&gt;The &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBD14EEA-781F-45A1-8C46-9F6BA2F68BF0&amp;amp;displaylang=en" target="_blank"&gt;October Team Foundation Power Tools&lt;/a&gt; drop includes three new features: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;TFS Power Shell Extensions &lt;/strong&gt; &lt;li&gt;&lt;strong&gt;TFS Windows Shell Extensions&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;Team Members Tool&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The only one I care about is the Powershell extensions. &lt;a href="http://keithhill.spaces.live.com/Blog/cns!5A8D2641E0963A97!6691.entry" target="_blank"&gt;Keith Hill&lt;/a&gt; has a great post with some examples.&amp;nbsp; I already had a script that made some .NET assembly calls to get me the latest good build off of TFS.&amp;nbsp; I converted that script to use the new snapin, and posted it below.&amp;nbsp; I’m sure some of this is not best practices, feel free to let me know if you have a cleaner implementation.&lt;/p&gt;&lt;pre&gt;(Get-TfsServer -Name myTfsServer).GetService(Microsoft.TeamFoundation.Build.Client
.IBuildServer]).QueryBuilds("&lt;span style="color:#8b0000;"&gt;myProjectName&lt;/span&gt;", "&lt;span style="color:#8b0000;"&gt;myBuildName&lt;/span&gt;") | &lt;/pre&gt;&lt;pre&gt;where { $_.BuildDefinition.LastGoodBuildUri -eq $_.Uri } | select DropLocation&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Two lines in my profile.ps1:&lt;/pre&gt;
&lt;p&gt;[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") &lt;br&gt;[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client") &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=155381" width="1" height="1"&gt;</description></item><item><title>SQL Server – Dropped my default database</title><link>http://blogs.objectsharp.com/CS/blogs/dan/archive/2008/07/18/sql-server-dropped-my-default-database.aspx</link><pubDate>Fri, 18 Jul 2008 19:14:38 GMT</pubDate><guid isPermaLink="false">4e5c2b59-774a-4189-b009-1bb73818b493:149134</guid><dc:creator>dan</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.objectsharp.com/CS/blogs/dan/comments/149134.aspx</comments><wfw:commentRss>http://blogs.objectsharp.com/CS/blogs/dan/commentrss.aspx?PostID=149134</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Today I learned an important lesson about Sql Server 2005, don’t change your default database unless you absolutely have to.&amp;nbsp; I set mine to DatabaseX and then I promptly dropped DatabaseX.&amp;nbsp; When I tried to log in I got a nice error message &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cannot Open User Default Database, Login Failed&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I didn’t setup the VM that I was using, so I didn’t know the SA password.&amp;nbsp; I basically had no way to get back into the server.&amp;nbsp; So if you ever find yourself in this predicament, execute the following from the command line:&lt;/p&gt;&lt;pre&gt;C:\&amp;gt; sqlcmd -E -d master 
1&amp;gt; ALTER LOGIN [&lt;em&gt;YOUR &lt;/em&gt;&lt;em&gt;USER&lt;/em&gt;&lt;em&gt; NAME HERE&lt;/em&gt;] WITH DEFAULT_DATABASE=master 
2&amp;gt; GO&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;That will reset your default database back to master and you can login again.&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogs.objectsharp.com/CS/aggbug.aspx?PostID=149134" width="1" height="1"&gt;</description></item></channel></rss>