<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.wintellect.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>Wintellog</title><link>http://www.wintellect.com/CS/blogs/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>The Swedes and Tourists</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/07/02/the-swedes-and-tourists.aspx</link><pubDate>Thu, 02 Jul 2009 22:10:39 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8225</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;The estimable &lt;a href="http://blogs.msdn.com/oldnewthing"&gt;Raymond Chen&lt;/a&gt; posted a funny story &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2009/07/02/9812316.aspx"&gt;today&lt;/a&gt; about an experience he had in Sweden. &lt;em&gt;(Make sure you read Raymond's post so you can understand one of the greatest blog comments &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2009/07/02/9812316.aspx"&gt;ever&lt;/a&gt;!)&lt;/em&gt; Anyway, I had to laugh out loud because I had something similar happen to me in Sweden as well. A number of years ago, I had some work in Stockholm Sweden, but as I had never been, I arrived a few days early so I could do a little sightseeing and enjoy the culture. 
&lt;/p&gt;&lt;p&gt;Having read up on Stockholm before arriving, the first place I wanted to see was &lt;a href="http://en.wikipedia.org/wiki/Gamla_stan"&gt;Gamla stan&lt;/a&gt;, the old town. Right after throwing my bags into my hotel room, I made a beeline down there on the amazing Swedish public transportation. There was only one small problem, I didn't get to pick the time for my business trip. It was December. It was also, as the hotel clerk informed me, one of the coldest days Stockholm had seen in 25 years.
&lt;/p&gt;&lt;p&gt;No big deal. I grew up in Alaska so knew what cold was. I was also living in New England at the time so I made sure to pack nice warm clothes and was prepared. When I started walking around, I realized that it was not just cold it was seriously cold. Something like -15 F with a nice stiff wind blowing. I was doing OK, but my camera's batteries were dying after one or two pictures so I had to keep the camera in my coat. The consolation was that there were no other people at all out so all my building pictures were unobstructed.
&lt;/p&gt;&lt;p&gt;I'd been poking around for an hour or two and was standing in a decent size courtyard that was about the size of a football pitch (a soccer field to my American readers) and the light starting to get nice for pictures. As I was waiting for a little better light, I was looking at my map. Out of the corner of my eye, I noticed a bundled up woman walking vigorously in my direction.
&lt;/p&gt;&lt;p&gt;The woman walked right up to me and said in English "Are you lost? Can I help you? Are you OK?" all in a big rush. I told her that I was fine but waiting for the sun to go down a little more so I could get a better picture of one of the buildings. She looked at me a little strange. 
&lt;/p&gt;&lt;p&gt;I then asked her "How do you know to speak English to me?"
&lt;/p&gt;&lt;p&gt;Her response: "Only an American would be crazy enough to be out taking pictures on a day so cold even us Swedes are smart enough to stay inside!"
&lt;/p&gt;&lt;p&gt;With that she turned on her heal and marched quickly away with my uncontrollable laughter in the background.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8225" width="1" height="1"&gt;</description></item><item><title>Prism Presentation – Code and Slides</title><link>http://www.wintellect.com/CS/blogs/rrobinson/archive/2009/07/01/prism-presentation-code-and-slides.aspx</link><pubDate>Wed, 01 Jul 2009 22:10:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8218</guid><dc:creator>rrobinson</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;I recently had the pleasure of speaking at &lt;A href="http://codestock.org/"&gt;CodeStock&lt;/A&gt; 2009 and was very impressed with the conference overall.&amp;nbsp; The folks behind this conference put in a lot of work and did a really great job.&amp;nbsp; I got the chance to see some really good presentations as well.&amp;nbsp; I look forward to attending CodeStock in the future.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The code and slides will be posted soon at the &lt;A href="http://codestock.org/"&gt;CodeStock&lt;/A&gt; site, but I wanted to note a few things about the code that I’m including for those that were present for my talk on Prism.&amp;nbsp; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The AlbumSearch solution included is the one we worked through in the presentation.&amp;nbsp; In the interest of time, I had skipped the creation of separate folders/namespaces for the Views, ViewModels, etc during the presentation. For the download, I have cleaned that up and placed everything in a much more realistic (cleaner) project structure.&lt;/LI&gt;
&lt;LI&gt;While creating the SearchCommand in the SearchModuleViewModel during the presentation, I had skipped adding a CanExecute handler in the interest of time.&amp;nbsp; Someone asked me about it later and I promised to provide an example in the download and I have done so.&amp;nbsp; You’ll notice that the Search button now enables only when there are at least 3 letters typed in the Search Box.&amp;nbsp; (NOTE:&amp;nbsp; The only Artist Names defined in my test data are:&amp;nbsp; Pink Floyd, Mars Volta, and Tool.&amp;nbsp; Anything else will likely blow up as there is no Exception handling in the demo).&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;During the presentation, I mentioned a much larger solution that goes through each concept of Prism such as Modularity (and the various ways to load Modules), UI Composition, etc.&amp;nbsp; I have included my PrismConcepts solution in the download as well.&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;I added a link to a &lt;A href="http://wpfslguidance.codeplex.com/"&gt;WPF and Silverlight Comparison&lt;/A&gt; paper from &lt;A href="http://www.wintellect.com/"&gt;Wintellect&lt;/A&gt; to the Resources slide as promised. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;I think that covers it.&amp;nbsp; Thanks again to the organizers, the sponsors, the presenters, and all the attendees of &lt;A href="http://codestock.org/"&gt;CodeStock&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Here’s the &lt;A href="http://www.r2musings.com//downloads/prismtalk.zip"&gt;Code and Slides&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8218" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/rrobinson/archive/tags/WPF/default.aspx">WPF</category><category domain="http://www.wintellect.com/CS/blogs/rrobinson/archive/tags/Prism/default.aspx">Prism</category><category domain="http://www.wintellect.com/CS/blogs/rrobinson/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Paraffin3.1: New and Improved!</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/28/paraffin3-1-new-and-improved.aspx</link><pubDate>Sun, 28 Jun 2009 17:34:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8199</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><description>&lt;P&gt;Aren't "New and Improved" the most over used, and contradictory, terms in the marketer's dictionary? How can something and be new, but yet improved because if it is improved that cancels out the new. My point is that I want to tout an updated release of Paraffin, but I guess I'm being too much of an engineer instead of a marketer which is not a good idea when you something new and improved. Argh! I don't think I'm helping myself here much. How about I express it this way; Paraffin has some improved things and some new things both of which I think users will greatly appreciate.&lt;/P&gt;
&lt;P&gt;For those of you wondering what Paraffin does it's a tool I wrote to help produce &lt;A href="http://wix.sourceforge.net/manual-wix3/main.htm"&gt;Windows Installer XML (WiX)&lt;/A&gt; fragments of files in your installations. The big feature of Paraffin is that is automates the management of your files because it keeps consistent the component ids and GUIDs as well as file and directory ids as you add files to your installer. Component GUID management is one of the biggest pain points on any WiX projects, especially those that have many files to install.&lt;/P&gt;
&lt;P&gt;For background, I'll refer you to the WiX 3.0 &lt;A href="http://wix.sourceforge.net/manual-wix3/main.htm"&gt;documentation&lt;/A&gt;, as well as the articles I wrote on the motivation behind Paraffin, &lt;A href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/18/wix-hints-for-new-users-part-1-of-3.aspx"&gt;Part 1&lt;/A&gt;, &lt;A href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/19/wix-the-pain-of-wix-part-2-of-3.aspx"&gt;Part 2&lt;/A&gt;, and &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/12/22/paraffin-3-0-now-with-full-wix-3-0-support.aspx"&gt;Part 3&lt;/A&gt;. Those articles were written for WiX 2.0, but I updated Paraffin with full to WiX 3.0 support back in &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/03/04/7421.aspx#7656"&gt;December 2008&lt;/A&gt; when WiX 3.0 went to Beta. Paraffin started out as just something that scratched my itch and gave me a chance to play with the brand new LINQ to XML stuff in Visual Studio 2008 Beta 2. It's been gratifying how many people have told me they have used Paraffin and, even better, asked for feature enhancements. Keep those complaints and requests coming!&lt;/P&gt;
&lt;P&gt;Many people have asked about the status of Paraffin now that WiX 3.0 has a much-improved &lt;A href="http://blogs.msdn.com/icumove/archive/2009/03/06/wix-heat-wave-brings-changes.aspx"&gt;Heat&lt;/A&gt; program that handles updating fragments. First off, I am thrilled that Brian Rogers is making Heat much more capable and useful. The WiX team as a whole has done an amazing job of making installers easier to write for mere mortals. Anything that can wrap the interesting API known as Windows Installer is always a good thing. With Heat now doing many of the things Paraffin does, and way more, if you're in the planning stages of your install you need to seriously look at the whole WiX approach to auto generating fragments. The WiX developers are much smarter than I am and are thinking &lt;A href="http://blogs.msdn.com/icumove/archive/2009/05/31/right-corner-wix-heat-left-corner-thousands-of-files.aspx"&gt;hard&lt;/A&gt; about how to solve these difficult problems. Paraffin meets my needs, and may meet yours, but definitely look at the Heat approach.&lt;/P&gt;
&lt;P&gt;So let's get on with the new and improved. In talking with several people that use Paraffin for their installs, I found that everyone wanted the -guids option, which told Paraffin to put in the GUIDs for components, to be on by default. That was a simple enough change, but if you are updating a file created with 3.0 and you didn't want automatic GUIDs for components, I still respect that setting so you can add your GUIDs manually. I fixed a few other smaller things. The first was that I now do not include hidden files in the output. Also, I made all file and directory comparisons case insensitive to avoid Paraffin seeing the directory as different than what was previously processed on an update.&lt;/P&gt;
&lt;P&gt;As I was working on the code, I decided to remove the option to upgrade your WiX 2.0 Paraffin produced files to WiX 3.0. As nearly everyone is now on WiX 3.0 and the conversion is a onetime operation, I probably am not upsetting too many people. Additionally, the conversion code was making development more complicated. If you're still working with WiX 2.0, download &lt;A href="http://www.wintellect.com/CS/files/folders/4332/download.aspx"&gt;Paraffin 1.04&lt;/A&gt;. If you need the conversion of WiX 2.0 Paraffin produced files to WiX 3.0, download &lt;A href="http://www.wintellect.com/CS/files/folders/7420/download.aspx"&gt;Paraffin 3.0&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;My original intent with Paraffin was a tool you would use to take directories of files you want to install and make that easy to maintain. My thinking was that you would do all your main INSTALLDIR portions manually. However, it turns out &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/12/22/paraffin-3-0-now-with-full-wix-3-0-support.aspx#7652"&gt;many&lt;/A&gt;, &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/12/22/paraffin-3-0-now-with-full-wix-3-0-support.aspx#7770"&gt;many&lt;/A&gt;, &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/12/22/paraffin-3-0-now-with-full-wix-3-0-support.aspx#8187"&gt;many&lt;/A&gt; people want to point Paraffin at all their files and essentially generate the fragment for everything under INSTALLDIR. The problem was that Paraffin 3.0 and prior would always insert the Directory element specified on the command line. Well, no more! &lt;EM&gt;&amp;lt;grin&amp;gt;&lt;/EM&gt;. If you run the initial Paraffin run with the new -norootdirectory switch, Paraffin will start everything under the DirectoryRef element. That new and improved feature should make lots of people happy!&lt;/P&gt;
&lt;P&gt;Looking at how Heat tackled the Component and File Id attributes problem was enlightening. Paraffin had originally used what I called a custom value, along with an incrementing counter to generate values for the Id attribute. That worked fine, but several people had reported that on very large projects, you could end up with Id collisions, which is not happiness in Windows Installer land. Heat is now using GUIDs for Id attributes, through a cool custom generation scheme. I decided to go a similar route, but since I did my updating based on filenames instead of directories, I felt it was safe enough to use normal GUIDs. &lt;/P&gt;
&lt;P&gt;The downside is that you lose readability on the Id attributes when looking at Paraffin generated .WXS files. This will also affect WiX error message readability as well. However, I felt the tradeoff was worth it because you’ll never have to worry about Id attribute conflicts again and it allows me to introduce a new feature, which I’ll discuss in a second. I dropped the previous -custom switch in favor of -groupname to specify the Id attribute of the ComponentGroup. If you have scripts that call Paraffin, I redirect the -custom switch to -groupname. I’ve tried to keep backwards compatibility in mind.&lt;/P&gt;
&lt;P&gt;For those of you like me who have a bunch of Paraffin produced files using Paraffin 3.0, what does this new Id attribute naming scheme mean when you update a file? Fortunately, nothing. I’ve introduced the concept of file versions in the comment where I store the file creation options. If the file is a Paraffin 3.0 file, it has no version so I use the old Id attribute-naming scheme for consistency. It wasn’t that hard to code and it keeps backwards compatibility. For all newly created Paraffin .WXS files, you obviously get file version 2 so I use the new GUID based scheme.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://zvolkov.com/blog/"&gt;Andriy Volkov&lt;/A&gt; had a very interesting &lt;A href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/12/22/paraffin-3-0-now-with-full-wix-3-0-support.aspx#7947"&gt;idea&lt;/A&gt; for a feature where Paraffin would look for specific files as it was recursing directories, and insert their contents into the current Directory element. That sounded like an excellent idea to me. This feature is what dictated changing the Id attribute scheme, as I wanted to avoid conflicts. With the file insertion capabilities now, you can put things like COM and service registration next the files themselves to make your installs more modular.&lt;/P&gt;
&lt;P&gt;Paraffin looks for .ParaffinMold files, which are nothing more than WiX fragments. That way you have the full .XSD file magic when creating the files to avoid errors. What Paraffin looks for the DirectoryRef element in the .ParaffinMold file and inserts all child elements directly into the output file. Paraffin does not use the DirectoryRef Id attribute nor is there any validity checking. Below is an example of a .ParaffinMold file that will insert a Component element that creates a registry key.&lt;/P&gt;
&lt;P style="LINE-HEIGHT:normal;MARGIN-BOTTOM:12pt;BACKGROUND:white;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;xml&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;version&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;1.0&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;encoding&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;utf-8&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;?&amp;gt; &lt;BR&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Wix&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;http://schemas.microsoft.com/wix/2006/wi&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Fragment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;DirectoryRef&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;INSTALLDIR&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Id&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;HappyID&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;" &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Guid&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;PUT-GUID_HERE&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;RegistryKey&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Root&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;HKLM&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;" &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;SOFTWARE\My Company\My Product&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;RegistryValue&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;InstallRoot&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Value&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;[INSTALDIR]&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;" &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Type&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:red;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;KeyPath&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;yes&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:black;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;"&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;RegistryKey&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Component&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;DirectoryRef&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Fragment&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt; &lt;BR&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:#a31515;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;Wix&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';COLOR:blue;FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';FONT-SIZE:10pt;mso-fareast-font-family:'Times New Roman';"&gt; &lt;/SPAN&gt;
&lt;P&gt;So there’s the new and improved Paraffin! Please let me know how it works for you. As always, please let me know if you have more feature requests for Paraffin. I’d also love to know what you think of Paraffin. Thanks for using it! Grab version 3.1 from this &lt;A href="http://www.wintellect.com/CS/files/folders/8198/download.aspx"&gt;link&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[Edit 6/29: Per Rob Mensching's comment below, fixed the RegistryKey example.]&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8199" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jrobbins/archive/tags/John+Robbins/default.aspx">John Robbins</category></item><item><title>Do PDB Files Affect Performance?</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/19/do-pdb-files-affect-performance.aspx</link><pubDate>Fri, 19 Jun 2009 05:26:13 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8142</guid><dc:creator>jrobbins</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;After a detour into &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/16/how-does-vs2010-historical-debugging-work.aspx"&gt;Historical Debugging&lt;/a&gt;, it’s time to come back to return to answering questions about PDB files. Here’s a &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/26/visual-studio-remote-debugging-and-pdb-files.aspx#8058"&gt;question&lt;/a&gt; from Justin:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Thanks for the great post once again. I was looking forward to your debugging virtual training, but unfortunately it was cancelled. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The company I work for is pushing pack against building release mode binaries with debug information generated, one of the reasons I signed up for the class :). They are afraid performance will be affected.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;My question is what are the best command line arguments for generating symbols in release mode? Also is there somewhere I can reference to show that there should be no performance hits.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m sorry about the canceled class, but the good news is that Mastering .NET Debugging was &lt;a href="http://www.wintellect.com/Registration/WintellectRegistration.aspx"&gt;rescheduled&lt;/a&gt; to July 14-15.&lt;/p&gt;  &lt;p&gt;The executive summary answer: no, generating PDB files will have no impact on performance whatsoever. As for references that I can point you too, I haven't found any on the web that answer the exact question so let me take both .NET and native development in turn.&lt;/p&gt;  &lt;p&gt;Recently, the always-readable Eric Lippert wrote a great post &lt;a href="http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx"&gt;What Does the Optimize Switch Do?&lt;/a&gt; where he discusses the optimizations done by the compiler and Just in Time (JIT) compiler. (Basically, you can sum it up as the JITter does all the real optimization work.) There's a bit of confusion on the C# and VB.NET compiler switches around as there are four different /debug switches, /debug, /debug+, /debug:full, and /debug:pdb-only. I contributed to that confusion because I thought /debug:pdb-only did something different that was better for release builds than the other three /debug switches. &lt;/p&gt;  &lt;p&gt;All four switches all do the same thing in that they cause a PDB file to be generated but why are there four switches to do the same thing? Do Microsoft developers really love parsing slightly different command line options? The real reason: history. Back in .NET 1.0 there were differences, but in .NET 2.0 there isn't. It looks like .NET 4.0 will follow the same pattern. After double-checking with the CLR Debugging Team, there is no difference at all. &lt;/p&gt;  &lt;p&gt;What controls whether the JITter does a debug build is the /optimize switch. Building with /optimize- will add an attribute, &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggableattribute(loband).aspx"&gt;DebuggableAttribute&lt;/a&gt;, in the assembly and setting the &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggableattribute.debuggingmodes.aspx"&gt;DebuggingMode&lt;/a&gt; parameter to DisableOptimizations. It doesn't take a Rhodes Scholar to figure out that DisableOptimizations does exactly what it says. &lt;/p&gt;  &lt;p&gt;The bottom line is that you want to build your release builds with /optimize+ and any of the /debug switches so you can debug with source code. Read the Visual Studio &lt;a href="http://msdn.microsoft.com/en-us/library/aa187919.aspx"&gt;documentation&lt;/a&gt; to see how where to set those switches in the different types of projects.&lt;/p&gt;  &lt;p&gt;It's easy to prove these are the optimal switches. Taking my &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/12/22/paraffin-3-0-now-with-full-wix-3-0-support.aspx"&gt;Paraffin&lt;/a&gt; program, I compiled one build with /optimize+ and /debug, and another with just /optimize+. &lt;/p&gt;  &lt;p&gt;which is the same as /debug+ and /debug, and the other with /optimize+ /debug:pdbonly to show the differences, which is the root of how we got it wrong. After compiling, I used &lt;a href="http://msdn.microsoft.com/en-us/library/f7dy01k1(VS.80).aspx"&gt;ILDASM&lt;/a&gt; with the following command line to get the raw information from the binaries&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;ILDASM /out=Paraffin.IL Paraffin.exe&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Using a diff tool you'll see that the IL itself is identical between both builds. The main difference will be in the &lt;a href="http://msdn.microsoft.com/en-us/library/adcetswf.aspx"&gt;DebuggableAttribute&lt;/a&gt; declaration for the assembly. When built /optimize+ and a /debug switch, a &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.debuggableattribute.debuggingmodes.aspx"&gt;DebuggingMode.IgnoreSequencePoints&lt;/a&gt; is passed to the DebuggableAttribute to tell the JIT compiler that it doesn't need to load the PDB file in order to correctly JIT the IL. A value of DebuggingMode.Default is also OR'd in, but that value is ignored.&lt;/p&gt;  &lt;p&gt;Like .NET, building PDB files has nothing to do with optimizations so have zero impact on the performance of an application. If you have a manager who in Justin's words is &amp;quot;afraid performance will be affected&amp;quot; here's what I tell them.&amp;#160; (Sadly, I've run into a few more managers who say that than I care to count).&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;That might be true on other operating systems, but not Windows. If you think they do, then why does Microsoft build every single product they ship with PDB files turned on for both debug and release builds? They wrote the compiler, they wrote the linker, and they wrote the operating system so they know &lt;strong&gt;&lt;u&gt;&lt;em&gt;exactly&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt; what the effects are. Microsoft has more people focused on performance than any other software company in the world. If there were any performance impact at all, they wouldn't do it. Period. Performance isn't the only thing at Microsoft, it's &lt;strong&gt;&lt;u&gt;&lt;em&gt;everything&lt;/em&gt;&lt;/u&gt;&lt;/strong&gt;. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Where .NET is pretty simple as there's really only two switches, the appropriate optimization switches are dependent on many individual application factors. What I can tell you is what the switches you need to set to generate PDB files correctly in release builds.&lt;/p&gt;  &lt;p&gt;For CL.EXE, the compiler, you need to add &lt;a href="http://msdn.microsoft.com/en-us/library/958x11bc.aspx"&gt;/Zi&lt;/a&gt; to have it put debugging symbols into the .OBJ file. For LINK.EXE, the linker, you need to specify three options. The first is &lt;a href="http://msdn.microsoft.com/en-us/library/xe4t6fc1.aspx"&gt;/DEBUG&lt;/a&gt;, that tells the linker to generate a PDB file. However, that switch also tells the linker that this is a debug build. That's not so good because that will affect the performance of your binary. Basically what happens when you use /DEBUG is the linker links faster because it no longer looks for individual references. If you use one function from a OBJ the linker throws the whole OBJ into the output binary so you now have a bunch of dead functions. &lt;/p&gt;  &lt;p&gt;To tell the linker you want only the referenced functions, you need to add &lt;a href="http://msdn.microsoft.com/en-us/library/bxwfs976.aspx"&gt;/OPT:REF&lt;/a&gt; as the second switch. The third switch is &lt;a href="http://msdn.microsoft.com/en-us/library/bxwfs976.aspx"&gt;/OPT:ICF&lt;/a&gt;, which enabled COMDAT folding. There's a term you don't hear every day. Basically what this means is that when generating the binary, the linker will look for functions that have identical code and only generate one function but make multiple symbols point to the one function. &lt;/p&gt;  &lt;p&gt;If you want to test the difference yourself on a native binary to see what affects generating PDB files will have, it's nearly as easy as a .NET binary. Visual Studio comes with a nice little program, &lt;a href="http://msdn.microsoft.com/en-us/library/c1h23y6c.aspx"&gt;DUMPBIN&lt;/a&gt;, which can tell you more than you ever wanted to know about a Portable Executable file. Run it with /DISASM switch to get the disassembly of a binary.&lt;/p&gt;  &lt;p&gt;Please keep those PDB related questions coming. Of course, if you have any other questions, I'll be happy to take a crack at those also. Gee, I better draw the line: no investment or relationship questions. &lt;em&gt;&amp;lt;grin&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8142" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/CS/blogs/jrobbins/archive/tags/John+Robbins/default.aspx">John Robbins</category></item><item><title>CLR via C#, 3rd Edition</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2009/06/17/clr-via-c-3rd-edition.aspx</link><pubDate>Wed, 17 Jun 2009 16:40:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8132</guid><dc:creator>JeffreyR</dc:creator><slash:comments>15</slash:comments><description>&lt;P&gt;I have been asked by many people if I will be updating my CLR via C# book for .NET 4.0.&lt;/P&gt;
&lt;P&gt;Well, I'm happy to report that the answer is YES! I have already signed the contract with Microsoft Press&amp;nbsp;and have been busy writing.&lt;/P&gt;
&lt;P&gt;The new edition keeps its focus on the CLR and the C# language. And, since I didn't update the book for C# 3, I will actually be adding C# 3.0 content as well as C# 4.0 content. And, of course, I'll be covering the new features/changes between CLR 2.0 and 4.0.&lt;/P&gt;
&lt;P&gt;The goal is to get the book out by the time .NET 4.0 ships. All looks good and I should easily be able to make this deadline.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8132" width="1" height="1"&gt;</description></item><item><title>How Does VS2010 Historical Debugging Work?</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/16/how-does-vs2010-historical-debugging-work.aspx</link><pubDate>Tue, 16 Jun 2009 18:26:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8126</guid><dc:creator>jrobbins</dc:creator><slash:comments>5</slash:comments><description>&lt;P&gt;Visual Studio 2010's &lt;A href="http://blogs.msdn.com/ianhu/archive/2009/05/13/historical-debugging-in-visual-studio-team-system-2010.aspx"&gt;Historical Debugging&lt;/A&gt; feature fascinates me. As you sit in the debugger, being able to move backwards while in the debugger (or attach the execution &lt;A href="http://blogs.msdn.com/habibh/archive/2009/06/09/an-in-depth-look-at-the-historical-debugger-in-visual-studio-2010-part-iii.aspx"&gt;log&lt;/A&gt; to a bug) has to be the killer feature coming up in the entire Visual Studio 2010 release. Sure, there are some nice things with Silverlight, TFS, and WPF, but they are all secondary in my opinion. Of course, I'm extremely biased as I love all things diagnostics, but you do have to agree anything that lets you fix bugs easier is always the feature you really need at 3AM. &lt;/P&gt;
&lt;P&gt;Using Visual Studio 2010 Beta 1, I wanted to describe how Historical Debugging worked because I feel Historical Debugging will change the way you debug so it's worth starting to look at it now. Also, well, it's just very cool to figure out how something works. I'm not going to cover much about how you use Historical debugging because it's mostly obvious how it works and everyone has &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&amp;amp;displaylang=en"&gt;access&lt;/A&gt; to the Beta 1 bits. If you haven't had a chance to install and use Historical Debugging, Habib Heydarian, PM of all things Diagnostics, has a great overview on his &lt;A href="http://blogs.msdn.com/habibh/default.aspx"&gt;blog&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;What I'm going to discuss here is the two sides to Historical Debugging. The first part is how Historical Debugging gets its hooks into your code so it can record what's going on. The second part is how Historical Debugging decided what events to report and shows how you can extend the reporting model. &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;As you can imagine, there are all sorts of huge disclaimers on what I'm going to talk about here. This article is based on Beta 1 and is all subject to change so nothing is guaranteed to ever work this way again. Additionally, if you rely on anything in the article it could cause your dog to run off, your plants to die, and you to develop &lt;A href="http://en.wikipedia.org/wiki/Halitosis"&gt;fege bosta&lt;/A&gt; so bad nothing will help&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Before we dive in, I do have to bring up one disappointing facet to Historical Debugging; it's 32-bit only. I've been in this business long enough to know software development is all about tradeoffs and "Shipping is a Feature" so something had to give during scheduling. However, my &lt;SPAN style="TEXT-DECORATION:underline;"&gt;&lt;STRONG&gt;&lt;EM&gt;personal&lt;/EM&gt;&lt;/STRONG&gt;&lt;/SPAN&gt; opinion is that I would have gladly traded the WPF UI for full x64 support across the all tools in Visual Studio, more diagnostic features, project file compatibility between VS 2008 and VS 2010, more TFS features, and speed, speed, and more speed. Don't get me wrong, Visual Studio 2010 will be a huge landmark release, but I think a wholesale UI change could have waited for another release or two. (Again, I definitely don't speak for Microsoft, and I don't speak for anyone else at Wintellect.) &lt;/P&gt;
&lt;P&gt;The place to start with Historical Debugging is the Options dialog as that's where everything is controlled. The first decision is whether you want to record events only or Events, Methods and Parameters. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/CS/blogs/jrobbins/061609_1823_HowDoesVS201.png"&gt; &lt;/P&gt;
&lt;P&gt;Obviously, selecting Events, Methods, and Parameters will record much more information. Some rough calculations on the data file sizes show that Event only files are about 20% the size of full information files. As this is Beta 1, I didn't bother doing any performance tests for the different collection types. &lt;/P&gt;
&lt;P&gt;The tantalizing portion of the above dialog are the three grayed out buttons because they allude to the fact that while not supported in Beta 1, future Betas and releases will allow us to control exactly what information we want collected. I can't wait to see what future releases will allow us to control. Can you imagine how cool it will be if have a hypothesis about a production-only problem and you can develop a collection plan that looks for just that information on the production server without killing performance? That will really make some of those debugging challenges we all face much easier. Now you see why I'm so interested in Historical Debugging! &lt;/P&gt;
&lt;P&gt;For Beta 1, the two interesting Options pages are Diagnostic Events and Modules. The Modules is easiest to understand because that's where you tell Historical Debugging which modules you want to collect data from or exclude from data collection. If you add modules to the Modules list the values you add are stored in the solution's .SUO file for Beta 1 so if you delete the .SUO, you lose your settings. &lt;IMG alt="" src="http://www.wintellect.com/CS/blogs/jrobbins/061609_1823_HowDoesVS202.png"&gt; &lt;/P&gt;
&lt;P&gt;The Diagnostic Events page is the more exciting set of options because it shows you what Beta 1 supports out of the box for the different events recorded by Historical Debugging. While you can enable and disable individual categories and items, Beta 1 doesn't offer a way to add or remove events through the UI. What lead me on my journey digging into how Historical Debugging works is I wanted to find if I could add my own items to the Diagnostic Events page. &lt;/P&gt;
&lt;P&gt;When you are debugging with Historical Debugging turned on, you'll see two additional DLLs in your address space, which you can see with Process Explorer. The first is a .NET assembly from the GAC, Microsoft.VisualStudio.TraceLog.Runtime.DLL, which I'll talk more about in a minute. The second is a native DLL, TraceLogProfiler.DLL, which version information description is "VS Logger CLR Profiler." The description gives away that Historical Debugging is done through a CLR profiler, but what is that profiler doing? As CLR 4.0 profilers can still use the COR_PROFILER environment variable, I saw the value 301EC75B-AD5A-459C-A4C4-911C878FA196, which looking in the registry got me to its COM registration, where the default value gives yet another hint: "Visual Studio Trace Debugger Instrumentation." &lt;/P&gt;
&lt;P&gt;It's probably not too big a surprise that Historical Debugging is using IL &lt;A href="http://msdn.microsoft.com/en-us/magazine/cc188743.aspx"&gt;rewriting&lt;/A&gt; to inject its hooks into the application as about the only other way would be to require you instrument the IL on disk before you run the binary. Peeking at what the instrumentation looks like is relatively easy with WinDBG and a little SOS magic. For those of you that haven't done any SOS work with WinDBG and CLR 4.0, the basic idea is still the same. The only difference is that instead of MSCORWKS.DLL being the key DLL, it's now CLR.DLL. Thus, to load the correct SOS extension, use &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;.loadby sos clr&lt;/SPAN&gt; and you'll be on your way. &lt;/P&gt;
&lt;P&gt;The snippet of disassembled code below shows examples of the instrumented code for a Windows Forms &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Main&lt;/SPAN&gt; method where I've turned on collection for events, methods, and parameters. I highlighted in red the code injected by Historical Debugging. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;0:013&amp;gt; !u 14c8720c &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Normal JIT generated code &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;AnimatedAlgorithm.AnimatedAlgorithmForm.Main() &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Begin 14d4bb90, size 70 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bb90 push ebp &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bb91 mov ebp,esp &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bb93 push eax &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bb94 cmp dword ptr ds:[14C79D34h],0 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bb9b je 14d4bba2 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bb9d call clr!JIT_DbgIsJustMyCode (71773bfb) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bba2 mov ecx,2 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bba7 call 1162ea70 (Microsoft.VisualStudio.TraceLog.TraceRuntime.&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddEnterNoParametersMethod(Int32), mdToken: 06000172) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbac nop &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbad mov edx,1 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbb2 mov ecx,2 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbb7 call 1483a760 (Microsoft.VisualStudio.TraceLog.TraceRuntime. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddCallSite(Int32, Int32), mdToken: 06000175) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbbc mov ecx,14C872CCh (MT: AnimatedAlgorithm.AnimatedAlgorithmForm) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbc1 call clr!JIT_NewCrossContext (7151890e) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbc6 mov dword ptr [ebp-4],eax &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbc9 mov ecx,dword ptr [ebp-4] &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbcc call 1269f214 (AnimatedAlgorithm.AnimatedAlgorithmForm..ctor() &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbd1 mov edx,6 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbd6 mov ecx,2 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbdb call 1483a760 (Microsoft.VisualStudio.TraceLog.TraceRuntime. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddCallSite(Int32, Int32), mdToken: 06000175) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbe0 mov ecx,dword ptr [ebp-4] &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbe3 call dword ptr ds:[2606608h] (System.Windows.Forms.Application. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Run(System.Windows.Forms.Form), mdToken: 060012e4) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbe9 nop &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbea int 3 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbeb nop &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbec mov ecx,2 &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbf1 call 14d4b750 (Microsoft.VisualStudio.TraceLog.TraceRuntime. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddLeaveNoParametersMethod(Int32), mdToken: 06000174) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;14d4bbf6 call 14d4b9f0 (Microsoft.VisualStudio.TraceLog.TraceRuntime. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;COLOR:red;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DumpResult(), mdToken: 0600017d) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbfb nop &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbfc mov esp,ebp &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbfe pop ebp &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;14d4bbff ret &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;For those of you paying close attention to the disassembly, the CLR JIT compiler defaults to a &lt;A href="http://msdn.microsoft.com/en-us/library/6xa169sk(VS.100,loband).aspx"&gt;fastcall&lt;/A&gt; calling convention so ECX is the first parameter and EDX is the second parameter. Looking with &lt;A href="http://www.red-gate.com/products/reflector/"&gt;Reflector&lt;/A&gt; at Microsoft.VisualStudio.TraceLog.Runtime.DLL makes it easy to see what the key &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;TraceLog&lt;/SPAN&gt; class expects as parameters. For example, the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;AddCallSite&lt;/SPAN&gt; method, takes a metadata token and an offset as its two parameters. The job of these injected method calls are to collect the minimal data and get it to the logger. &lt;/P&gt;
&lt;P&gt;By the way, Reflector works with CLR 4.0, but does not correctly find assemblies in the GAC as the internal GAC directory structure has changed. To load an assembly from the CLR 4.0 GAC, you'll have to find the assembly in a PowerShell window manually to specify the full path in the Open dialog. I'm sure Red Gate will have an update to Reflector around the Beta 2 timeframe. &lt;/P&gt;
&lt;P&gt;Winding through a method like &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;TraceLog.AddCallSite&lt;/SPAN&gt; shows that the information is packed up and put on a named pipe. I won't bother grinding through how that works because there's nothing too exciting about it. The interesting thing is that if you look with Process Explorer at a Windows Forms application, you'll see the process start hierarchy is DEVENV.EXE, the debuggee process, and VSTRACELOG.EXE. From the name, you can guess that is where the actual logging occurs. Peaking at the handles for the debuggee and VSTRACELOG.EXE shows named events and sections (memory mapped files) shared between the two processes. &lt;/P&gt;
&lt;P&gt;As the debuggee starts VSTRACELOG.EXE, the key coordination information has to be passed through either environment variables or command line parameters. Process Explorer makes it easy to see the command line parameters (which I've put each on their own line)): &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;"C:\VSNET10\Team Tools\TraceDebugger Tools\\VSTRACELOG.EXE" &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;run &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;/n:"animatedalgorithm.exe_0000058c_01c9edf3f5c6b945" &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;/cp:"C:\ProgramData\Microsoft Visual Studio\10.0\ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TraceDebugging\Settings\gnlg3dip.3pv" &lt;BR&gt;/f:"AnimatedAlgorithm_090615_130041.tdlog" &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;To see what those command line values mean, I figured it couldn't hurt to try &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;VSTRACELOG.EXE run /?&lt;/SPAN&gt; and it turns out to work! Sometimes reverse engineering is mastering the obvious. Here's what each value means: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;run: Runs a logger. &lt;/LI&gt;
&lt;LI&gt;/n: The logger name. &lt;/LI&gt;
&lt;LI&gt;/cp: The collection plan to use &lt;/LI&gt;
&lt;LI&gt;/f: The name of the log file. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The paths specified in the above command line looked to be the same value specified in the Options dialog, Historical Debugging node Advanced page, Location of Historical Recordings edit control. Of most interest to me was /cp because that's when I looked at GNLG3DIP.3PV, it is actually an XML file that contains some runtime setting information. Mostly the file has a bunch of elements that look to be the events recorded by Historical Debugging because the values line up with those displayed in the Diagnostic Events in the Options Dialog I showed earlier. As the filename is obviously a temporary filename, I went on a little quest to see what generated the collection plan file for the run. &lt;/P&gt;
&lt;P&gt;Running Process Monitor as I started a new debugging session it was easy to figure out what was going on. DEVENV.EXE was reading from the HKCU\Software\Microsoft\VisualStudio\10.0\DialogPage\Microsoft.VisualStudio.TraceLogPackage.ToolsOptionDiagnosticEvents\NotifyPoints registry key right before is created the collection plan file. Looking at that key was a little confusing because it's a bunch of REG_SZ values with numbers as the name and True or False as the data. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/CS/blogs/jrobbins/061609_1823_HowDoesVS203.png"&gt; &lt;/P&gt;
&lt;P&gt;A more careful look at the Process Monitor log showed DEVENV.EXE reading C:\VSNET10\Team Tools\TraceDebugger Tools\en\CollectionPlan.xml. Aha! That's where the base collection plan is stored for Beta 1. (Note I installed VS 2010 into C:\VSNET10 instead of the default directory.) &lt;/P&gt;
&lt;P&gt;Looking at CollectionPlan.XML it isn't too hard to figure out what's going on. At the top of the file is the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;ModuleList&lt;/SPAN&gt; element, which is the list of assemblies shown in the Options dialog, Historical Debugging node, Modules property page. Today, this list automatically has wildcard characters at the beginning and end of the values so it's a big hammer. I suspect we'll see much better control over modules in future beta releases. &lt;/P&gt;
&lt;P&gt;The most interesting part of the file starts with the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;TracePointProvider&lt;/SPAN&gt; element. What I'll do to show how a collection plan works is show the pieces for the Console.WriteLine events. To define a new collection category, you need, well, the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Categories&lt;/SPAN&gt; and sub &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Category&lt;/SPAN&gt; elements. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Categories&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Category&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;console&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;_locID&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;category.SystemConsole&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Console&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Category&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Categories&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The value of the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Category&lt;/SPAN&gt; is what will appear in the Diagnostic Events property page. &lt;/P&gt;
&lt;P&gt;After the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Categories&lt;/SPAN&gt;, you need to define a mapping between the assembly name and a module ID in the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;ModuleSpecification&lt;/SPAN&gt; element. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecifications&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;mscorlib&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;mscorlib.dll&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecifications&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;The super interesting part of the collection plan starts under the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;NotifyPointSpecifications&lt;/SPAN&gt; element as that's where you define the events themselves. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;NotifyPointSpecifications&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;For each event recorded by historical debugging, there is a &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;NotifyPointSpecification&lt;/SPAN&gt;. The enabled attribute is true if reporting of this notify point is enabled, false means don't report it. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;NotifyPointSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;enabled&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The Binding element is obviously how Historical Debugging knows how to hook a particular method. In Beta 1 all of the defined &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Binding&lt;/SPAN&gt; elements have their explicit attributes set to false, which I suspect means to look up the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;MethodId&lt;/SPAN&gt; element values through metadata instead of by token or address. Several of the notification points in the Beta 1 CollectionPlan.XML file show another attribute on the Binding element, &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;onReturn="true"&lt;/SPAN&gt;, which will show the return value for the event. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Bindings&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;explicit&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Next comes the mapping to the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;ModuleSpecification&lt;/SPAN&gt; element described earlier. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;mscorlib&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Here's the method you want to report the event on by type, method, and complete method id. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;TypeName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;System.Console&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;TypeName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;WriteLine&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodId&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;System.Console.WriteLine(System.String):System.Void&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodId&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;SettingsName&lt;/SPAN&gt; element says (0 args) but that is wrong. (It is Beta 1 after all!). The &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;SettingsName&lt;/SPAN&gt; value is what Options Dialog, Historical Debugging node, Diagnostic Events property page shows. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;SettingsName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;_locID&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;settingsName.WriteLine&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;WriteLine (0 args)&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;SettingsName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Name&lt;/SPAN&gt; element is what the Debug History window shows when the event is the single line mode and the Description element shows when you click on the event. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;_locID&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;name.WriteLine&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Console Output "{0}"&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Description&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;_locID&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;description.WriteLine&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Console Output "{0}"&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Description&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;To make the above clear, here's a screen shot showing where the two elements are used. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.wintellect.com/CS/blogs/jrobbins/061609_1823_HowDoesVS204.png"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Category&lt;/SPAN&gt; mapping is presented and the other elements are closed off. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Category&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;console&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Category&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Bindings&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;DataQuery&lt;/SPAN&gt; elements are where the real action occurs because that's where parameters and return values are processed so they can be used in the format strings in the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Name&lt;/SPAN&gt; and &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Description&lt;/SPAN&gt; elements. It's not clear what the index attribute is supposed to be. There are values ranging from -1 to 2 in the Beta 1 CollectionPlan.XML file. I originally thought they would correspond to format indexes, but they don't. I did figure out -1 means a return value and only works if you specify &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;onReturn="true"&lt;/SPAN&gt; on the Binding element. The type and name attributes are interesting as those are the values displayed in the Autos window when you click Autos link in an individual event. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;DataQueries&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;DataQuery&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;index&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;0&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;maxSize&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;256&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;value&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;DataQuery&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;DataQueries&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;NotifyPointSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;NotifyPointSpecifications&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The above &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;DataQuery&lt;/SPAN&gt; is straightforward to pick out, but they get much more interesting. The following snippet from the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;FileStream.Dispose&lt;/SPAN&gt; event shows a value for the element, &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;_fileName&lt;/SPAN&gt;, which maps to a field in the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;FileStream&lt;/SPAN&gt; class. If a field is not displayed, the name is assumed to be the parameter or field. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;DataQuery&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;index&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;0&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;maxSize&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;256&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;type&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;String&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;fileName&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;_fileName&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;DataQuery&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Continuing to poke through the Beta 1 CollectionPlan.XML turned up an extremely interesting option for reporting parameters:: &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;NotifyPointSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Bindings&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;explicit&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;system&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;TypeName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;System.Diagnostics.TraceListener&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;TypeName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;TraceEvent&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodId&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;System.Diagnostics.TraceListener.TraceEvent(&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;System.Diagnostics.TraceEventCache,&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.String,&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;System.Diagnostics.TraceEventType,&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Int32,&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.String,&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Object[]):System.Void&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;MethodId&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;SettingsName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;_locID&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;settingsName.TraceEvent&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;TraceEvent with format&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arguments&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;SettingsName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Category&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;tracing&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Category&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Binding&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Bindings&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;DataQueries&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ProgrammableDataQuery&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Microsoft.VisualStudio.DefaultDataQueries.dll&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ModuleName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;TypeName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Microsoft.VisualStudio.DataQueries.Tracing.TraceListener.&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;TraceEventFormat&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;TypeName&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ProgrammableDataQuery&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Consolas;FONT-SIZE:9pt;"&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;NotifyPointSpecification&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;ProgrammableDataQuery&lt;/SPAN&gt; element gives us a glimpse at the extensibility hooks into event recording. Opening up Microsoft.VisualStudio.DefaultDataQueries.DLL shows that if you derive your class from the &lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;IProgrammableDataQuery&lt;/SPAN&gt; interface, shown below, you'll be handed the parameters and return values so you can do more analysis to report better data for your events. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;public interface IProgrammableDataQuery &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Methods&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;object[] EntryQuery(object thisArg, object[] args);&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;object[] ExitQuery(object returnValue);&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;List&amp;lt;KeyValuePair&amp;lt;string, string&amp;gt;&amp;gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FormatCollectedValues(object[] results);&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;string FormatLongDescription(object[] results);&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;string FormatShortDescription(object[] results); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;} &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;All of the information I discussed here will &lt;SPAN style="TEXT-DECORATION:line-through;"&gt;probably&lt;/SPAN&gt; all change by the time Beta 2 ships, but it's still worth looking at to give you ideas to start thinking how you can about how to extend Historical Debugging for your particular scenarios. My mind is already working overtime on the tools I might be able to develop to help automate building your own collection plans for custom libraries. Granted building FxCop/Code Analysis rules has always been undocumented (and will continue to be in VS 2010), we can hope for full documentation on how to extend Historical Debugging, but don't be surprised if there isn't any. I can't wait to get my hands on Beta 2, as I'm sure it will be super exciting from a Historical Debugging perspective!&lt;/P&gt;&lt;/EM&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8126" width="1" height="1"&gt;</description></item><item><title>Comparing and Contrasting WPF and Silverlight</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/09/comparing-and-contrasting-wpf-and-silverlight.aspx</link><pubDate>Tue, 09 Jun 2009 17:45:03 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8097</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;While Silverlight is a functional subset of WPF and the gap is ever narrowing, there are many features that WPF supports that Silverlight does not. Silverlight even offers a few features that WPF doesn't. Microsoft asked us to do a whitepaper on the differences. Sergio Loscialo, with help from Steve Porter and Kate Gregory, has produced a 69-page paper that goes into amazing detail comparing and contrasting the differences. With this paper, you can learn how to write code that's portable between Silverlight and WPF. Read &lt;a href="http://wpfslguidance.codeplex.com/"&gt;Guidance on Differences between WPF and Silverlight&lt;/a&gt; on CodePlex.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8097" width="1" height="1"&gt;</description></item><item><title>Wintellect's Power Live Framework Library mentioned on Channel 9!</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2009/05/30/wintellect-s-power-live-framework-library-mentioned-on-channel-9.aspx</link><pubDate>Sat, 30 May 2009 22:00:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8071</guid><dc:creator>JeffreyR</dc:creator><slash:comments>1</slash:comments><description>&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Go here: &lt;/FONT&gt;&lt;A href="http://channel9.msdn.com/shows/This+Week+On+Channel+9/This-Week-on-C9-Bing-Changes-to-NET-FX-40--play-Apple-IIe-games-on-your-Xbox/"&gt;&lt;FONT size=3 face=Calibri&gt;http://channel9.msdn.com/shows/This+Week+On+Channel+9/This-Week-on-C9-Bing-Changes-to-NET-FX-40--play-Apple-IIe-games-on-your-Xbox/&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;And at about 23 minutes in, they talk briefly about the Wintellect Power Live Framework library.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8071" width="1" height="1"&gt;</description></item><item><title>Keeping Specific PDB Files from Loading in the Debugger</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/29/keeping-specific-pdb-files-from-loading-in-the-debugger.aspx</link><pubDate>Fri, 29 May 2009 05:31:20 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8061</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;As I've &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/pdb-files-what-every-developer-must-know.aspx"&gt;discussed&lt;/a&gt;, PDB files are wondrous bundles of binary joy. However, loading missing PDB files can quickly become an angst-ridden teenager as you wait what seems like forever on a network timeout for missing symbols. This is especially apparent in Tom's &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/pdb-files-what-every-developer-must-know.aspx"&gt;question&lt;/a&gt;:
&lt;/p&gt;&lt;p style="margin-left:36pt;"&gt;&lt;em&gt;For nearly two years I've been searching the Internet for an answer to this question: is it possible to get the DBGHELP.DLL to /not/ load a PDB for a specific DLL? I have applications that have lots of third-party DLLs for which I have no PDB files (read: "drivers for a database company that shall remain nameless") and I'd like to tell the DBGHELP.DLL to avoid attempting to search for those PDBs. In fact, I have been investigating the possibility of making stub PDBs with no information and stuffing them in a private symbol server just to make symbol loading faster.  
&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-left:36pt;"&gt;&lt;em&gt;Any thoughts?
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Oh, I have many thoughts, and like Tom, some of them are not wholesome when wrestling with that "database company that shall remain nameless" because they won't release symbols for their native compiled drivers. For those of working on native binaries that third parties plug into, it's trivial with the linker &lt;a href="http://msdn.microsoft.com/en-us/library/y87kw2fd.aspx"&gt;/PDBSTRIPPED&lt;/a&gt; switch to generate the same kind of PDB files Microsoft makes available on its public symbol server. You're not giving up any secrets with stripped symbols!
&lt;/p&gt;&lt;p&gt; The good news for all of us needed to skip loading a few PDB files is that the debugger folks at Microsoft know your pain and have a decent &lt;a href="http://msdn.microsoft.com/en-us/library/cc901405.aspx"&gt;solution&lt;/a&gt;. Unfortunately, most people haven't seen it because the trick is in the &lt;a href="http://msdn.microsoft.com/en-us/library/cc901417.aspx"&gt;SymProxy&lt;/a&gt; discussion, which is how you host your own HTTP symbol download. Mentioned in passing is "This feature exists in the client debugger..." There is one small bug is how they tell you to do the exclusion is incorrect, but easily fixable.
&lt;/p&gt;&lt;p&gt;The first way to exclude particular PDB files is to create a file called SYMSRV.INI and put the Exclusions section in like the following:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;[exclusions]&lt;br /&gt;dbghelp.pdb&lt;br /&gt;symsrv.*&lt;br /&gt;mso*
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I love the wildcard support! The documentation doesn't tell you where to place that file, but it needs to be in the same directory as SYMSRV.DLL. That's why I don't care for this approach because that means you need to put this file in every place where you have a debugger as they all use SYMSRV.DLL to do their symbol loading.
&lt;/p&gt;&lt;p&gt;A better approach is to put the exclusions in the registry so every debugger automatically picks them up. The &lt;a href="http://msdn.microsoft.com/en-us/library/cc901405.aspx"&gt;documentation&lt;/a&gt; says to put them in HKEY_LOCAL_MACHINE, but the real place is HKEY_CURRENT_USER. First, create a key HKEY_CURRENT_USER\Software\Microsoft\Symbol Server\Exclusions. In that key, create REG_SZ values for the PDB files, including wildcards, for the PDB files you want to skip. Here's an example .REG file for skipping NOTEPAD.EXE and for Tom, the wildcard for what I'm guessing he'd like to skip &lt;em&gt;&amp;lt;grin&amp;gt;&lt;/em&gt;:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;Windows Registry Editor Version 5.00&lt;br /&gt;[HKEY_CURRENT_USER\Software\Microsoft\Symbol Server\Exclusions]&lt;br /&gt;"notepad.pdb"=""&lt;br /&gt;"ora*.*"=""
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In the value field, you can put anything you want, like a comment as to why you need to skip loading these PDB files. Alternatively, you could fill the void with pithy &lt;a href="http://www.derose.net/steve/aphorisms.html"&gt;quotes&lt;/a&gt; to provide a moment of Zen for anyone reading your registry.
&lt;/p&gt;&lt;p&gt;Using the above .REG file, I debugged NOTEPAD.EXE with Visual Studio and here's the proof that no download from the Microsoft symbol server took place. 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/052909_0535_KeepingSpec1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;There are a couple of more questions in my queue, but if you have more, please don't hesitate to ask if there's something you wanted to know about PDB files. Please let me live my dream of educating everyone about PDB files!&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8061" width="1" height="1"&gt;</description></item><item><title>Upgrade Install from Vista to Win7 RC on a Mac Pro</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/28/upgrade-install-from-vista-to-win7-rc-on-a-mac-pro.aspx</link><pubDate>Thu, 28 May 2009 01:14:36 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8056</guid><dc:creator>jrobbins</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;While Microsoft really wants everyone to test doing an upgrade install of Windows 7 from Vista, I don't know anyone who has because all my friends are jaded Windows developers. Having installed Win 7 RC from scratch twice on my laptops, I was feeling quite lazy when it came to my desktop. While I've automated nearly all my application installs with PowerShell scripts it's still four-five hours overall. As I hadn't seen anyone else reporting how upgrade installs went, I thought I'd let everyone know that it went well for me. There were a few very small bumps so I thought I'd mention how I worked around them in case others want to try an upgrade install.
&lt;/p&gt;&lt;p&gt;As with any upgrade, have a trusted backup before you start, in my case, that meant two, one in Home Server and one a system back up. I was upgrading my wonderful &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/02/15/vista-x64-on-a-mac-pro-totally-awesome-dude.aspx"&gt;Mac Pro&lt;/a&gt; running Vista Ultimate x64 SP1which had the &lt;a href="http://www.apple.com/downloads/macosx/apple/application_updates/bootcampupdate21forwindowsvista64.html"&gt;2.1&lt;/a&gt; version of Apple's Boot Camp Vista x64 drivers installed.
&lt;/p&gt;&lt;p&gt;I had to laugh when I first tried to do the upgrade. The last time I did an in place upgrade of an operating system without a fresh install must have been ten years ago so I rebooted the machine to start the install from the Win7 DVD. When I clicked on the upgrade link, it kindly told me that I needed to start the install from Vista in order to upgrade. Once I did what I was supposed to do, the compatibility report said that both SQL 2005 and the Apple Boot Camp drivers had some compatibility problems, but in the cas e of the Boot Camp drivers, I could reinstall them after the upgrade was complete. As I didn't need SQL 2005 anymore, I uninstalled it and restarted the upgrade install.
&lt;/p&gt;&lt;p&gt;The upgrade cranked away and after a couple of reboots, it looked like it as done. I wasn't paying attention to the time at all so I think it was less than two hours. After logging in, it looked like everything was running pretty well.
&lt;/p&gt;&lt;p&gt;As reported, the upgrade disabled some of the Apple Boot Camp drivers so the first thing I did was do a repair install, which stopped saying a there was a pending reboot  and the install could not continue. I rebooted and still got the same error. It turned out that the HP printer I'm using doesn't have Win7 drivers so something in the system was trying to delete one of the printer driver files every time I rebooted the machine. I deleted the printer, but still kept seeing the HKLM\System\ControlSet\Control\Session Manager\PendingFileRenameOperations value getting reset to delete the bad printer DLL. Once I deleted the values in the REG_MULTI_SZ dialog, the Apple Boot Camp driver install went perfectly so my ultra thin Apple wired keyboard works great.
&lt;/p&gt;&lt;p&gt;One odd problem I was having was that it seemed my Bluetooth mouse wasn't responding very well. The mouse would move and click fine, but would stop and I'd have to shake the mouse to get it to respond. If I continually moved the mouse, everything was fine, but if I stopped using it for 5-20 seconds, it felt like the Bluetooth connection was lost. As the exact same mouse was working fine in Vista two hours before I was looking at a battery problem or something had changed with Win7. 
&lt;/p&gt;&lt;p&gt;A quick look in the Event Log, the go-to place for starting all Windows trouble shooting, showed a bunch of HidBth warnings saying "Bluetooth HID device (xx:xx:xx:xx:xx:xx) either went out of range or became unresponsive." It sure felt like the Bluetooth device was going to sleep. Popping open Device Manager, I looked at the Apple Built-in Bluetooth Properties page, Power Management tab. The "Allow the computer to turn off this device to save power" check box was checked. I unchecked it, clicked OK, and haven't had a Bluetooth mouse problem since. 
&lt;/p&gt;&lt;p&gt;As I opened the Event Log, I got an error in the default Administrative Events filter. On Vista there must be some additional event logs because using that filter pops up a "Query Error" saying it can't find the following event logs:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Microsoft-Windows-Diagnosis0MSDT/Debug
&lt;/li&gt;&lt;li&gt;Microsoft-Windows-Eventlog-ForwardPlugin/Debug
&lt;/li&gt;&lt;li&gt;Microsoft-Windows-PrinterSpooler/Aux-Analytic
&lt;/li&gt;&lt;li&gt;Microsoft-Windows-PrinterSpooler/Core-Analytic
&lt;/li&gt;&lt;li&gt;Microsoft-Windows-PrinterSpooler/Core-Debug
&lt;/li&gt;&lt;li&gt;Microsoft-Windows-PrinterSpooler/ISV-Analytic
&lt;/li&gt;&lt;li&gt;Microsoft-Windows-Security-Licensing-SLC/Per
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;On a fresh install Win7 machine, those logs are definitely not there. I haven't figured out how to edit the default query, if anyone knows I'd love to get this fixed.
&lt;/p&gt;&lt;p&gt;Finally, as I find the Windows Media Player far too weird to use, I ran into my first Win7 application compatibility problem with &lt;a href="http://www.winamp.com/"&gt;Winamp&lt;/a&gt;. It would report some odd error in the skinning code and die. A quick search around the internet showed that the problem was the default "Bento" skin and deleting the C:\Users\&amp;lt;USER&amp;gt;\AppData\Roaming\Winamp directory allows you to reset the skin to "Modern" and it works. I've never quite understood why these music and video players are so problematic for both usability and stability.
&lt;/p&gt;&lt;p&gt;I consider the upgrade install a success because I'm loving Win 7 on a big dual monitor machine. Did anyone else do an upgrade install? If so, how did it go for you?&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8056" width="1" height="1"&gt;</description></item><item><title>Visual Studio Remote Debugging and PDB Files</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/26/visual-studio-remote-debugging-and-pdb-files.aspx</link><pubDate>Wed, 27 May 2009 00:23:55 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8043</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Thanks for all the comments and emails about my blog entry, &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/pdb-files-what-every-developer-must-know.aspx"&gt;PDB Files: What Every Developer Must Know&lt;/a&gt;. There was lots of nice feedback, but more importantly great questions! Instead of responding in the blog comments to these questions as I normally do, a couple of the questions were important enough that I wanted to make full blog entries out of them. Please continue to ask any questions you have about PDB files as I am taking it as my personal mission to ensure that everyone developing for Windows knows exactly how to use PDB files!
&lt;/p&gt;&lt;p&gt;The first &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/pdb-files-what-every-developer-must-know.aspx"&gt;question&lt;/a&gt; I want to cover is from Eric Hill:
&lt;/p&gt;&lt;p style="margin-left:36pt;"&gt;&lt;em&gt;Thanks for the deep dive on PDB files. You're exactly right, all the information you have provided probably exists somewhere, but not all together.  
&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-left:36pt;"&gt;&lt;em&gt;I suspect the information you've provided explains a problem I had recently doing remote debugging  I copied my private build to another machine, with PDB file right there with it, but when I remote-debugged, VS could not find any of my breakpoints. Just on a hunch, I moved the executable files on the remote machine such the path was the same as where the files were on the build machine, and that fixed the problem. But that doesn't seem like a very reasonable requirement. What approach would you take to remove this restriction for remote debugging?
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;For the most part, remote debugging works well. However, the one thing I haven't found discussed in the Remote Debugging &lt;a href="http://msdn.microsoft.com/en-us/library/y7f5zaaa(loband).aspx"&gt;documentation&lt;/a&gt; is where the PDB files are loaded, which is the crux of Eric's issue.(For the rest of this article, I'm assuming you've read all the remote debugging documentation.) To make everything clear, let me define two terms; the &lt;strong&gt;remote machine &lt;/strong&gt;is where MSVSMON.EXE and your application execute and the &lt;strong&gt;local machine &lt;/strong&gt;is where the Visual Studio IDE is running. The key trick to know about remote debugging is &lt;em&gt;for .NET binaries, the PDB files are loaded on the remote machine and for native binaries, the PDB files are loaded on the local machine. 
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;From Eric's question, I'm betting he was doing native remote debugging because when he moved the binaries to the same path on both machines, everything worked like expected because it was Visual Studio found the binary on the local machine and in turn, the PDB file as I described in my previous blog entry.
&lt;/p&gt;&lt;p&gt;If you want to verify where the PDB files load, here's how I verified the loading. Set up remote debugging for a console application using your favorite language. Put the project in the same drive and directory on both the local and remote machine. Start single stepping with Visual Studio and stop at the entry point of the application. Run &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer&lt;/a&gt; on both machines and in each press CTRL+F to search for handles and DLL strings. Enter "PDB" and click the Search button. Here's a screen shot from the local machine where I was remote debugging to a native C++ application:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/052709_0027_VisualStudi1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;With Visual Studio doing the symbol loading for native remote debugging, both local build and public build symbols load where you expect them to load. It's a little more interesting for .NET binaries for remote debugging. For your private builds, you'll copy the binary and matching PDB file to the remote machine where the loading occurs. What about the public build PDB files for .NET binaries?
&lt;/p&gt;&lt;p&gt;As all .NET PDB files are loaded on the remote machine, the public build PDB files are loaded there as well. In order to get them you have to set the &lt;a href="http://support.microsoft.com/kb/311503"&gt;_NT_SYMBOL_PATH&lt;/a&gt; environment variable to point to your symbol server. If you don't want to do that manually for forty test systems, you can use the PowerShell script I &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2008/01/22/powershell-script-for-setting-symbol-paths.aspx"&gt;wrote&lt;/a&gt; to automate the process. Once you have the _NT_SYMBOL_PATH set on the remote machine, when you start remote debugging, Visual Studio will let you know that it will be downloading public symbols to the remote machine:
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.wintellect.com/CS/blogs/jrobbins/052709_0027_VisualStudi2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;With remote debugging, if both machines have the local build binaries in the same drive and directories, life is easy because the symbol loading occurs without you having to worry about the type of development you're doing. Eric asks if that's a reasonable requirement. Well, I don't have a real answer other than to say that's just kind of how it is, especially for native code. I wanted to provide the background as to how remote debugging worked so you would understand the limitations and ramifications. 
&lt;/p&gt;&lt;p&gt;Please keep the questions about PDB files coming!
&lt;/p&gt;&lt;p&gt;&lt;em&gt;Personal note: I have to let everyone know that Eric Hill, who asked the above question, had a huge influence on my career. Way back in 1992/1993 he was punished for some horrible past life transgression by being stuck with me as a lab partner for CSC 311 (Computer Organization and Logic) at North Carolina State University. That was the killer death class in the CS curriculum that everyone dreaded as it was electrical engineering for CS majors. Back in those days, you were handed a breadboard, an &lt;a href="http://en.wikipedia.org/wiki/Intel_8051" /&gt;&lt;/em&gt;Intel 8051&lt;em&gt;CPU, a bunch of wires and you truly built a computer, none of that easy simulation garbage they have today. Eric's brilliant (he got an A+) and pulled my stupid butt through the whole class (and I was thrilled with my C-). Oh, he also kept me from electrocuting myself a couple of times as well. When it came time for the end of year project, where we had to do something real, like control hardware devices, with our hand built computer we didn't want to have to unplug all those wires we had carefully gotten working. Eric had the brilliant idea of doing a &lt;a href="http://en.wikipedia.org/wiki/Programmable_read-only_memory" /&gt;&lt;/em&gt;PROM&lt;em&gt;-based debugger as our project. It was all software and much easier than anything else we could have done. As you can guess, all my interest in debuggers stem from that wonderful project. Thanks, Eric!&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8043" width="1" height="1"&gt;</description></item><item><title>Announcing Wintellect's Power Live Framework Library</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2009/05/26/announcing-wintellect-s-power-live-framework-library.aspx</link><pubDate>Tue, 26 May 2009 23:19:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8042</guid><dc:creator>JeffreyR</dc:creator><slash:comments>3</slash:comments><description>&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Since late 2008, I have been spending a lot of time focusing on Microsoft’s Live Framework and Mesh technologies. Towards this end, I have produced a Power Live Framework library that simplifies coding against the Live Framework. And, I have also put together some sample applications that leverage my library. Furthermore, I have set up a Yahoo news group in order to support people that wish to use my library and sample code. The files and news group can be found here: &lt;/FONT&gt;&lt;A href="http://tech.groups.yahoo.com/group/PowerLiveFx/"&gt;&lt;FONT size=3 face=Calibri&gt;http://tech.groups.yahoo.com/group/PowerLiveFx/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The purpose of this blog post is to help you get started with programming for the Live Framework using my class library. For more information on the Live Framework in general, what it offers, and the concepts that surround it, I encourage you to see some of the videos from &lt;/FONT&gt;&lt;A href="http://dev.live.com/blogs/devlive/archive/2008/10/24/416.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;Microsoft’s PDC&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. Also, I will be speaking about Live Framework programming at Wintellect’s own &lt;/FONT&gt;&lt;A href="http://devscovery.com/"&gt;&lt;FONT size=3 face=Calibri&gt;Devscovery conference&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;To develop against the Live Framework, you must:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Provision your account:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;Go to &lt;/FONT&gt;&lt;A href="https://lx.azure.microsoft.com/Cloud/Provisioning/Default.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;https://lx.azure.microsoft.com/Cloud/Provisioning/Default.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; &lt;/FONT&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;From “New Project” page, click "Activate Live Framework CTP“&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;If you want to access the Live Framework locally (not via the Internet), then download &amp;amp; run the developer client Live Operating Environment:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;Go to &lt;/FONT&gt;&lt;A href="https://developer.mesh-ctp.com/"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;https://developer.mesh-ctp.com/&lt;/FONT&gt;&lt;/A&gt;&lt;/U&gt;&lt;FONT size=3 face=Calibri&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Sign In, select “Add Device” and then install the client Live Operating Environment.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Then run “C:\Users\Jeffrey\AppData\Local\Microsoft\Live Framework Client\Bin\MeshAppMonitor.exe”.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Sign in with the client (see tray icon), and add your computer to your developer mesh.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Download Microsoft’s developer SDK (&amp;amp; Tools)&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;U&gt;&lt;FONT size=3 face=Calibri&gt;Go to &lt;/FONT&gt;&lt;A href="https://developer.mesh-ctp.com/Developers/Developers.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;https://developer.mesh-ctp.com/Developers/Developers.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Then, in your Visual Studio projects, reference Microsoft.Web.dll and Microsoft.LiveFx.ResourceModel.dll. These DLLs can be found in “C:\Program Files (x86)\Microsoft SDKs\Live Framework\v0.91\API Toolkits\.Net Library”. Do NOT add a reference for Microsoft.LiveFx.Client.dll as my Wintellect.LiveFx.dll is a replacement for this library.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 10pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;For some projects, you will also need to add System.ServiceModel.Web.dll (included with the normal .NET Framework).&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Some words about building you code with my Wintellect.LiveFx.dll library:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;I produced my library because I wanted a lightweight, simple, stateless, and RESTful API for programming against the Live Framework. Microsoft’s Microsoft.LiveFx.Client.dll is stateful, does not allow multiple asynchronous operations to execute concurrently and is not in keeping with the RESTful nature of the Live Framework itself. Microsoft and I have been communicating about this and they have plans to change their API and possibly adopt my API directly or something like it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;My library can be used for all kinds of rich .NET applications including Console, Window Forms, Windows Presentation Foundation, ASP.NET, WCF, etc. At this time, my library will not work with Silverlight due to limitations of Silverlight’s HttpWebRequest class (for example, it only supports GET &amp;amp; POST methods and I need PUT &amp;amp; DELETE too). I am monitoring this closely and fully expect to bring my library to Silverlight in the future.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 10pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Since my Wintellect.LiveFx.dll library offers and implements many asynchronous operations, it depends on Wintellect’s Power Threading library (Wintellect.Threading.dll). In fact, if you start accessing the Live Framework asynchronously, then you may also find your own code benefitting greatly from the classes contained inside my Power Threading library. The Power Threading library can be downloaded from &lt;/FONT&gt;&lt;A href="http://wintellect.com/PowerThreading.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;http://Wintellect.com/PowerThreading.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; and there is a separate Yahoo news group available that supports this library: &lt;/FONT&gt;&lt;A href="http://tech.groups.yahoo.com/group/PowerThreading/"&gt;&lt;FONT size=3 face=Calibri&gt;http://tech.groups.yahoo.com/group/PowerThreading/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;An introduction to libraries and type for programming against the Live Framework:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The Live Framework uses a RESTful model where applications make HTTP POST (create), GET (read), PUT (update), &amp;amp; DELETE (delete) operations against the Live Framework servers in the cloud or against a local (or client machine installed) Live Framework “server”. The information interchanged using the AtomPub protocol.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The Microsoft.Web.dll (included with the Live Framework SDK) contains types for low-level AtomPub data processing, serialization, and deserialization. For most people, this is too painful a level to program at.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The Microsoft.LiveFx.ResourceModel.dll (also included with the Live Framework SDK) contains types that mirror the Resources that the cloud/client Live Framework “servers” expose. You should think of the classes defined in this DLL as being data containers. That is, they mostly contain properties. There are some methods that deserialize the wire-protocol text to an instance of a .NET type and there are also methods that serialize an instance of a .NET type to the wire-protocol text required by AtomPub. Effectively, the .NET types provide developers with IntelliSense support while writing code and also compile-time type-safety when using the properties.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The Wintellect.Net.HttpRestClient class (provided by my Wintellect.LiveFx.dll) is a class that simplifies communication with any REST server. This class is not specific to Microsoft’s Live Framework at all. In essence, each method on the class internally does the following:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Creates an HttpWebRequest&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Initializes the HTTP method and headers (which can have some specified defaults)&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Initiates a Create/Read/Update/Delete request &amp;amp; sends a payload synchronously or asynchronously&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Returns the HttpWebResponse&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Note that the state of an HttpRestClient object can change immediately after a request has been initiated; there is no need to wait for a response. This allows a single HttpRestClient object to be used for multiple asynchronous operations that execute concurrently. However, a single HttpRestClient object should not be used by multiple threads at the same time without performing your own thread synchronization. If you want to have multiple threads concurrently accessing a REST server, then create multiple HttpRestClient objects (they are very lightweight in terms of resource consumption).&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The Wintellet.LiveFx.LiveFxClient class (also provided by my Wintellect.LiveFx.dll) is derived from HttpRestClient. The LiveFxClient class is specific to Microsoft’s Live Framework. This class knows about Base Uris and authorization tokens. This class also knows how to perform CRUD operations while converting the wire-protocol data to an instance of a resource class and vice versa.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 10pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The Wintellet.LiveFx.LiveFxExtensions class (also provided by my Wintellect.LiveFx.dll) is a static class (and therefore has no state). This class defines a bunch of methods that extend the resource classes defined in the Microsoft.LiveFx.ResourceModel.dll. These methods add the behavior to the data, so to speak. In effect, the extension methods, offer IntelliSense thereby suggesting what actions can be performed on a resource and what additional arguments you must pass in order to perform the action. You must always pass a LiveFxClient object as this contains the default request information (like authorization). Most of the extension methods return a deserialized resource or resource collection. If you desire, you can call HttpRestClient’s SveNextRequestResponse method and/or its SetNextRequestQuery method before making a request to store the HTTP response code/headers in a HttpRestClientResponse object or to set &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd136521.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;query filter&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; information. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The sample applications:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpFirst&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The LiveFxPatterns project is a console application that demonstrates how to perform various synchronous and asynchronous operations against Microsoft’s Live Framework using my Power Live Framework library. The operations include:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Creating mesh objects, data feeds, and data entries (with and without media resources),&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;Creating a directory structure with folders &amp;amp; files visible via the Live desktop (running in a browser)&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to update a data entry.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to use query operators when reading resource data.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to add your own custom links to a resource.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to add and read custom data associated with a resource.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to map a mesh object to a device.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to invite a member to a mesh object.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to create a custom news item.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.75in;mso-list:l0 level2 lfo1;mso-add-space:auto;" class=MsoListParagraphCxSpMiddle&gt;&lt;SPAN style="FONT-FAMILY:'Courier New';mso-fareast-font-family:'Courier New';"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;o&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;How to subscribe to a resource and process change notifications for it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 10pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;The LiveFxBrowser project is a Windows Presentation Foundation application that shows you the contents of a user’s Mesh using a tree hierarchy which allows for easy navigation. When you select a node in the tree, you get a window showing you the contents of the selected resource. The view is “cooked” to show you the data in a human readable format: simple data is shown first, followed by collections, followed by link Uris. If you prefer, you can see the same information in raw wire-protocol format (XML, RSS, Atom, or JSON). I've included a screen shot showing the “cooked” view of the data as an attachment.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT:-0.5in;MARGIN:0in 0in 10pt 0.5in;mso-list:l0 level1 lfo1;" class=MsoListParagraphCxSpLast&gt;&lt;SPAN style="FONT-FAMILY:Symbol;mso-bidi-font-family:Symbol;mso-fareast-font-family:Symbol;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3 face=Calibri&gt;I am working with Wintellect’s own Andy Hopper to produce a real Live Framework application called “Wintellect Cloudboard.” This application allows you to copy and paste clipboard items to your mesh effectively putting them in the cloud (see how we got the name?). You can then invite others to your Cloudboard and share each other’s clipboard items. You will also receive notifications when new items appear in the Cloudboard. We have set up yet another Yahoo news group for this application (&lt;/FONT&gt;&lt;A href="http://tech.groups.yahoo.com/group/Cloudboard/"&gt;&lt;FONT size=3 face=Calibri&gt;http://tech.groups.yahoo.com/group/Cloudboard/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;) and I encourage you to subscribe to it if you’d like to be notified when the application becomes available. Our goal is to eventually share the code for Cloudboard and discuss our programming efforts it in articles. &lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8042" width="1" height="1"&gt;</description><enclosure url="http://www.wintellect.com/CS/blogs/jeffreyr/attachment/8042.ashx" length="155800" type="image/x-png" /></item><item><title>New version of Power Threading Library posted today!</title><link>http://www.wintellect.com/CS/blogs/jeffreyr/archive/2009/05/26/new-version-of-power-threading-library-posted-today.aspx</link><pubDate>Tue, 26 May 2009 20:30:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8041</guid><dc:creator>JeffreyR</dc:creator><slash:comments>3</slash:comments><description>&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;I posted a new version of my Power Threading Library today on &lt;/FONT&gt;&lt;A href="http://wintellect.com/PowerThreading.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;http://Wintellect.com/PowerThreading.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;This version has some minor bug fixes and a few new (minor) classes. See the Power Threading Overview.pdf file for change log information.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8041" width="1" height="1"&gt;</description></item><item><title>Mind Boggling Great Deal on a Lenovo X200 Tablet (and installing Win7)</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/26/mind-boggling-great-deal-on-a-lenovo-x200-tablet-and-installing-win7.aspx</link><pubDate>Tue, 26 May 2009 04:38:40 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:8032</guid><dc:creator>jrobbins</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;As I have written in the &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/03/24/a-squeaky-clean-thinkpad-x60-tablet-with-no-craplets.aspx"&gt;past&lt;/a&gt;, I have a bit of a "love-hate" relationship with Lenovo and their ThinkPad line, but its way more on the love side because their hardware utterly rocks. As it was getting time for a new laptop, I surfed over to the Lenovo site at on April 28 and went through the customized build process to build my ultimate X200 Tablet. I'd checked out the new machines a couple of months ago, but noticed a few interesting things they'd added.
&lt;/p&gt;&lt;p&gt;The first was they were now offering a 2.13 GHz L9600 Core Duo with a 6MB L2 Cache as a CPU option. While not a huge speed bump over the 1.86 GHz, every little bit helps. I configured the machine maxing out everything with 4GB RAM, touch screen display, AT&amp;amp;T mobile broadband, fingerprint reader, camera, Bluetooth, 8-cell battery, and the 128GB Solid State Drive (SSD). (A guy can always dream, right?) Anyway, I was sure the machine I configured was going to be too expensive to buy. That's when I noticed something very interesting, the SSD price was wrong with the result that the SSD drive was free!
&lt;/p&gt;&lt;p&gt;There was no way that could be correct, but I thought it couldn't hurt to go through with the order. The front page of the Lenovo site had mentioned an e-coupon code that if you ordered by the end of the April, you got 15% off. The configuration computer price never changed through the end of the order and I duly got the 15% discount. Feeling lucky, but sure there was no way I was going to get a free SSD drive, I submitted my order.
&lt;/p&gt;&lt;p&gt;The next day I called Lenovo to find out the real cost of the computer. The customer service person quoted me the $1,800 (minus tax) that I had from my web site order confirmation. When I pointed out that SSD pricing was wrong, the representative said: "I guess it's your lucky day because that's the price we are charging you. In fact, I didn't know we sold 2.13 GHz CPUs in that computer either." That sent me scrambling back to the Lenovo web site and it no longer showed the 2.13 GHz CPU for the X200 Tablet and the SSD price error was fixed.
&lt;/p&gt;&lt;p&gt;I'd managed to order a model that didn't exist and was far underpriced so I wasn't sure what was going to happen. The ship date was originally May 8, and as I expected, on May 8 the ship date changed to May 14. Now I was curious to see what was going to happen so I waited until May 14, mainly because I was in China, thinking that there was going to be further delays because of the messed up order. My plan was to call Lenovo and get everything straightened out by opting for the 1.86 GHz CPU and a normal hard disk as my current order was probably going to be stuck in their system until they actually released the version with the 2.13 GHz CPU many months from now. On May 14, my order status changed to "shipped" and had a tracking number, which was quite a surprise. 
&lt;/p&gt;&lt;p&gt;On May 19, UPS delivered the computer. The specifications sticker on the box said it had a 2.13 GHz CPU and firing it up reported two important facts, first it did contain the 2.13 GHz CPU, and second, it definitely contained a blazingly fast SSD drive! Looking at the price of the maxed out X200 Tablet as I write this shows the price to be $2,900 (with no coupons applied) and still does not offer the 2.13 GHz CPU as an option. There's nothing like getting a smoking hot computer for nearly half off!
&lt;/p&gt;&lt;p&gt;I was expecting Lenovo to call me and ask me to pay for the SSD drive before shipping the computer, which I would have completely understood and gladly have done, but they never did. I hope they will accept my full gratitude for the deal, and even more devotion from me in exchange. While you probably won't get the deal I got, if you need a rock solid laptop you can trust, go with a Lenovo. I've been using them for 15 years and loving them. &lt;em&gt;OK, there was that two-year flirtation with a Toshiba M200 that I got free, but I never liked it and felt dirty the whole time.&lt;/em&gt;
	&lt;/p&gt;&lt;p&gt;After verifying that everything worked on the machine, it was time for Win7 x64. As I wanted to control the machine, I wiped out everything Lenovo had installed and started fresh. The Win7 RC install off a bootable USB memory drive was trivial. If others with X200 Tablets are looking to go to Win7 x64, which I would highly recommend, here's all I installed. All the rest of the drivers I let Windows 7 or Windows Update install for me.
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-70000"&gt;Vodafone and AT&amp;amp;T – HSDPA wireless WAN&lt;/a&gt;
		&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wireless.att.com/businesscenter/solutions/wireless-laptop/software.jsp"&gt;AT&amp;amp;T Connection Manager&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Note that the Lenovo connection software didn't work for me, but the AT&amp;amp;T software does.&lt;/em&gt;
		&lt;/li&gt;&lt;li&gt;&lt;a href="http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-70709"&gt;Tablet PC Button Driver&lt;/a&gt;&lt;br /&gt;&lt;em&gt;This link is not on the default drivers and downloads page. Thanks to this &lt;a href="http://forum.thinkpads.com/viewtopic.php?f=43&amp;amp;t=71600"&gt;link&lt;/a&gt; for finding it.&lt;/em&gt;
		&lt;/li&gt;&lt;li&gt;&lt;a href="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-67220"&gt;MultiTouch Drivers&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Again, this link is not on the default drivers and downloads page.
&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Two things that aren't working for me are the Intel AMT serial drivers and the fingerprint reader. I don't really care about the AMT part, but I tried to get the Lenovo Vista fingerprint reader software to work, but there are too many changes between Vista and Win7 for biometric devices in order for them to work. 
&lt;/p&gt;&lt;p&gt;The big thing I've learned with the X200 Tablet is that I will never use a platter hard disk again. I'd read that an SSD makes a big difference, until I used one the last couple of days for real world use, I didn't realize just how much faster they are. Another feature is the silent operation. I guess I had gotten used to the hard drive noise, but now that it's gone on the new machine, it's annoying to use a regular computer again.
&lt;/p&gt;&lt;p&gt;While I have taken a Surface development &lt;a href="http://www.wintellect.com/CourseDetail.aspx?Course=49"&gt;class&lt;/a&gt;, I never used the touch features in Win7. Now that I have, I don't know how I ever lived without them! With the taskbar in particular, it's so convenient and faster to have your hands on the keyboard and reach up to touch the application to switch to, especially if you run as many as I do. After two days of using my new laptop, I went to my old laptop and couldn't understand why I couldn't switch applications any more when I touched the screen.
&lt;/p&gt;&lt;p&gt;While you're probably already sick of this blog entry because of my killer deal, I do have one last thing to brag about, battery life. I have the 8-cell battery in this machine and the other night I worked six solid hours and still had 20% of the battery left when I put the machine back in the &lt;a href="http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?infotype=AN&amp;amp;subtype=CA&amp;amp;htmlfid=897/ENUS108-654&amp;amp;appname=lenovous&amp;amp;language=en"&gt;UltraBase&lt;/a&gt;. Between Win7 and better hardware, it's now realistic to get real development work done when you fly across the US.
&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=8032" width="1" height="1"&gt;</description></item><item><title>PDB Files: What Every Developer Must Know</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/05/11/pdb-files-what-every-developer-must-know.aspx</link><pubDate>Mon, 11 May 2009 15:42:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7981</guid><dc:creator>jrobbins</dc:creator><slash:comments>31</slash:comments><description>&lt;P&gt;Most developers realize that PDB files are something that help you debug, but that's about it. Don't feel bad if you don't know what's going on with PDB files because while there is documentation out there, it's scattered around and much of it is for compiler and debugger writers. While it's extremely cool and interesting to write compilers and debuggers, that's probably not your job. &lt;/P&gt;
&lt;P&gt;What I want to do here is to put in one place what everyone doing development on a Microsoft operating system has to know when it comes to PDB files. This information also applies to both native and managed developers, though I will mention a trick specific to managed developers. I'll start by talking about PDB file storage as well as the contents. Since the debugger uses the PDB files, I'll discuss exactly how the debugger finds the right PDB file for your binary. Finally, I'll talk about how the debugger looks for the source files when debugging and show you a favorite trick related to how the debugger finds source code. &lt;/P&gt;
&lt;P&gt;Before we jump in, I need to define two important terms. A build you do on your development machine is a &lt;EM&gt;private build&lt;/EM&gt;. A build done on a build machine is a &lt;EM&gt;public build&lt;/EM&gt;. This is an important distinction because debugging binaries you build locally is easy, it is always the public builds that cause problems. &lt;/P&gt;
&lt;P&gt;The most important thing all developers need to know: &lt;SPAN style="COLOR:#c0504d;TEXT-DECORATION:underline;"&gt;&lt;STRONG&gt;PDB files are as important as source code!&lt;/STRONG&gt;&lt;/SPAN&gt; Yes, that's red and bold on purpose. I've been to countless companies to help them debug those bugs costing hundreds of thousands of dollars and nobody can find the PDB files for the build running on a production server. Without the matching PDB files you just made your debugging challenge nearly impossible. With a huge amount of effort, my fellow Wintellectuals and I can find the problems without the right PDB files, but it will save you a lot of money if you have the right PDB files in the first place. &lt;/P&gt;
&lt;P&gt;As&lt;SPAN style="COLOR:#c0504d;TEXT-DECORATION:underline;"&gt; &lt;A href="http://blogs.msdn.com/ms_joc/"&gt;John Cunningham&lt;/A&gt;&lt;/SPAN&gt;, the development manager for all things diagnostics on Visual Studio, said at the 2008 PDC, "Love, hold, and protect your PDBs." At a minimum, every development shop must set up a Symbol Server. I've &lt;A href="http://msdn.microsoft.com/en-us/magazine/cc301459.aspx"&gt;written&lt;/A&gt; about Symbol Servers in MSDN Magazine and more extensively in my book, &lt;A href="http://www.amazon.com/Debugging-Microsoft-NET-2-0-Applications/dp/0735622027/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1241959415&amp;amp;sr=8-1"&gt;Debugging .NET 2.0 Applications&lt;/A&gt;. You can also read the Symbol Server documentation itself in the &lt;A href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;Debugging Tools for Windows&lt;/A&gt; help file. Look at those resources to learn more about the details. Briefly, a Symbol Server stores the PDBs and binaries for all your public builds. That way no matter what build someone reports a crash or problem, you have the exact matching PDB file for that public build the debugger can access. Both Visual Studio and WinDBG know how to access Symbol Servers and if the binary is from a public build, the debugger will get the matching PDB file automatically. &lt;/P&gt;
&lt;P&gt;Most of you reading this will also need to do one preparatory step before putting your PDB files in the Symbol Server. That step is to run the Source Server tools across your public PDB files, which is called source indexing. The indexing embeds the version control commands to pull the exact source file used in that particular public build. Thus, when you are debugging that public build you never have to worry about finding the source file for that build. If you're a one or two person team, you can sometimes live without the Source Server step. For the rest of you, read my &lt;A href="http://msdn.microsoft.com/en-us/magazine/cc163563.aspx"&gt;article&lt;/A&gt; in MSDN Magazine on Source Server to learn how to use it. &lt;/P&gt;
&lt;P&gt;The rest of this entry will assume you have set up Symbol Server and Source Server indexing. One good piece of news for those of you who will be using TFS 2010, out of the box the Build server will have the build task for Source Indexing and Symbol Server copying as part of your build. &lt;/P&gt;
&lt;P&gt;One complaint I've heard against setting up a Symbol Server from some teams is that their software is too big and complex. I have to admit that when I hear people say that it translates to me as "My team is dysfunctional." There's no way your software is bigger and more complex than everything Microsoft does. They source index and store every single build of &lt;EM&gt;&lt;STRONG&gt;all&lt;/STRONG&gt; &lt;/EM&gt;products they ship into a Symbol Server. That means everything from Windows, to Office, to SQL, to Games and everything in between is stored in one central location. My guess is that Building 34 in Redmond is nothing but SAN drives to hold all of those files and everyone in that building is there to support those SANs. It's so amazing to be able to debug anything inside Microsoft and you never have to worry about symbols or source (provided you have appropriate rights to that source tree). &lt;/P&gt;
&lt;P&gt;With the key infrastructure discussion out of the way, let me turn to what's in a PDB and how the debugger finds them. The actual file format of a PDB file is a closely guarded secret but Microsoft provides APIs to return the data for debuggers. A native C++ PDB file contains quite a bit of information: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Public, private, and static function addresses &lt;/LI&gt;
&lt;LI&gt;Global variable names and addresses &lt;/LI&gt;
&lt;LI&gt;Parameter and local variable names and offsets where to find them on the stack &lt;/LI&gt;
&lt;LI&gt;Type data consisting of class, structure, and data definitions &lt;/LI&gt;
&lt;LI&gt;Frame Pointer Omission (FPO) data, which is the key to native stack walking on x86 &lt;/LI&gt;
&lt;LI&gt;Source file names and their lines &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;A .NET PDB only contains two pieces of information, the source file names and their lines and the local variable names. All the other information is already in the .NET metadata so there is no need to duplicate the same information in a PDB file. &lt;/P&gt;
&lt;P&gt;When you load a module into the process address space, the debugger uses two pieces of information to find the matching PDB file. The first is obviously the name of the file. If you load ZZZ.DLL, the debugger looks for ZZZ.PDB. The extremely important part is how the debugger knows this is the exact matching PDB file for this binary. That's done through a GUID that's embedded in both the PDB file and the binary. If the GUID does not match, you certainly won't debug the module at the source code level. &lt;/P&gt;
&lt;P&gt;The .NET compiler, and for native the linker, puts this GUID into the binary and PDB. Since the act of compiling creates this GUID, stop and think about this for a moment. If you have yesterday's build and did not save the PDB file will you ever be able to debug the binary again? &lt;EM&gt;No!&lt;/EM&gt; This is why it is so critical to save your PDB files for every build. Because I know you're thinking it, I'll go ahead and answer the question already forming in your mind: no, there's no way to change the GUID. &lt;/P&gt;
&lt;P&gt;However, you can look at the GUID value in your binary. Using a command line tool that comes with Visual Studio, &lt;A href="http://msdn.microsoft.com/en-us/library/c1h23y6c(loband).aspx"&gt;DUMPBIN&lt;/A&gt;, you can list all the pieces of your Portable Executable (PE) files. To run DUMPBIN, open the Visual Studio 2008 Command Prompt from the Program's menu, as you will need the PATH environment variable set in order to find the DUMPBIN EXE. By the way, if you're interested in more about the information that DUMPBIN shows you, I highly recommend the definitive articles on the PE file by Matt Pietrek in the &lt;A href="http://msdn.microsoft.com/en-us/magazine/dvdarchive/cc301805.aspx"&gt;February 2002&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/magazine/dvdarchive/cc301808.aspx"&gt;March 2002&lt;/A&gt; issues of MSDN Magazine. &lt;/P&gt;
&lt;P&gt;There are numerous command line options to DUMPBIN, but the one that shows us the build GUID is /HEADERS. The Pietrek articles will explain the output, but the important piece to us is the Debug Directories output: &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Debug Directories &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;Time Type Size RVA Pointer &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;-------- ------ -------- -------- -------- &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;4A03CA66 cv 4A 000025C4 7C4 Format: RSDS, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp; {4B46C704-B6DE-44B2-B8F5-A200A7E541B0}, 1, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;C:\junk\stuff\HelloWorld\obj\Debug\HelloWorld.pdb &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;With the knowledge of how the debugger determines the correctly matching PDB file, I want to talk about where the debugger looks for the PDB files. You can see all of this order loading yourself by looking at the Visual Studio Modules window, Symbol File column when debugging. The first place searched is the directory where the binary was loaded. If the PDB file is not there, the second place the debugger looks is the hard coded build directory embedded in the Debug Directories in the PE file. If you look at the above output, you see the full path C:\JUNK\STUFF\HELLOWORLD\OBJ\DEBUG\HELLOWORD.PDB. (The MSBUILD tasks for building .NET applications actually build to the OBJ\&amp;lt;CONFIG&amp;gt; directory and copy the output to DEBUG or RELEASE directory only on a successful build.) If the PDB file is not in the first two locations, and a Symbol Server is set up for the on the machine, the debugger looks in the Symbol Server cache directory. Finally, if the debugger does not find the PDB file in the Symbol Server cache directory, it looks in the Symbol Server itself. This search order is why your local builds and public build parts never conflict. &lt;/P&gt;
&lt;P&gt;How the debugger searches for PDB files works just fine for nearly all the applications you'll develop. Where PDB file loading gets a little more interesting are those .NET applications that require you to put assemblies in the Global Assembly Cache (GAC). I'm specifically looking at you SharePoint and the cruelty you inflict on web parts, but there are others. For private builds on your local machine, life is easy because the debugger will find the PDB file in the build directory as I described above. The pain starts when you need to debug or test a private build on another machine. &lt;/P&gt;
&lt;P&gt;On the other machine, what I've seen numerous developers do after using &lt;A href="http://msdn.microsoft.com/en-us/library/ex0ss12c(loband).aspx"&gt;GACUTIL&lt;/A&gt; to put the assembly into the GAC is to open up a command window and dig around in C:\WINDOWS\ASSEMBLY\ to look for the physical location of the assembly on disk. While it is subject to change in the future, an assembly compiled for Any CPU is actually in a directory like the following: &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;C:\Windows\assembly\GAC_MSIL\Example\1.0.0.0__682bc775ff82796a &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Example is the name of the assembly, 1.0.0.0 is the version number, and 682bc775ff82796a is the public key token value. Once you've deduced the actual directory, you can copy the PDB file to that directory and the debugger will load it. &lt;/P&gt;
&lt;P&gt;If you're feeling a little queasy right now about digging through the GAC like this, you should, as it is unsupported and fragile. There's a better way that seems like almost no one knows about, &lt;A href="http://msdn.microsoft.com/en-us/library/cskzh7h6(loband).aspx"&gt;DEVPATH&lt;/A&gt;. The idea is that you can set a couple of settings in .NET and it will add a directory you specify to the GAC so you just need to toss the assembly and it's PDB file into that directory so debugging is far easier. Only set up DEVPATH on development machines because any files stored in the specified directory are not version checked as they are in the real GAC. &lt;/P&gt;
&lt;P&gt;By the way, if you search for DEVPATH in any internet search engine one of the top entries is an out of date blog entry by Suzanne Cook saying Microsoft was getting rid of DEVPATH. That is no longer true. As with any blog entry, look at the date on Suzanne's blog: 2003. That's the equivalent of 1670 in internet years. &lt;/P&gt;
&lt;P&gt;To use DEVPATH, you will first create a directory that has read access rights for all accounts and at least write access for your development account. This directory can be anywhere on the machine. The second step is to set a system wide environment variable, DEVPATH whose value is the directory you created. The documentation on DEVPATH doesn't make this clear, but set the DEVPATH environment variable before you do the next step. &lt;/P&gt;
&lt;P&gt;To tell the .NET runtime that you have DEVPATH set up requires you to add the following to your APP.CONFIG, WEB.CONFIG, or MACHINE.CONFIG as appropriate for your application: &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;lt;configuration&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;runtime&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;developmentMode developerInstallation="true"/&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/runtime&amp;gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY:Courier New;FONT-SIZE:10pt;"&gt;&amp;lt;/configuration&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Once you turn on development mode, you'll know there's a problem with either the DEVPATH environment variable missing for the process or the path you set does not exist if your application dies at startup with a COMException with the error message saying the completely non-intuitive: "Invalid value for registry." Also, be extremely vigilant if you do want to use DEVPATH in MACHINE.CONFIG because every process on the machine is affected. Causing all .NET applications to fail on a machine won't win you many friends around the office. &lt;/P&gt;
&lt;P&gt;The final item every developer needs to know about PDB files is how the source file information is stored in a PDB file. For public builds that have had source indexing tools run on them, the storage is the version control command to get that source file into the source cache you set. For private builds, what's stored is the full path to the source files that compiler used to make the binary. In other words, if you use a source file MYCODE.CPP in C:\FOO, what's embedded in the PDB file is C:\FOO\MYCODE.CPP. This is probably what you already suspected, but I just wanted to make it clear. &lt;/P&gt;
&lt;P&gt;Ideally, all public builds are automatically being source indexed immediately and stored in your Symbol Server so if you don't have to even think any more about where the source code is. However, some teams don't do the source indexing across the PDB files until they have done smoke tests or other blessings to see if the build is good enough for others to use. That's a perfectly reasonable approach, but if you do have to debug the build before its source indexed, you had better pull that source code to the exact same drive and directory structure the build machine used or you may have some trouble debugging at the source code level. While both the Visual Studio debugger and WinDBG have options for setting the source search directories, I've found it hard to get right. &lt;/P&gt;
&lt;P&gt;For smaller projects, it's no problem because there's always plenty of room for your source code. Where life is more difficult is on bigger projects. What are you going to do if you have 30 MB of source code and you have only 20 MB of disk space left on your C: drive? Wouldn't it be nice to have a way to control the path stored in the PDB file? &lt;/P&gt;
&lt;P&gt;While we can't edit the PDB files, there's an easy trick to controlling the paths put inside the PDB files: &lt;A href="http://technet.microsoft.com/en-us/library/bb491006.aspx"&gt;SUBST.EXE&lt;/A&gt;. What SUBST does is associate a path with a drive letter. If you pull your source code down to C:\DEV and you execute "SUBST R: C:\DEV" the R: drive will now show at its top level the same files and directories if you typed "DIR C:\DEV." You'll also see the R: drive in Explorer as a new drive. You can also achieve the drive to path affect by mapping a drive to a shared directory in Explorer. I personally prefer the SUBST approach because it doesn't require any shares on the machine. While some of you are thinking that you can share through &amp;lt;DRIVE&amp;gt;$, some organizations disable that functionality. &lt;/P&gt;
&lt;P&gt;What you'll do on the build machine is set a startup item that executes your particular SUBST command. When the build system account logs in, it will have the new drive letter available and that's where you'll do your builds. With complete control over the drive and root embedded in the PDB file, all you need to do to set up the source code on a test machine is to pull it down wherever you want and do a SUBST execution using the same drive letter the build machine used. Now there's no more thinking about source matching again in the debugger. &lt;/P&gt;
&lt;P&gt;While not all of this information about PDB files I've discussed in this entry is entirely new, I didn't see it in one place before. I hope by getting it all together that you'll find it easier to deal with what's going on and debug your applications faster. Debugging faster means shipping faster so that's always high on the good things scale. Please ask any questions you may have on PDB files in comments, and I'll be happy to dig up the answers for you.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7981" width="1" height="1"&gt;</description></item><item><title>Radial Layout in Silverlight</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/05/04/radial-layout-in-silverlight.aspx</link><pubDate>Mon, 04 May 2009 11:50:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7937</guid><dc:creator>jprosise</dc:creator><slash:comments>16</slash:comments><description>&lt;P&gt;Last week I found myself needing a Silverlight layout control that arranges its items radially so I could use it to template a ListBox. A quick Web search revealed a number of RadialPanel implementations, but none that offered the features I needed. For example, I wanted to be able to rotate the items in the panel to create a spoked arrangement. But I also wanted to have the option of NOT rotating the items to achieve a more traditional layout.&lt;/P&gt;
&lt;P&gt;So I built a RadialPanel that supports both options. It has three key properties (all dependency properties) that you can use to configure it:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Radius, which specifies the radius of the radial layout&lt;/LI&gt;
&lt;LI&gt;ItemAlignment, which specifies whether items are left, center, or right-aligned&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;ItemOrientation, which specifies whether items are upright or rotated&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;To demonstrate, I declared a ListBox containing eight colored rectangles and assigned a RadialPanel to the ListBox's ItemsPanel property:&lt;/P&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;ListBox&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="600"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="600"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;ListBox.ItemsPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;ItemsPanelTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;custom&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;RadialPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Radius&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="200"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; ItemAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Center"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ItemOrientation&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Upright" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;ItemsPanelTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;ListBox.ItemsPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Red" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Orange" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Yellow" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Green" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Blue" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Darkblue" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="Purple" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;Rectangle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt; Fill&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;="#ff80c0" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;ListBox&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-fareast-font-family:'Times New Roman';"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;/SPAN&gt;Here's what the resulting ListBox looked like:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="RadialPanel with Upright Items" style="WIDTH:374px;HEIGHT:375px;" height=375 alt="RadialPanel with Upright Items" src="http://www.wintellect.com/CS/photos/prosise/images/7935/374x375.aspx" width=374&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Next, I created another RadialPanel&amp;nbsp;ListBox, but this time I set ItemOrientation to "Rotated" and used TextBlocks as ListBox items. I also set ItemAlignment to "Left" to align the TextBlocks along the inside radius:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ListBox&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="600"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="600"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="20"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ListBox.ItemsPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ItemsPanelTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;custom&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RadialPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Radius&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="150"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; ItemAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Left"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ItemOrientation&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Rotated" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ItemsPanelTemplate&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ListBox.ItemsPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Jeff Prosise"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Red" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Jeffrey Richter"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Orange" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="John Robbins"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Green" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Steve Porter"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Blue" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Keith Rome"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Blue" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Rik Robinson"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Darkblue" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Andy Hopper"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Purple" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Sergio Lascio"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Foreground&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="#ff80c0" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ListBox&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;And here was the result:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="RadialPanel with Rotated Items" style="WIDTH:375px;HEIGHT:375px;" height=375 alt="RadialPanel with Rotated Items" src="http://www.wintellect.com/CS/photos/prosise/images/7936/375x375.aspx" width=375&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I &lt;A class="" title="RadialPanel Source Code" href="http://www.wintellect.com/downloads/radialpanel.zip"&gt;posted the source code&lt;/A&gt; in case you need a RadialPanel, too. It works in Silverlight 2 and in Silverlight 3 Beta 1. Feel free to use my RadialPanel in projects of your own, with one condition: let me know if you find bugs. I think I accounted for everything, but custom layout controls are tricky to write, and many of the custom layout controls that are bandied about the Web aren't very robust.&lt;/P&gt;
&lt;P&gt;Incidentally, if you're coming to TechEd next week and want to see lots of cool Silverlight samples, drop by my &lt;A class="" title="Silverlight Precon at TechEd" href="http://www.msteched.com/teched/seminars.aspx" target=_blank&gt;Silverlight precon&lt;/A&gt; on Sunday. The last couple of hours of the day will be devoted to Silverlight 3, so it's sure to be a blast!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7937" width="1" height="1"&gt;</description></item><item><title>More on Silverlight 3's Navigation Framework</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/30/more-on-silverlight-3-s-navigation-framework.aspx</link><pubDate>Thu, 30 Apr 2009 15:56:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7926</guid><dc:creator>jprosise</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;A&amp;nbsp;few weeks ago, I blogged about a &lt;A class="" title=WriteableBitmap href="http://www.wintellect.com/CS/blogs/jprosise/archive/2009/03/23/silverlight-3-s-new-writeablebitmap.aspx" target=_blank&gt;sample application&lt;/A&gt; I&amp;nbsp;wrote that uses Silverlight 3's WriteableBitmap class to draw views of the Mandelbrot set. I hadn't used it long before&amp;nbsp;I realized&amp;nbsp;that it really needed Back-button support. You could drill down into the Mandelbrot set, but you couldn't drill back out. Enabling the browser's Back and Forward buttons seemed a natural way to remedy the situation, but Silverlight and the Back button have never gotten along very well.&lt;/P&gt;
&lt;P&gt;Silverlight 3's navigation framework enables the Back button by allowing&amp;nbsp;developers to organize&amp;nbsp;content into navigable "pages" and adding an entry to the browser's history journal each time the user navigates&amp;nbsp;from one page to another. It also adds deep linking support by making each page (and the state that defines it) bookmarkable.&amp;nbsp;Having deep linking support would be a huge plus in my Mandelbrot viewer because users would be able to share fractal scenes&amp;nbsp;by&amp;nbsp;passing around&amp;nbsp;URLs.&lt;/P&gt;
&lt;P&gt;So I built a new version of the app that combines Silverlight 3's navigation framework with self-referential pages to add deep linking and Back-button support. "Self-referential" means the application consists of a single page that navigates to itself to draw new views of the Mandelbrot set. Each navigation event is accompanied&amp;nbsp;by a RESTful URL that defines precisely which region of the set to render. And each navigation event generates a history node that enables the user to back out of the current location by clicking the Back button.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Navigable Mandelbrot Demo" style="WIDTH:394px;HEIGHT:375px;" height=375 alt="Navigable Mandelbrot Demo" src="http://www.wintellect.com/CS/photos/prosise/images/7925/394x375.aspx" width=394&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can &lt;A class="" title="Mandelbrot Demo" href="http://www.wintellect.com/silverlight/mandelbrot/" target=_blank&gt;try the app online&lt;/A&gt;, or you can &lt;A class="" title="Mandelbrot Demo Source Code" href="http://www.wintellect.com/downloads/NavigableMandelbrotDemo.zip"&gt;download the source code&lt;/A&gt; and&amp;nbsp;run it locally. Of course, you'll need to have the Silverlight 3 Beta 1 Tools for Visual Studio installed to do the latter. As you peruse the source code, here are a few highlights to serve as guide posts:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;MainPage.xaml contains little more than a Frame&amp;nbsp;control. The only "page" in the app is Mandelbrot.xaml.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;The logic for drawing a new view of the Mandelbrot set lives in the&amp;nbsp;page's OnNavigatedTo method and in the helper method named DrawMandelbrotSet.&amp;nbsp;OnNavigatedTo looks for&amp;nbsp;a query string containing four coefficients that define a rectangle in the complex plane; this rectangle&amp;nbsp;identifies a region of the Mandelbrot set. When you let go of the mouse button after dragging a selection rectangle around the region you want to zoom into, the page navigates to itself and includes a new query string identifying that region.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;An instance of UriMapper declared in App.xaml converts raw URLs into RESTful ones and cleans up the stuff in the browser's address bar a bit.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Check it out and if you find a particularly beautiful scene in the Mandelbrot set, post a link in the comments section so the rest of us can see it, too. And for kicks, &lt;A class="" title=Swirl href="http://www.wintellect.com/silverlight/mandelbrot/#Mandelbrot/-0.352872806093727/-0.332658039759345/0.633045599549634/0.64769398095136" target=_blank&gt;here's a scene&lt;/A&gt; to get you started.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7926" width="1" height="1"&gt;</description></item><item><title>Silverlight 3's New Child Windows</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/29/silverlight-3-s-new-child-windows.aspx</link><pubDate>Wed, 29 Apr 2009 15:39:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7922</guid><dc:creator>jprosise</dc:creator><slash:comments>5</slash:comments><description>&lt;P&gt;If you've worked with Silverlight 3, you may have noticed that Visual Studio's Add New Item dialog includes an option for adding a "Silverlight Child Window" to your Silverlight project:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Silverlight Child Window" style="WIDTH:500px;HEIGHT:302px;" height=302 alt="Silverlight Child Window" src="http://www.wintellect.com/CS/photos/prosise/images/7920/500x302.aspx" width=500&gt;&lt;/P&gt;
&lt;P&gt;The new child window feature makes it easy to add modal dialogs to Silverlight applications. A child window derives from the new ChildWindow class, and its content is defined in XAML (of course!). So you can now embellish an application with modal popups containing rich content.&lt;/P&gt;
&lt;P&gt;To see this feature in action, create a new Silverlight project and add a Silverlight child window to it. Replace "ChildWindow1.xaml" in the Name box with "ErrorDialog.xaml" and click OK. Visual Studio responds by adding two new files to your project: ErrorDialog.xaml, which contains the child window's UI, and ErrorDialog.xaml.cs, which contains the child window's code-behind class. You can display your new child window with two simple lines of code:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#2b91af;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ErrorDialog&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; dlg = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;ErrorDialog&lt;/SPAN&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;dlg.Show();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;When you do, an empty dialog appears with OK and Cancel buttons at the bottom. The content behind the dialog grays out and the user has to dismiss the dialog before doing anything else in the application.&lt;/P&gt;
&lt;P&gt;You can add content to the dialog by declaring the content in ErrorDialog.xaml. You can also remove the OK and Cancel buttons by deleting the Button declarations. Here's some content you can plug into ErrorDialog.xaml to customize the dialog's appearance:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Vertical"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Image&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Images/UnhappyFace.png"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Stretch&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="None"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="8" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;TextBlock&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Text&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="An unforeseen error has occurred. Please contact a system administrator or, better yet, use our competitor's Web site until we get the problem resolved."&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; TextWrapping&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Wrap" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="CloseButton"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Close"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Click&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="CloseButton_Click"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="75"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="23"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; HorizontalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Center"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="16"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Grid.Row&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="1" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Add the following line of code to ErrorDialog's constructor to customize the title bar:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Title = &lt;SPAN style="COLOR:#a31515;"&gt;"Error"&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;And add the following&amp;nbsp;method to the ErrorDialog class to handle clicks of the Close button:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; CloseButton_Click(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.DialogResult = &lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;When you display the dialog, here's what you get:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Child Window" style="WIDTH:400px;HEIGHT:260px;" height=260 alt="Child Window" src="http://www.wintellect.com/CS/photos/prosise/images/7921/original.aspx" width=400&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It's not earth-shaking, but it's certainly nice to have the ability to dress up your apps with genuine modal dialogs.&lt;/P&gt;
&lt;P&gt;This is all rather straightforward, but certain aspects of a child window's operation&amp;nbsp;merit further explanation. For example, the ChildWindow class has a Close() method&amp;nbsp;that you can call to close a dialog, but my CloseButton_Click handler, which is patterned after the click handlers provided by Visual Studio, doesn't call it. DialogResult's setter calls Close for you, so simply assigning a value to the DialogResult property is sufficient to close the dialog.&lt;/P&gt;
&lt;P&gt;Another&amp;nbsp;aspect of&amp;nbsp;child windows that may not be obvious is that Show() is an asynchronous call. That is, it doesn't wait for the dialog to be dismissed;&amp;nbsp;it returns immediately. That's why Show() returns void rather than a DialogResult. If you want to know how the dialog was dismissed (that is, what the DialogResult value is once the dialog is closed), you handle the dialog's Closed event and check DialogResult there:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#2b91af;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ErrorDialog&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; dlg = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;ErrorDialog&lt;/SPAN&gt; ();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;dlg.Closed += &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;EventHandler&lt;/SPAN&gt;(OnErrorDialogClosed);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;dlg.Show();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;private void&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; OnErrorDialogClosed(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;EventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;ErrorDialog&lt;/SPAN&gt; dlg = (&lt;SPAN style="COLOR:#2b91af;"&gt;ErrorDialog&lt;/SPAN&gt;)sender;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;bool&lt;/SPAN&gt;? result = dlg.DialogResult;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;Note that DialogResult is a nullable bool, so&amp;nbsp;it isn't necessarily set to true or false.&lt;/P&gt;
&lt;P&gt;One last item to consider is how to retrieve input from a child window that allows the user to input data. Generally you build public properties into the dialog class and transfer values from the dialog's input controls into these properties in&amp;nbsp;the OK button's click handler. After the dialog is dismissed, you then retrieve the user input from the dialog properties. For example, suppose a child-window class named InputDialog contains a TextBox named "InputBox" so the user can enter text. You could do this in the dialog class:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; Input { &lt;SPAN style="COLOR:blue;"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR:blue;"&gt;set&lt;/SPAN&gt;; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; OKButton_Click(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Input = InputBox.Text;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.DialogResult = &lt;SPAN style="COLOR:blue;"&gt;true&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;And&amp;nbsp;after the dialog is dismissed,&amp;nbsp;you could do this to find out what the user typed into the TextBox:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; OnInputDialogClosed(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;EventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;InputDialog&lt;/SPAN&gt; dlg = (&lt;SPAN style="COLOR:#2b91af;"&gt;InputDialog&lt;/SPAN&gt;)sender;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;bool&lt;/SPAN&gt;? result = dlg.DialogResult;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (result.HasValue &amp;amp;&amp;amp; result.Value)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; input = dlg.Input;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;This is how we used to retrieve input from dialog boxes in MFC. And now, 15 years later, it comes in handy again. I guess useful patterns never die!&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7922" width="1" height="1"&gt;</description></item><item><title>Moving from VMware Server to Hyper-V</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/04/26/moving-from-vmware-server-to-hyper-v.aspx</link><pubDate>Sun, 26 Apr 2009 19:58:33 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7903</guid><dc:creator>jrobbins</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;As I've written in the &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/08/complete-virtual-machine-backups-with-mere-minutes-of-downtime.aspx"&gt;past&lt;/a&gt;, I've been using VMware (both Workstation 6.5 and Server 1.04) for what seems like ages. They've served me well but I wanted to be prepared for two changes coming up this year. The first is Server 2008 R2, which is 64-bit only and secondly Visual Studio Team Foundation System 2010, which I'm guessing will be distributed in a Hyper-V ready image. While I was perfectly happy with VMware Server, my old partner in crime from my NuMega days, &lt;a href="http://blogs.msdn.com/matt_pietrek/default.aspx"&gt;Matt Pietrek&lt;/a&gt;, is on the Hyper-V team so was giving me heck for not supporting him. How could I resist that pressure?
&lt;/p&gt;&lt;p&gt;The transition was generally painless but I thought I'd share a few of the notes I took as I got everything working in the hopes that someone will find them useful. My domain is nothing too fancy just four virtual machines: a domain controller, a TFS 2008 server, a file server, and a build machine. On the user side there's me and "&lt;a href="http://en.wikipedia.org/wiki/She_(novel)"&gt;She who must be obeyed&lt;/a&gt;" (AKA my wife). My server is a wonderful &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2008/03/18/installing-windows-server-2003-r2-x64-on-a-mac-pro.aspx"&gt;Mac Pro&lt;/a&gt; with 9GB RAM with 1.6 TB of drives. When running VMware Server, the host machine was running Server 2003 R2 x64 and all the virtual machines were 32-bit Server 2003 instances. My plan was to move the 32-bit TFS server over from VMware directly and replace all the other servers with the x64 versions of Server 2008 so when Server 2008 R2 ships later this year, I'm all ready for it.
&lt;/p&gt;&lt;p&gt;As I have VMware Workstation on my main development machine (another &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/02/15/vista-x64-on-a-mac-pro-totally-awesome-dude.aspx"&gt;Mac Pro&lt;/a&gt;), I moved the .VMDK and .VMX files for both my domain controller and file server to run them on my desktop while working on this transition. One key point if you do the same: remember to set your power plan on the desktop to keep the machine awake and not go to sleep. Having your most important client yelling at you because the mail and web are down is quite confusing when you're in the middle of watching the Server 2008 installation copy files and you know you haven't touched anything yet.
&lt;/p&gt;&lt;p&gt;Right at the beginning, I ran into a Mac Pro specific obstacle, as I couldn't boot in the Windows 2008 install. The boot would initiate on the CD and the following came up on the monitor:
&lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;background:black;"&gt;&lt;tr&gt;&lt;td style="padding-left:7px;padding-right:7px;"&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;1.&lt;br /&gt;2.&lt;br /&gt;Select CD-ROM Boot Type:&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;No amount of pressing 1 or 2 on the keyboard would work. Fortunately, others had already &lt;a href="http://jowie.com/blog/post/2008/02/24/Select-CD-ROM-Boot-Type-prompt-while-trying-to-boot-from-Vista-x64-DVD-burnt-from-iso-file.aspx"&gt;blazed&lt;/a&gt; this trail and following Jowie's steps got the installation working for me.
&lt;/p&gt;&lt;p&gt;Once I got Hyper-V installed, I did some experiments with dynamic and fixed .VHD disks. As I had done with VMware, I wanted to have an emergency &lt;a href="http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/08/complete-virtual-machine-backups-with-mere-minutes-of-downtime.aspx"&gt;XCOPY&lt;/a&gt; backup of the files for the data files. While not officially supported by Microsoft, being able to restore a machine with a copy command can be a lifesaver. I did both a dynamic and fixed disk test with the excellent &lt;a href="http://technet.microsoft.com/en-us/library/cc772172.aspx"&gt;DISKSHADOW&lt;/a&gt; program from Server 2008 to invoke the Hyper-V VSS writer without shutting down the running VM. As I suspected restoring the dynamic disk copy caused the incomplete shutdown text screen to show up when restarted. The fixed disk restore worked cleanly so that made up my mind that I was going with fixed disks for everything. The trade off is that a fixed disk of 40GB means you get a file of 40GB, but disk space is nearly free these days. 
&lt;/p&gt;&lt;p&gt;In reading about the supported backup methods for Hyper-V servers, I was disappointed that it's all or nothing. That's primarily because the backup program in Server 2008 takes a snapshot of the whole volume so if you want to restore a single VM on that disk volume you can't because it's an all or nothing affair. What I decided to do was partition up my disks and only run one VM on each partition so I could get the supported backup scenario and only have to restore the one VM that needs restoring. 
&lt;/p&gt;&lt;p&gt;I have an excellent &lt;a href="http://www.hp.com/united-states/campaigns/mediasmart-server/"&gt;HP Home Server&lt;/a&gt; doing my client backups and it's truly a "set and forget" backup system. While some have &lt;a href="http://www.johnrpattison.com/blog/windows-home-server-can-back-up-windows-server-2008/"&gt;reported&lt;/a&gt; that WHS can backup Server 2008, I haven't seen where anyone explains the exact step for a valid restore. Maybe I can become an internet hero if I take the plunge and figure out all the steps. I'll put it on my "to-do" list.
&lt;/p&gt;&lt;p&gt;Implementing the new domain controller was a piece of cake with Server 2008. I'm glad I did it now, as there is still a 32-bit version of Server 2008 because running ADPREP before introducing the new domain controller makes life much easier. Not being much of an Active Directory person I'm always terrified when messing around with domain controllers because reading TechNet makes it sound like AD is the most fragile thing in the world. I guess that's my inexperience talking but I don't think I'm alone. One major trick I do know is that before you demote a domain controller, &lt;strong&gt;&lt;em&gt;always&lt;/em&gt;&lt;/strong&gt; run the following command:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;netdom query fsmo
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;That way you make sure you don't accidentally leave those all-important FSMO roles floating out there. I don't know if DCPROMO will catch that error, but I wouldn't want to find out because then you'll have to seize them, which sound quite unpleasant. For you AD novices like me that are looking for AD resources for normal people Sander Berkouwer's excellent &lt;a href="http://blogs.dirteam.com/blogs/sanderberkouwer/default.aspx"&gt;blog&lt;/a&gt; is a treasure.
&lt;/p&gt;&lt;p&gt;Installing MS-DOS 2008, oh, I mean Server Core 2008, for my file server was easy. The problem started when I couldn't log in the first time. Who knew a blank password for Administrator was the way to log on? Another bit of feedback I have for the team is it would be a great idea to have a text file with all the configuration commands in it, like Greg Shield's &lt;a href="http://technet.microsoft.com/en-us/magazine/2009.02.geekofalltrades.aspx"&gt;article&lt;/a&gt;, as part of the install so you could open it in NOTEPAD for easy cut and paste to the command window 
&lt;/p&gt;&lt;p&gt;With the three x64 servers running great I turned to converting my 32-bit Team System .VMDK, which is easy with the free &lt;a href="http://vmtoolkit.com/"&gt;VMDK to VHD Converter&lt;/a&gt; from the fine folks at vmToolkit. A little poking around the web got me to a &lt;a href="http://www.adopenstatic.com/cs/blogs/ken/archive/2008/03/23/16710.aspx"&gt;blog&lt;/a&gt; entry from Ken Schaefer where he discussed his experiences moving from VMware to Hyper-V. He reported there were troubles starting a converted VMware system on Hyper-V RC0 because VMware is using SCSI disks and Hyper-V needs an IDE disk in order to boot. The work around was simply adding an uninitialized IDE disk to the VMware instance before shutting it down. Not finding any other information anywhere, I figured it couldn't hurt to add the IDE drive because I didn't want to go through a repair installation to get things working again. Before I did the conversion, I also removed the VMware tools from my TFS machine. After I did the conversion from VMware to Hyper-V, which was to a dynamic disk, I made the new .VHD a fixed disk with Hyper-V.
&lt;/p&gt;&lt;p&gt;The first boot of the converted .VHD went well but had a message box that a service had failed to start. The Event Viewer showed it to be VMMEMCTL. As that's a VMware service that looks like it didn't properly uninstall I manually deleted all the references with REGEDIT, and the machine was fine. After installing the Hyper-V VM Guest services, which gave me the network connection, I had to authenticate the computer, which I expected since all the hardware changed on the machine. 
&lt;/p&gt;&lt;p&gt;After the TFS server was up and running, I noticed it was running very slowly. In VMware, I had only allocated 1 GB RAM to the machine, which was sufficient. Logging into the machine showed the memory usage was nearly maxed out and it was swapping like crazy. I shut it down and reconfigured Hyper-V to give it 2 GB RAM to see if that would help out, which it did. What's different is that SQL Server 2005 is now using 700MB of memory for its working set. I'm not sure what's causing  the difference as everything's running great and there's no SQL messages in the event log. In all, it was cool that the conversion was that easy. 
&lt;/p&gt;&lt;p&gt;With everything running great on Hyper-V, it was time to tackle my XCOPY backups and that's where I ran into a big problem. I created a DISKSHADOW script for one of my VMs and ran it. Here's the output I got:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;DISKSHADOW&amp;gt; delete shadows all&lt;br /&gt;No shadow copies found in system.&lt;br /&gt;DISKSHADOW&amp;gt; set context persistent&lt;br /&gt;DISKSHADOW&amp;gt; Writer Verify {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}&lt;br /&gt;DISKSHADOW&amp;gt; add volume c: alias myshadow create&lt;br /&gt;
			&lt;span style="color:red;"&gt;The component "Microsoft Hyper-V VSS Writer" was not found in the writer components list. Aborting backup ...&lt;br /&gt;       Check the syntax of the component name.&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;That was odd that the Hyper-V VSS writer was no longer there. Running the DISKSHADOW list writers command showed the Hyper-V VSS writer active. Running VSSADMIN with the list writers command, which shows you the state of the VSS writers showed life was peachy:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool&lt;br /&gt;(C) Copyright 2001-2005 Microsoft Corp.&lt;br /&gt;Writer name: 'Microsoft Hyper-V VSS Writer'&lt;br /&gt;   Writer Id: {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}&lt;br /&gt;   Writer Instance Id: {a61296b9-d85f-4400-9bfb-ea58b2b78294}&lt;br /&gt;   State: [1] Stable&lt;br /&gt;   Last error: &lt;span style="color:red;"&gt;No error&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The event log showed an odd VSS error 1009 with no information:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;The description for Event ID 10009 from source VSS cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.&lt;br /&gt;&lt;br /&gt;If the event originated on another computer, the display information had to be saved with the event.&lt;br /&gt;&lt;br /&gt;The following information was included with the event:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;the message resource is present but the message is not found in the string/message table
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Using the Server 2008 backup system from the command line, I was able to back up the entire machine with no problems. Here's where I was perplexed because it sure looked like no matter what I tried, DISKSHADOW would not back up my VMs! I really want that XCOPY save your butt backup! 
&lt;/p&gt;&lt;p&gt;In panic, I wrote a friend at Microsoft and after a little back and forth, we figured out the problem. Part of it was between the keyboard and chair in my office and part of it was a completely bogus error message. Where I was thinking DISKSHADOW worked on an individual disk, it really needs to be named &lt;em&gt;MACHINESHADOW&lt;/em&gt;. It will only work if you include &lt;strong&gt;&lt;em&gt;all&lt;/em&gt;&lt;/strong&gt; the component volumes listed under the Hyper-V VSS Writer when you do the list writers command. As I have four drives with running VHDs on them, I need to ensure the following as in the DISKSHADOW script I use:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;Add Volume E:\ Alias DomainControllerShadow&lt;br /&gt;Add Volume D:\ Alias FileServerShadow&lt;br /&gt;Add Volume I:\ Alias TeamSystemShadow &lt;br /&gt;Add Volume J:\ Alias BuildMachine&lt;br /&gt;Add Volume C:\ Alias Ignored
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Even though I don't have any VMs running on my C: drive if it's in the component list, it has to be included. Given the bizarre error messages in the output and the event log, I hope this helps someone else if they run into the same problem.
&lt;/p&gt;&lt;p&gt;After hurtling my small bump with DISKSHADOW, it was neat to see VMs backed up without shutting them down. I'm including my domain controller as part of that backup. The whole snapshot and ROBOCOPY process for all four VMs takes about 40-45 minutes total as I first save everything on the HYPER-V machine. The ROBOCOPY of those saved images to my WHS machine is about 30 minutes. 
&lt;/p&gt;&lt;p&gt;My small environment doesn't have any replication nor am I replying on snapshots so it works for me (YMMV). Of course, I'm still doing normal backups in addition. If your network is more complicated than mine is you must read the great whitepaper &lt;a href="http://technet.microsoft.com/en-us/library/dd363553.aspx"&gt;Running Domain Controllers in Hyper-V&lt;/a&gt; so you don't cause yourself any problems. 
&lt;/p&gt;&lt;p&gt;If anyone has any questions about what I've done please ask away. &lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7903" width="1" height="1"&gt;</description></item><item><title>Missed Devscovery NYC? See the Keynote!</title><link>http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/04/21/missed-devscovery-nyc-see-the-keynote.aspx</link><pubDate>Wed, 22 Apr 2009 00:57:29 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7880</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Missed Devscovery NYC? See the Keynote!
&lt;/p&gt;&lt;p&gt;If you couldn't make it to NYC last week to have a blast at &lt;a href="http://www.devscovery.com/"&gt;Devscovery&lt;/a&gt;, we missed you. One of the most interesting parts was &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman's&lt;/a&gt; keynote on &lt;a href="http://www.hanselman.com/blog/SocialNetworkingForDevelopersConferenceTalkVideo.aspx"&gt;Social Networking for Developers&lt;/a&gt;. Scott, with the help of Paul Mooney, have posted the video so you can &lt;a href="http://www.hanselman.com/blog/SocialNetworkingForDevelopersConferenceTalkVideo.aspx"&gt;watch&lt;/a&gt; the keynote and see how things like blogs, Twitter, and Facebook can make you a better developer. It's a fantastic talk and will give everyone something to think about.
&lt;/p&gt;&lt;p&gt;After the conference, I looked over the reviews and Scott's keynote got rave reviews. His keynote is full of practical advice if you've never dipped your toe into the blogging or social networking world. Even if you're on everything, there are many ideas on how you can use social networking to "manage your brand." It today's economic climate, it's critical that you do.
&lt;/p&gt;&lt;p&gt;Several of the people I talked to at Devscovery were inspired to start their own blogs because of Scott's talk but were worried that they didn't have anything to say. Everyone developing software for a living has plenty to say that others want to read about. You're fighting battles everyday to get the job done and make a difference. We all want to read about those battles so we can avoid the same problems ourselves. 
&lt;/p&gt;&lt;p&gt;Also, look at it this way, as a software developer we are really in the communications business. The more you practice your written communications skills, the better you become. It doesn't take that much time to write, maybe 15-20 minutes a day. Just do it!
&lt;/p&gt;&lt;p&gt;Thanks again to Scott for doing an amazing job. If you want to see Scott live, which is not to be missed, there's always Devscovery Redmond coming up August 18-20.&lt;/p&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7880" width="1" height="1"&gt;</description></item><item><title>VirtualBox Rocks!</title><link>http://www.wintellect.com/CS/blogs/ahopper/archive/2009/04/16/virtualbox-rocks.aspx</link><pubDate>Thu, 16 Apr 2009 14:12:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7864</guid><dc:creator>ahopper</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;Chances are that you haven't heard about &lt;A title="VirtualBox home" href="http://www.virtualbox.org/" target=_blank&gt;VirtualBox&lt;/A&gt;. It is yet another virtualization environment, but it has some great features. It has support for Linux/OSX/Windows as the host OS and Linux/BSD/Windows/etc as guest OSes (both x86 and x64), it supports 3D (via OpenGL) acceleration, and it's free to boot! I highly recommend it. (It even plays nice with Windows 7!)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.virtualbox.org/"&gt;http://www.virtualbox.org&lt;/A&gt;&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7864" width="1" height="1"&gt;</description></item><item><title>Silverlight 3's New Style Enhancements</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/08/silverlight-3-s-new-style-enhancements.aspx</link><pubDate>Wed, 08 Apr 2009 12:29:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7838</guid><dc:creator>jprosise</dc:creator><slash:comments>1</slash:comments><description>&lt;P&gt;If I had a dollar for every time a developer has said to me "You mean a style can only be applied to an object once in Silverlight? How brain dead!" or "Why doesn't Silverlight support BasedOn styles like WPF?", I'd be retired on a tropical island with my own private runway and a fleet of radio-controlled jets. So maybe I exaggerate. Nevertheless, developers will love the style-related enhancements coming in Silverlight 3, which include:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Support for BasedOn styles (style inheritance)&lt;/LI&gt;
&lt;LI&gt;Support for dynamic styling and skinning (styles can be applied more than once)&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Support for merged resource dictionaries&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The sample application pictured below demonstrates all three facets of Silverlight 3's new and improved style story:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Stylin'!!!" style="WIDTH:489px;HEIGHT:375px;" height=375 alt="Stylin'!!!" src="http://www.wintellect.com/CS/photos/prosise/images/7839/489x375.aspx" width=489&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's how you can build&amp;nbsp;the application&amp;nbsp;and experience these enhancements yourself. Begin by creating a new Silverlight 3 project and adding the following declarations to MainPage.xaml:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Orientation&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Vertical"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; VerticalAlignment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Center"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="SampleButton"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Sample Button"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="300"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Height&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="200"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="24" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RadioButton&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="UnstyledOption"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Unstyled"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="20"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="260"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Margin&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="0,36,0,0"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; IsChecked&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="True"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Click&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="RadioButton_Click" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RadioButton&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="BlurredOption"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Blurred"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="20"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="260"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Click&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="RadioButton_Click" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RadioButton&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="RotatedOption"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Rotated"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="20"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="260"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Click&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="RadioButton_Click" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RadioButton&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="BlurredRotatedOption"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Content&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Blurred and Rotated"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;FontSize&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="20"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Width&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="260"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Click&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="RadioButton_Click" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;StackPanel&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;Now add the following event handler to the MainPage class in MainPage.xaml.cs:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; RadioButton_Click(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; name = ((&lt;SPAN style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/SPAN&gt;)sender).Name;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;switch&lt;/SPAN&gt; (name)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;case&lt;/SPAN&gt; &lt;SPAN style="COLOR:#a31515;"&gt;"UnstyledOption"&lt;/SPAN&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SampleButton.Style = &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;break&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;case&lt;/SPAN&gt; &lt;SPAN style="COLOR:#a31515;"&gt;"BlurredOption"&lt;/SPAN&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SampleButton.Style = (&lt;SPAN style="COLOR:#2b91af;"&gt;Style&lt;/SPAN&gt;)&lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.Current.Resources[&lt;SPAN style="COLOR:#a31515;"&gt;"Blurred"&lt;/SPAN&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;break&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;case&lt;/SPAN&gt; &lt;SPAN style="COLOR:#a31515;"&gt;"RotatedOption"&lt;/SPAN&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SampleButton.Style = (&lt;SPAN style="COLOR:#2b91af;"&gt;Style&lt;/SPAN&gt;)&lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.Current.Resources[&lt;SPAN style="COLOR:#a31515;"&gt;"Rotated"&lt;/SPAN&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;break&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;case&lt;/SPAN&gt; &lt;SPAN style="COLOR:#a31515;"&gt;"BlurredRotatedOption"&lt;/SPAN&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SampleButton.Style = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;(&lt;SPAN style="COLOR:#2b91af;"&gt;Style&lt;/SPAN&gt;)&lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.Current.Resources[&lt;SPAN style="COLOR:#a31515;"&gt;"BlurredAndRotated"&lt;/SPAN&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;break&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;Observe that this event handler programmatically applies global styles to a Button control. We need to define those styles, so go to App.xaml and add the following XAML to &lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;Application.Resources&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt;:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ResourceDictionary&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ResourceDictionary.MergedDictionaries&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ResourceDictionary&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Styles.xaml" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ResourceDictionary.MergedDictionaries&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Blurred"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Button"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Effect"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;BlurEffect&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Radius&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="8" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="BlurredAndRotated"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Button"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BasedOn&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="{&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;StaticResource&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Blurred&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="RenderTransform"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RotateTransform&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Angle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="10" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ResourceDictionary&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;One of the styles used in the application is defined external to App.xaml in Styles.xaml. (Note the Source attribute attached to the ResourceDictionary element.) Add a new file named Styles.xaml to your Silverlight project. Set its build action to "Resource" and add the following XAML to it:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ResourceDictionary&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Rotated"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; TargetType&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Button"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Property&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="RenderTransform"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RotateTransform&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Angle&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="10" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter.Value&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Setter&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Style&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;ResourceDictionary&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Now build the project and you're ready to go. Each time you click a radio button, a style is programmatically applied to the Button control—something that you couldn't do more than once in Silverlight 2. One of the styles—the one named "BlurredAndRotated"—is a BasedOn style that adds a RenderTransform setter to the Effect setter defined in the "Blurred" style. Finally, the "Rotated" style is defined externally in Styles.xaml and imported into App.xaml. Stylin'!&lt;/P&gt;
&lt;P&gt;To be sure, there is still a gap between the style support in Silverlight and the style support in WPF. Silverlight still does not, for example, support implicit styles or style triggers, but hey! The team has to save something for Silverlight 4. :-)&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7838" width="1" height="1"&gt;</description></item><item><title>Silverlight 3's New Navigation Framework</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/07/silverlight-3-s-new-navigation-framework.aspx</link><pubDate>Tue, 07 Apr 2009 15:35:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7834</guid><dc:creator>jprosise</dc:creator><slash:comments>4</slash:comments><description>&lt;P&gt;One of Silverlight 3's prominent new features is its built-in navigation framework. This framework allows you to break your content into navigable chunks, or "pages," that derive from the new System.Windows.Controls.Page class. Pages are addressable by URI, just like pages in a conventional Web application, and the new System.Windows.Controls.Frame class provides an API for navigating among pages and integrating with the browser's history mechanism. One of the benefits of using the navigation framework is that it (gasp!) enables the browser's Back and Forward buttons. It also lends a degree of SEO friendliness to Silverlight since individual pages can be identified by URL.&lt;/P&gt;
&lt;P&gt;I wrote a simple application to demonstrate the basics of the navigation framework. You can &lt;A class="" title="Navigation Demo" href="http://www.wintellect.com/Downloads/NavigationDemo.zip" target=_blank&gt;download the app&lt;/A&gt; and check it out for yourself. MainPage.xaml hosts a Frame control that provides visibility into two pages: Index.xaml, which displays a collection of aircraft, and Detail.xaml, which displays a detailed view of a particular aircraft. Index.xaml is displayed when the application first comes up; here's&amp;nbsp;what&amp;nbsp;it looks like:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Navigation Demo Home Page" style="WIDTH:517px;HEIGHT:480px;" height=480 alt="Navigation Demo Home Page" src="http://www.wintellect.com/CS/photos/prosise/images/7832/517x480.aspx" width=517&gt;&lt;/P&gt;
&lt;P&gt;And here's what you see when you click one of the aircraft images (in this case, the one in the middle):&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Navigation Demo Detail Page" style="WIDTH:518px;HEIGHT:480px;" height=480 alt="Navigation Demo Detail Page" src="http://www.wintellect.com/CS/photos/prosise/images/7833/518x480.aspx" width=518&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Index.xaml uses Silverlight 3's new WrapPanel control with some manual data binding to display all the aircraft. The aircraft are represented by instances of a simple custom class named Aircraft, and a separate class named Hangar has methods for retrieving collections of Aircraft objects as well as individual Aircraft objects.&lt;/P&gt;
&lt;P&gt;A good starting point for exploring the sample application is MainPage.xaml, which declares a Frame control and sets the default page to "Aircraft:"&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;Frame&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;="Main"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt; Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;="Aircraft" ... &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;/&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;An instance of&amp;nbsp;UriMapper declared in App.xaml maps requests for "Aircraft" to Index.xaml. Note that in Silverlight 3 Beta 1, the UriMapper must be named "uriMapper," or else it will not work:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Key&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="uriMapper"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Aircraft"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="/Index.xaml" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;UriMapping&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Uri&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="Detail/{id}"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; MappedUri&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;="/Detail.xaml?id={id}" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;nav&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;UriMapper&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;When you click one of the images in Index.xaml, the following event handler retrieves the corresponding aircraft ID from the image's Tag property and navigates to Detail.xaml, passing the aircraft ID in the URI:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;void&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; OnImageClicked(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;MouseButtonEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt; id = ((&lt;SPAN style="COLOR:#2b91af;"&gt;FrameworkElement&lt;/SPAN&gt;)sender).Tag.ToString();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;NavigationService.Navigate(&lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;Uri&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#2b91af;"&gt;String&lt;/SPAN&gt;.Format&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(&lt;SPAN style="COLOR:#a31515;"&gt;"Detail/{0}"&lt;/SPAN&gt;, id), &lt;SPAN style="COLOR:#2b91af;"&gt;UriKind&lt;/SPAN&gt;.Relative));&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Thanks to the second URI mapping in the UriMapper above, "Detail/1000" becomes "/Detail.xaml?id=1000," and the following statement in Detail.xaml.cs extracts the aircraft ID from the query string:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:EN-US;mso-bidi-language:AR-SA;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt; sid = NavigationContext.QueryString[&lt;SPAN style="COLOR:#a31515;"&gt;"id"&lt;/SPAN&gt;];&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Once the aircraft ID is known, a few additional statements in Detail.xaml.cs retrieve the corresponding Aircraft object and use properties of that object to initialize the Image and TextBlock declared in the page.&lt;/P&gt;
&lt;P&gt;When you run the application, notice that after you've clicked a few times, you can use the browser's Back and Forward buttons to navigate around. Also notice that you can bookmark a page that shows a particular aircraft (for example, "NavigationDemoTestPage.html#Detail/1001") and go back to that page simply by pasting the URL into the browser's address bar.&lt;/P&gt;
&lt;P&gt;Using UriMapper isn't strictly necessary, but the beauty of URI mapping is that it allows you to control your URIs. I would rather a user see "NavigationDemoTestPage.html#Aircraft" in the browser's address bar than "NavigationDemoTestPage.html#/Index.xaml." The more complex the URI, the more you'll appreciate URI mapping.&lt;/P&gt;
&lt;P&gt;There is much, much more to the navigation framework than I have presented here, but this sample covers the essentials. &lt;A class="" title="Tim Heuer's Blog" href="http://timheuer.com/blog/" target=_blank&gt;Tim Heuer&lt;/A&gt; and others have blogged about the navigation framework more extensively and have even posted some helpful videos, including &lt;A class="" title="Silverlight 3 Navigation Framework" href="http://silverlight.net/learn/learnvideo.aspx?video=187319" target=_blank&gt;this one&lt;/A&gt;. If your chief concern about previous versions of Silverlight is lack of navigability&amp;nbsp;and incompatibility with search engines, the navigation framework is something you'll find worth digging into.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7834" width="1" height="1"&gt;</description></item><item><title>Silverlight 3's New Assembly Caching</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/06/silverlight-3-s-new-assembly-caching.aspx</link><pubDate>Mon, 06 Apr 2009 10:37:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7821</guid><dc:creator>jprosise</dc:creator><slash:comments>7</slash:comments><description>&lt;P&gt;One of the overarching goals when designing&amp;nbsp;a Silverlight application is to minimize the size of the XAP file. The smaller the XAP file, the faster the application loads.&lt;/P&gt;
&lt;P&gt;In Silverlight 2, one way to prevent external BCL assemblies such as System.Xml.Linq.dll from swelling the XAP file was to delay-load them, as described in &lt;A class="" title="On-Demand Assembly Loading" href="http://www.wintellect.com/CS/blogs/jprosise/archive/2008/10/22/cool-silverlight-trick-3.aspx" target=_blank&gt;this blog post&lt;/A&gt;. Silverlight 3 offers a simpler and more elegant option called &lt;EM&gt;assembly caching&lt;/EM&gt;. To demonstrate, here's a XAP file from a project that includes references to System.Xml.Linq.dll and other assemblies that aren't part of the core run-time. The total size of the XAP file was 225K:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="XAP file without assembly caching" style="WIDTH:500px;HEIGHT:265px;" height=265 alt="XAP file without assembly caching" src="http://www.wintellect.com/CS/photos/prosise/images/7818/500x265.aspx" width=500&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To enable assembly caching, I opened the project properties in Visual Studio and checked the "Reduce Xap size" box:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Reduce XAP size option" style="WIDTH:500px;HEIGHT:264px;" height=264 alt="Reduce XAP size option" src="http://www.wintellect.com/CS/photos/prosise/images/7820/500x264.aspx" width=500&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's the same XAP file after I rebuilt the project. The new size was only 12K:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="XAP file with assembly caching" style="WIDTH:500px;HEIGHT:268px;" height=268 alt="XAP file with assembly caching" src="http://www.wintellect.com/CS/photos/prosise/images/7819/500x268.aspx" width=500&gt;&lt;/P&gt;
&lt;P&gt;How can Silverlight use the external assemblies if they're not packaged in the XAP file? It downloads them from Microsoft's Web site the first time they're needed and caches them locally so they don't have to be downloaded again. Here's&amp;nbsp;the application manifest before the rebuild:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=http://schemas.microsoft.com/client/2007/deployment&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;xmlns:x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=http://schemas.microsoft.com/winfx/2006/xaml&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;EntryPointAssembly&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;EntryPointType&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo.App&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RuntimeVersion&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;3.0.40307.0&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.Parts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;AssemblyPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo.dll&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;AssemblyPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.Windows.Controls.Data&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.Windows.Controls.Data.dll&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;AssemblyPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.Xml.Linq&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.Xml.Linq.dll&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;AssemblyPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.ComponentModel.DataAnnotations&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.ComponentModel.DataAnnotations.dll&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;AssemblyPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.ComponentModel&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;System.ComponentModel.dll&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.Parts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;And here's the application manifest after the rebuild:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=http://schemas.microsoft.com/client/2007/deployment&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;xmlns:x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=http://schemas.microsoft.com/winfx/2006/xaml&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;EntryPointAssembly&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;EntryPointType&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo.App&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;RuntimeVersion&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;3.0.40307.0&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.Parts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;AssemblyPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;x:Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;RestDemo.dll&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.Parts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.ExternalParts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ExtensionPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;http://go.microsoft.com/fwlink/?LinkID=142572&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ExtensionPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;http://go.microsoft.com/fwlink/?LinkId=142576&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;ExtensionPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;http://go.microsoft.com/fwlink/?LinkID=142565&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;ExtensionPart&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;Source&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;http://go.microsoft.com/fwlink/?LinkID=141727&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-ansi-language:FR;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.ExternalParts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;Deployment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Notice the the new&amp;nbsp;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.ExternalParts&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; section, which tells the run-time which additional BCL&amp;nbsp;assemblies need to be downloaded and where to download them from.&lt;/P&gt;
&lt;P&gt;Silverlight caches the downloaded assemblies in the host operating system's default browser cache. Of course, browsers will cache entire XAP files, too, so even a XAP file that contains embedded assemblies doesn't&amp;nbsp;have to be&amp;nbsp;downloaded every time. One big advantage to assembly caching, however,&amp;nbsp;is that cached assemblies can be shared by all the Silverlight apps on a machine. Once application A has downloaded System.Xml.Linq.dll, for example, application B doesn't have to download it if it, too, is configured to load the assembly from the assembly cache.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7821" width="1" height="1"&gt;</description></item><item><title>Silverlight 3's New Out-of-Browser Applications</title><link>http://www.wintellect.com/CS/blogs/jprosise/archive/2009/04/05/silverlight-3-s-new-out-of-browser-applications.aspx</link><pubDate>Sun, 05 Apr 2009 11:18:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:7816</guid><dc:creator>jprosise</dc:creator><slash:comments>6</slash:comments><description>&lt;P&gt;Silverlight is a browser plug-in that enables browser-based applications to display rich, XAML-based UIs, execute managed code, and leverage&amp;nbsp;the .NET Framework Base Class Library. Thus it may come as a surprise to some that in Silverlight 3, applications are no longer restricted to the browser.&lt;/P&gt;
&lt;P&gt;Silverlight applications that run outside the browser are commonly referred to as out-of-browser&amp;nbsp;applications, or OOBs for short. You install an OOB by running a Silverlight application in your browser, right-clicking the Silverlight control, and selecting "Install &lt;EM&gt;appname&lt;/EM&gt; onto this computer" from the context menu. A dialog box like the one below appears and offers to place a shortcut for the app on the desktop, in the Start menu, or both. If you click OK, the app is installed locally on the host PC.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="OOB Install" style="WIDTH:479px;HEIGHT:212px;" height=212 alt="OOB Install" src="http://www.wintellect.com/CS/photos/prosise/images/7815/original.aspx" width=479&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When executed, an OOB application starts up in a window of its own (not a browser window) and is hosted in a process named sllauncher.exe (the "Microsoft Silverlight Offline Launcher"). As the name implies, an OOB doesn't require an online connection; it launches locally, just like any app installed on your computer. However, if a connection is available, an OOB goes back to the server the moment it's launched to check for updates. If an update is available, an event fires so the app can notify the user that a newer version is available. The newer version is automatically downloaded and then executed the next time the&amp;nbsp;OOB is started. In Beta 1, there is no option&amp;nbsp;for declining the update, but don't be surprised if that changes in a future release.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="OOB Demo" style="WIDTH:497px;HEIGHT:375px;" height=375 alt="OOB Demo" src="http://www.wintellect.com/CS/photos/prosise/images/7814/497x375.aspx" width=497&gt;&lt;/P&gt;
&lt;P&gt;Those are the basics; now here are some of the details. First, there is one step that you, the developer, must take if you wish for your application to support being installed locally and&amp;nbsp;run out-of-browser. That step involves a change to the application manifest, which is generated from the AppManifest.xml file in your Silverlight project. Here's an AppManifest.xml that supports OOBs:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;xmlns&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;http://schemas.microsoft.com/client/2007/deployment&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:x&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="COLOR:blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.Parts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.Parts&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.ApplicationIdentity&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ApplicationIdentity&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ShortName&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;SLOOB&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Title&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;Silverlight OOB Demo&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ApplicationIdentity.Blurb&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;!--&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt; Insert description here &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;--&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;ApplicationIdentity.Blurb&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ApplicationIdentity.Icons&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Size&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;16x16&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Icons/Icon16.png&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Size&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;32x32&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Icons/Icon32.png&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Size&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;48x48&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Icons/Icon48.png&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:red;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Size&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;128x128&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;Icons/Icon128.png&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;Icon&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ApplicationIdentity.Icons&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;ApplicationIdentity&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Deployment.ApplicationIdentity&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;Deployment&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Note the new&amp;nbsp;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;Deployment.ApplicationIdentity&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt; section, which contains key information used when a Silverlight app is installed locally, including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;The short name, which&amp;nbsp;appears in the shortcuts created for the OOB&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;The title, which appears in the title bar of the window that hosts the OOB&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;The blurb, which provides a more detailed description of the OOB&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;An optional set of application icons in varying resolutions used in shortcuts, in the title bar, and in the Install Application dialog. If you don't provide icons, a set of default icons&amp;nbsp;is provided for you. Note that when you add the icons to your Silverlight project, you must change their build action from "Resource" to "Content" so they're packaged in the XAP file as loose resources.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It is the presence of an&amp;nbsp;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;ApplicationIdentity&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&amp;gt;&lt;/SPAN&gt; element that prompts Silverlight to include an option for installing an app locally in the right-click context menu.&lt;/P&gt;
&lt;P&gt;There are two ways that a Silverlight app can be installed locally. First, the user can right-click the Silverlight control and select "Install &lt;EM&gt;appname&lt;/EM&gt; onto this computer." Second, the application itself can call the new Application.Detach method:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#2b91af;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;Application&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;mso-bidi-language:AR-SA;mso-ansi-language:EN-US;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;.Current.Detach();&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Detach displays the same Install Application dialog as the "Install &lt;EM&gt;appname&lt;/EM&gt;" menu item and returns a bool indicating whether the application was successfully detached--that is, installed locally.&amp;nbsp;Detach fails if the app has already been installed locally, if&amp;nbsp;OOB support hasn't been enabled through the application manifest, or if the user cancels the install. It also fails if it wasn't called in response to a user action such as a button click.&lt;/P&gt;
&lt;P&gt;Since an OOB application can be launched even if there is no network connection available, it might want&amp;nbsp;to&amp;nbsp;determine at run-time whether it's running in a connected or disconnected state. There's no sense in trying to call a Web service, for example, if you're not even connected to the Internet. One simple call is sufficient to determine whether a network connection is currently available:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;NetworkInterface&lt;/SPAN&gt;.GetIsNetworkAvailable())&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// App is connected&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;else&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// App is not connected&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The NetworkInterface class is new in Silverlight 3; it belongs to the System.Net.NetworkInformation namespace. Another System.Net.NetworkInformation class is NetworkChange, which, through its NetworkAddressChanged event,&amp;nbsp;notifies interested parties&amp;nbsp;when the network status changes--for example, when a network connection becomes available or goes away:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#2b91af;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;NetworkChange&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;.NetworkAddressChanged += Network_NetworkAddressChanged;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp; ...&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;void&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Network_NetworkAddressChanged(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;EventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;NetworkInterface&lt;/SPAN&gt;.GetIsNetworkAvailable())&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// App is connected&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// App is not connected&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;
&lt;P&gt;These calls work in Silverlight apps hosted in the browser, too. And they're useful in both places. An application running offline&amp;nbsp;could, for example, elect to store data locally in isolated storage rather than submit the data to a service if it finds it has no network connection. Incidentally, the moment an application is detached, its isolated storage quota is automatically increased to 25 MB in Beta 1. This affects both the detached version of the app and instances of the app hosted in a browser.&lt;/P&gt;
&lt;P&gt;Can an application that has been detached determine at run-time whether it was launched or in a browser or in a stand-alone window? You bet:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.Current.RunningOffline)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// Launched in sllauncher.exe&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;else&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;// Launched in a browser&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;The new Application.RunningOffline property returns true or false indicating whether the app was launched in a browser (false) or in a separate window (true). This is useful because some Silverlight features that are available to browser-based application instances aren't available to OOB instances. HTML DOM support is one such feature. An OOB app can't interrogate the browser DOM or call JavaScript functions because outside of a browser, these features do not exist. In Beta 1, an application running outside the browser has&amp;nbsp;limited control over the environment in which it is executing. It cannot, for example, change the size of the window in which it is&amp;nbsp;hosted. This may change before final release in response to feedback from developers.&lt;/P&gt;
&lt;P&gt;One final tidbit regarding out-of-browser applications is that the Application class now exposes a public property named ExecutionState. Among other things, this property can be used to determine whether an updated version of an app launched outside the browser is available. Each time an app is launched outside the browser, it sends a request to the server to determine whether a new XAP file is available. If the answer is yes, the XAP is automatically downloaded. (Again, in Beta 1, there is not an option for declining the update). The new version isn't executed automatically; instead, it's executed the next time the app is started outside the browser. An OOB can use the new Application.ExecutionStateChanged event to learn when a newer version is available and prompt the user to restart the app to launch the new version:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#2b91af;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;Application&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;.Current.ExecutionStateChanged += Application_ExecutionStateChanged;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp; ...&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;void&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt; Application_ExecutionStateChanged(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR:#2b91af;"&gt;EventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (&lt;SPAN style="COLOR:#2b91af;"&gt;Application&lt;/SPAN&gt;.Current.ExecutionState ==&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;ExecutionStates&lt;/SPAN&gt;.DetachedUpdatesAvailable)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;MessageBox&lt;/SPAN&gt;.Show(&lt;SPAN style="COLOR:#a31515;"&gt;"An updated version of this application is available. " &lt;/SPAN&gt;+&lt;SPAN style="COLOR:#a31515;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;"Close the application and restart it to run the new version."&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;);&lt;SPAN style="COLOR:#a31515;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Courier New';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;I have been mostly unsuccessful in getting the automatic update&amp;nbsp;feature to work in Beta 1, but I suppose that's why they call it a beta.&lt;/P&gt;
&lt;P&gt;For more on Silverlight 3's out-of-browser application support, see Tim Heuer's &lt;A class="" title="Out-of-Browser Applications" href="http://timheuer.com/blog/archive/2009/03/18/silverlight-3-offline-update-framework.aspx" target=_blank&gt;excellent blog post&lt;/A&gt; on the subject.&lt;/P&gt;&lt;img src="http://www.wintellect.com/CS/aggbug.aspx?PostID=7816" width="1" height="1"&gt;</description></item></channel></rss>