<?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 Task: Async and Await in a Windows Runtime World</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/05/14/the-task-async-and-await-in-a-windows-runtime-world.aspx</link><pubDate>Tue, 15 May 2012 03:43:01 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20798</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>In my last blog post , I covered how to wrap your arms around the Task class and its relationship to the new async and await keywords. I mentioned that the post was focused on the .NET Framework only because the Windows Runtime handles these operations differently. In this post, I’ll cover what those differences are. Task is a Task is a Task First, in the Windows Runtime, a Task is a Task … is a Task . You can write your code to return a Task or Task&amp;lt;T&amp;gt; in your Windows 8 Metro applications....(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/05/14/the-task-async-and-await-in-a-windows-runtime-world.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20798" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/asynchronous/default.aspx">asynchronous</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/task+parallel+library/default.aspx">task parallel library</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+runtime/default.aspx">windows runtime</category></item><item><title>The Task: Events, Asynchronous Calls, Async and Await</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/05/11/the-task-events-asynchronous-calls-async-and-await.aspx</link><pubDate>Fri, 11 May 2012 17:42:02 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20793</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>2</slash:comments><description>Almost any software application today will likely contain a long-running process. “Long-running” may be a relative term but in the Windows Runtime it is specifically anything that could take longer than 50ms to execute. That’s a fairly small window, and it means those operations will need to run concurrently to the main application thread. Concurrency is important in both client applications (to keep from blocking the UI) and server applications (to accommodate multiple simultaneous requests). The...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/05/11/the-task-events-asynchronous-calls-async-and-await.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20793" width="1" height="1"&gt;</description></item><item><title>Sample Applications from Designing Silverlight Business Applications</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/15/sample-applications-from-designing-silverlight-business-applications.aspx</link><pubDate>Sun, 15 Apr 2012 06:42:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20783</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>I've received a few emails regarding the book that the code files are not available from the publisher website. I've spoken with the publisher about this and they are working to correct it, but I wanted to provide a link for those of you who have been patiently waiting. As a backup to the main website, I've posted all of the sample applications online to SkyDrive and you can download them by clicking on this link . I appreciate you patience and hope you will take the time to post a review on the...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/15/sample-applications-from-designing-silverlight-business-applications.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20783" width="1" height="1"&gt;</description></item><item><title>CodeStock 2012</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/09/codestock-2012.aspx</link><pubDate>Mon, 09 Apr 2012 05:34:01 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20782</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Thanks for everyone's support and votes. I have been selected to present two sessions at CodeStock 2012. Per the CodeStock website: CodeStock is a two day event for technology and information exchange. Created by the community, for the community &amp;mdash; this is not an industry trade show pushing the latest in marketing as technology, but a gathering of working professionals sharing knowledge and experience. This is always a great conference. I have the added bonus of getting close to the corporate...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/09/codestock-2012.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20782" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/codestock/default.aspx">codestock</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/metro/default.aspx">metro</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/mvvm/default.aspx">mvvm</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/winrt/default.aspx">winrt</category></item><item><title>Designing Silverlight Business Applications Officially Released</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/05/designing-silverlight-business-applications-officially-released.aspx</link><pubDate>Thu, 05 Apr 2012 09:24:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20781</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>In June of 2011 I started the journey of writing a Silverlight book. The Silverlight team was about to release version 5 with an incredible set of new features that would revolutionize how it can be used in the enterprise. I knew there were already a number of books available to use a reference for fundamentals and controls, so I wanted to dig deeper and hit the topics I was challenged with in my job as a consultant as well as those questions that continually seem to surface on blogs and forums....(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/05/designing-silverlight-business-applications-officially-released.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20781" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/metro/default.aspx">metro</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/silverlight+5/default.aspx">silverlight 5</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+runtime/default.aspx">windows runtime</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/winrt/default.aspx">winrt</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/xaml/default.aspx">xaml</category></item><item><title>The Top 10 Features Windows 8 Metro Developers Will Love</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/03/the-top-10-features-windows-8-metro-developers-will-love.aspx</link><pubDate>Tue, 03 Apr 2012 10:02:02 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20780</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Windows 8 Metro is a new platform for developing applications that are tailored to the devices on which they run. These devices may include traditional desktops and laptops as well as the new tablet and slate form factors. In this article I cover the top ten features developers will love about the new development environment. This is part of my work on the upcoming book, Building Windows 8 Metro Applications with XAML and C#. Read the full article online at InformIT. (c) 2011-2012 Jeremy Likness...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/04/03/the-top-10-features-windows-8-metro-developers-will-love.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20780" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/metro/default.aspx">metro</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/xaml/default.aspx">xaml</category></item><item><title>Using NuGet PowerShell to Replace Missing Macros in Dev 11</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/03/30/using-nuget-powershell-to-replace-missing-macros-in-dev-11.aspx</link><pubDate>Fri, 30 Mar 2012 20:55:13 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20777</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;When I first heard that macros were being &lt;a href="http://www.infoq.com/news/2011/10/VS-Macros"&gt;dropped&lt;/a&gt; from Dev 11 I was gobsmacked. (I just love that world!) While the macro story up to Visual Studio 2010 wasn’t great because we couldn’t write macros in our .NET language of choice, I expected the situation would start getting better and was saddened when the fix was to remove the easy customizability all together.&lt;/p&gt;  &lt;p&gt;People at Microsoft said that the code behind macros was too brittle to update and their telemetry said macros are feature no one was using. My theory is the reason people skipped macros are because you had to do it in a different language. (VB people: I’m not criticizing VB but most of the developers who would write macros are C#/C++ developers). By dropping macros, the argument was that there was still a valid way to extend the development environment with .VSX files. That’s great but like I really want to install an SDK, write a VSX and have Dev 11 debugging Dev 11 just to enumerate my projects and add a new define to debug build configurations.&lt;/p&gt;  &lt;p&gt;Readers of this blog know I’ve written many macros (&lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/07/17/automatically-freezing-threads-brrrrr.aspx"&gt;examples&lt;/a&gt; &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/07/13/easier-multithreaded-debugging.aspx"&gt;here&lt;/a&gt;) that make debugging in particular easier. I use my macros on a daily basis so was not looking forward to porting them to an extension and all the junk that entails. As I was navigating the file system using the now built in NuGet Package Manager Console window, why not use PowerShell as the macro language? While this works, I’ll still be pestering Microsoft a lot during the Dev 12 development cycle for a real macro system that lets me program in any .NET language.&lt;/p&gt;  &lt;p&gt;To use PowerShell as the macro language, you need access to the Visual Studio automation model. In macros and extensions the root of life is the &lt;a href="http://msdn.microsoft.com/en-us/library/envdte.dte.aspx"&gt;DTE interface&lt;/a&gt;. A quick look at the variables defined in the Package Manager Console shows a $dte variable so once you have that, you’ve got everything! That’s nice when things are easy. &lt;/p&gt;  &lt;p&gt;My goal was to port all my macros over to PowerShell and you can see the results of my porting efforts at the bottom of this blog entry. For the most part, it was simply a matter of porting VB to PowerShell, which wasn’t too onerous if you know PowerShell. The main drawback I encountered is that to debug any functions you write you have to use the old PowerShell 1.0 way of debugging with Set-PSDebug and all the fun of command line debugging. It’s a bit painful, but it does work. &lt;/p&gt;  &lt;p&gt;There were two areas where I got stumped during the porting. The first was in converting interfaces. When accessing the breakpoints in PowerShell, you use $dte.Debugger.Breakpoints. However, that returns the original IBreakpoints interface defined back in Visual Studio 2003. However, if you want to access the Filterby property, you need the IBreakpoints2 interface defined in Visual Studio 2005. As PowerShell’s COM implementation only works with IDispatch, and not explicit interface members, I was not sure I could get everything to work if I couldn’t convert. Fortunately, the NuGet developers already thought of this and provided the &lt;a href="http://docs.nuget.org/docs/start-here/nuget-faq"&gt;Get-Interface&lt;/a&gt; cmdlet that allows easy conversion. The following snippet shows converting an IBreakpoints interface into the IBreakpoints2 interface.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2d8ce7df-6284-4e0d-a442-79daf834e943" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;Get-Interface $dte.Debugger.Breakpoints[0] ([ENVDTE80.Breakpoint2])&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;The second problem in porting I encountered was trying to use a Visual Studio method like $dte.Breakpoints.&lt;a href="http://msdn.microsoft.com/en-us/library/envdte.breakpoints.add.aspx"&gt;Add&lt;/a&gt;, which takes many optional and conflicting parameters. That’s easy to do in VB, but PowerShell sort of likes you to use all the parameters to a COM method. A bit of careful web searching lead me to a great &lt;a href="http://stackoverflow.com/questions/5544844/how-to-call-a-complex-com-method-from-powershell"&gt;solution&lt;/a&gt; by Jason Archer where he uses some seriously ninja PowerShell tricks to solve the problem. If you want to learn some advanced PowerShell, look at &lt;a href="http://stackoverflow.com/questions/5544844/how-to-call-a-complex-com-method-from-powershell"&gt;Invoke-NamedParameter&lt;/a&gt; function.&lt;/p&gt;  &lt;p&gt;By using the Package Manager Console, I thought packaging up my cmdlets as a NuGet package would be the way to go. The only problem is that a NuGet package is designed to be used with a solution, which is the correct approach, but I wanted my cmdlets to be available at all times. To that end I chose to go with a PowerShell module, which works just fine with the Package Manager Console. &lt;/p&gt;  &lt;p&gt;You can put the files in the download anywhere you want, but if you would like to include them in the module path, use Install-Module.PS1 to do the installation. &lt;/p&gt;  &lt;p&gt;It looks like there’s a bug in the NuGet Package Manager Console because the $ENV:PSModulePath does not include the normal user’s documents directory in the default path. Consequently, to run Install-Module.PS1 you will need to run Dev 11 elevated to do the installation as the NuGet modules directory is in Program Files.&lt;/p&gt;  &lt;p&gt;If you’re still using Visual Studio 2010 and you want to try out my cmdlets, please do as they all work provided you installed NuGet. If you have any questions or ideas for other macros, please don’t hesitate to let me know.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wintellect.com/CS/files/folders/20776/download.aspx"&gt;Download WintellectVSCmdlets&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:35e7173f-09fe-4db6-8b4d-91530a97fcc9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;TOPIC&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    about_WintellectVSCmdlets&lt;/li&gt; &lt;li&gt;    &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SHORT DESCRIPTION&lt;/li&gt; &lt;li&gt;    Provides missing functionality, especially around debugging, to Visual Studio 2010 and Dev 11.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;           &lt;/li&gt; &lt;li&gt;LONG DESCRIPTION&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    This describes the basic commands included in the WintellectVSCmdlets module. With Dev 11 not offering&lt;/li&gt; &lt;li&gt;    macros, simple extensions require installing an SDK and debugging the extensions with a second instance&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    of the IDE. In all, it makes for a very poor experience when you want to do simple customization of the &lt;/li&gt; &lt;li&gt;    the development environment.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;/li&gt; &lt;li&gt;    These macros, which are very useful for debugging, demostrate that the NuGet Package Console is &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    sufficient for many of your customization needs. Most of these cmdlets are ports of VB.NET macros that &lt;/li&gt; &lt;li&gt;    John Robbins has shown on his blog and books.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;/li&gt; &lt;li&gt;    All cmdlets work with both Visual Studio 2010 and Dev 11.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;/li&gt; &lt;li&gt;    Note that these cmdlets support C#, VB, and native C++. They probably support more but those were&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    all the languages tested.&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    If you have any questions, suggestions, or bug reports, please contact John at john@wintellect.com.&lt;/li&gt; &lt;li&gt;                 &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    The following Wintellect VS cmdlets are included.&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Cmdlet                                            Description&lt;/li&gt; &lt;li&gt;        ------------------                                ----------------------------------------------&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Add-BreakpointsOnAllDocMethods                  Sets breakpoints on methods in the current code document. This&lt;/li&gt; &lt;li&gt;                                                        is very useful in .NET languages as the debugger expression &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        evaluator does not support that.&lt;/li&gt; &lt;li&gt;                                                        &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Remove-BreakpointsOnAllDocMethods               Removes all the breakpoints set with Add-BreakpointsOnAllDocMethods.&lt;/li&gt; &lt;li&gt;                                                        This cmdlet will not remove any of your breakpoints.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;/li&gt; &lt;li&gt;        Add-InterestingThreadFilterToBreakpoints        Adds the filter &amp;quot;ThreadName==InterestingThread&amp;quot; to all breakpoints to&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        make it easier to debug through a single transaction.&lt;/li&gt; &lt;li&gt;                                                        &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Remove-InterestingThreadFilterFromBreakpoints   Removes the &amp;quot;ThreadName==InterestingThread&amp;quot; filter applied with&lt;/li&gt; &lt;li&gt;                                                        Add-InterestingThreadFilterToBreakpoints.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;        Disable-NonActiveThreads                        Freezes all but the active thread so you can single step to the end&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        of a method without dramatically bouncing to another thread when you &lt;/li&gt; &lt;li&gt;                                                        least expect it.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        &lt;/li&gt; &lt;li&gt;        Resume-NonActiveThreads                         Thaws all threads previously frozen with Disable-NonActiveThreads.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;        Get-Breakpoints                                 Returns the latest version of the IBreakpoints derived list.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;/li&gt; &lt;li&gt;        Get-Threads                                     Returns all the threads.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;/li&gt; &lt;li&gt;        Invoke-NamedParameter                           A wonderful cmdlet that lets you easily call methods with many&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        optional parameters. Full credit to Jason Archer for this cmdlet.&lt;/li&gt; &lt;li&gt;        &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Invoke-WinDBG                                   VS/Dev 11 have ease of use, where WinDBG (with SOS + SOSEX) have &lt;/li&gt; &lt;li&gt;                                                        tons of power to tell you what&amp;#39;s going on in your application. This&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        cmdlet starts WinDBG on the process you&amp;#39;re currently debugging in the&lt;/li&gt; &lt;li&gt;                                                        IDE so you can have the best of both worlds.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        &lt;/li&gt; &lt;li&gt;        Open-LastIntelliTraceRecording                  When you stop debugging, your current IntelliTrace log disappears. This&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                                        cmdlet fixes that by opening the last log you produced so you can post-mortem&lt;/li&gt; &lt;li&gt;                                                        look at your debugging session.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;SEE ALSO&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Online help and updates: http://www.wintellect.com/CS/blogs/jrobbins/default.aspx&lt;/li&gt; &lt;li&gt;    Add-BreakpointsOnAllDocMethods&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Remove-BreakpointsOnAllDocMethods&lt;/li&gt; &lt;li&gt;    Add-InterestingThreadFilterToBreakpoints&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Remove-InterestingThreadFilterFromBreakpoints&lt;/li&gt; &lt;li&gt;    Disable-NonActiveThreads&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Resume-NonActiveThreads&lt;/li&gt; &lt;li&gt;    Get-Breakpoints&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Get-Threads&lt;/li&gt; &lt;li&gt;    Invoke-NamedParameter&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Invoke-WinDBG&lt;/li&gt; &lt;li&gt;    Open-LastIntelliTraceRecording&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20777" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>.NET and Metro: The Windows Runtime and the CLR on Windows 8</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/29/net-and-metro-the-windows-runtime-and-the-clr-on-windows-8.aspx</link><pubDate>Thu, 29 Mar 2012 16:53:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20768</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Many developers tend to look at Windows 8 as a completely new platform and even question whether it heralded the imminent demise of managed code. After spending many months digging into the Windows Runtime (WinRT), Metro style or “tailored” applications, and exploring how they related to the .NET Framework, I’ve come to the conclusion that the two work very closely together and in fact are engineered to integrate. That means good news for managed developers. The .NET Framework 4.5 is very much “Metro-aware”...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/29/net-and-metro-the-windows-runtime-and-the-clr-on-windows-8.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20768" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/.net/default.aspx">.net</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/winrt/default.aspx">winrt</category></item><item><title>Wintellect T-shirt Design – Help us pick our new design!</title><link>http://www.wintellect.com/cs/blogs/bvananda/archive/2012/03/26/wintellect-t-shirt-design-contest-help-us-pick-our-new-design.aspx</link><pubDate>Mon, 26 Mar 2012 18:32:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20737</guid><dc:creator>bvananda</dc:creator><slash:comments>16</slash:comments><description>&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;It’s time for a new Wintellect t-shirt and we want your help. Our Wintellectuals have been hard at work creating designs that we hope all of you will want to wear! We have narrowed down the top 2 designs internally and we want to ask each of you for your help in selecting the new Wintellect t-shirt. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Vote for the design you like by simply placing “Design 1” or “Design 2” into the comments section of this post and by including a short note on what you like most about the design. We will chose the top 5 most inspirational comments and the winners will receive one of Wintellect’s new t-shirts and a $10 Starbucks gift card.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The voting starts NOW and runs through this Friday, March 30th. The 5 winners will be announced during the week of April 1&lt;SUP&gt;st&lt;/SUP&gt;. Thanks for all of your feedback! Vote for the top design TODAY!&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Design 1:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;IMG src="http://www.wintellect.com/CS/photos/bvananda/images/20735/425x283.aspx"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Design 2:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;IMG style="WIDTH:425px;HEIGHT:344px;" src="http://www.wintellect.com/CS/photos/bvananda/images/20736/425x344.aspx" width=425 height=344&gt;&amp;nbsp;&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=20737" width="1" height="1"&gt;</description></item><item><title>Jounce MVVM WCF RIA Printing and More Example</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/22/jounce-mvvm-wcf-ria-printing-and-more-example.aspx</link><pubDate>Thu, 22 Mar 2012 18:52:05 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20716</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>I finally managed to update and upload my To-Do List Reference Application . This is a Silverlight 5 application based on my Jounce framework that demonstrates a number of different features. I built it as part of my book, Designing Silverlight Business Applications . There are several chapters devoted specifically to the construction of this example application. It is a demonstration application, so while it contains a lot of different components designed to illustrate various points, it's not intended...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/22/jounce-mvvm-wcf-ria-printing-and-more-example.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20716" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/Jounce/default.aspx">Jounce</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/mvvm/default.aspx">mvvm</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/navigation/default.aspx">navigation</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/out+of+browser/default.aspx">out of browser</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/silverlight+5/default.aspx">silverlight 5</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/silverlight+printing/default.aspx">silverlight printing</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/wcf+ria/default.aspx">wcf ria</category></item><item><title>Get Your Next Job Here!!</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/03/16/get-your-next-job-here.aspx</link><pubDate>Fri, 16 Mar 2012 20:34:22 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20693</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;We are growing like crazy at Wintellect and want you to work for us! We’d prefer full time employment, but would be happy to also work with some of you excellent independent contractors. At this time we need candidates to be based in North America. What we are looking for are excellent project managers and developers who thrive on challenging work, can work independently, and have excellent communications skills. We don’t care where you live in North America either as we have people all over the US.&lt;/p&gt;  &lt;p&gt;The raw skills we want are ASP.NET MVC, C#, SQL, and WCF. If you’ve just read about those technologies in a book (maybe even one we wrote), that’s not good enough. You need to have a track record of shipping code and open source counts big with us. Please forward your resume and availability to Barbara Keihm, Director of Human Resources, &lt;a href="mailto:bkeihm@wintellect.com?subject=IwanttoworkatWintellect!"&gt;bkeihm@wintellect.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20693" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Wintellect/default.aspx">Wintellect</category></item><item><title>Understanding the Portable Library by Chasing ICommand (3 of 3)</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/14/understanding-the-portable-library-by-chasing-icommand-3-of-3.aspx</link><pubDate>Wed, 14 Mar 2012 04:16:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20689</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Part 1: Creating the Portable Library (this post) Part 2: Portability in Silverlight and WPF: a Tale of Type Forwarders Part 3: Portability in Metro: A CLR and WinRT Love Affair (this post) Portability in Metro: A CLR and WinRT Love Affair In this series we’ve covered the portable library and reviewed how it allows you to create assemblies that can be shared without recompilation across multiple platforms. You created a portable assembly with a view model and a command in it, then successfully integrated...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/14/understanding-the-portable-library-by-chasing-icommand-3-of-3.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20689" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/.net+framework+4.5/default.aspx">.net framework 4.5</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/metro/default.aspx">metro</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/portable+library/default.aspx">portable library</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category></item><item><title>Updated PowerShell Scripts to Manage Symbol Server and Source Server Settings</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/03/13/updated-powershell-scripts-to-manage-symbol-server-and-source-server-settings.aspx</link><pubDate>Wed, 14 Mar 2012 00:28:47 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20687</guid><dc:creator>jrobbins</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;With Dev 11 Beta now in our hot little hands, I needed to update my symbol server and source server PowerShell scripts that automate setting up a developer machine. I’ve packaged up all the scripts previously published on this blog into a module, WintellectPowerShell, to make the cmdlets easier to use.&lt;/p&gt;  &lt;p&gt;To set up a development machine to use a symbol server, use the Set-SymbolServer command. It takes care of setting the _NT_SYMBOL_PATH environment variable, as well as Visual Studio 2010 and Dev 11 Beta provided they are installed. The Set-SourceServer command sets up both VS 2010 and Dev 11, but also will set the _NT_SOURCE_PATH environment variable so WinDBG can pick up the source from your version control system as well. Yes, you C++ folks, these scripts support you as well!&lt;/p&gt;  &lt;p&gt;I’ve also included an update version of my Get-SysinternalsSuite script that will download and extract all the wonderful Sysinternals tools. My previous version of the script relied on an external zip tool, but now used the Shell’s zip provider. There are a few other commands in the module for getting the current symbol server and source server values. The help is shown below and the download is &lt;a href="http://www.wintellect.com/CS/files/folders/20686/download.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;As always let me know if you find any bugs or have suggestions!&lt;/p&gt;  &lt;p&gt;No discussion of PowerShell would be complete without a one-liner that does a lot. I wanted to show the help in this post so you could see all the commands. Once you have a module loaded, you can get the help simply by doing the following:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9383c5b4-402d-4298-8deb-5d1ef65abec5" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;(get-module WintellectPowerShell).ExportedFunctions.Keys | sort | foreach-object { Get-Help detailed $_}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;I thought that was pretty cool!&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d9dfb3b5-2a6b-42b9-b15f-732a0c5289da" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;NAME&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Expand-ZipFile&lt;/li&gt; &lt;li&gt;SYNOPSIS&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Expands a .ZIP file to the specified directory.&lt;/li&gt; &lt;li&gt;SYNTAX&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Expand-ZipFile [-ZipFile] &amp;lt;String&amp;gt; [-Destination] &amp;lt;String&amp;gt; [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li&gt;DESCRIPTION&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Using no external ZIP utilities, expands a .ZIP file to a specified directory.&lt;/li&gt; &lt;li&gt;PARAMETERS&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    -ZipFile &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li&gt;        The .ZIP file to expand.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    -Destination &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li&gt;        The output directory for the ZipFile. If this directory does not exist, it will&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        be created.&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;NAME&lt;/li&gt; &lt;li&gt;    Get-SourceServer&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNOPSIS&lt;/li&gt; &lt;li&gt;    Returns a hashtable of the current source server settings..&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNTAX&lt;/li&gt; &lt;li&gt;    Get-SourceServer [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;DESCRIPTION&lt;/li&gt; &lt;li&gt;    Returns a hashtable with the current source server directories settings&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    for VS 2010, Dev 11 Beta, and the _NT_SOURCE_PATH enviroment variable used &lt;/li&gt; &lt;li&gt;    by WinDBG.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;NAME&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Get-SourceServerFiles&lt;/li&gt; &lt;li&gt;SYNOPSIS&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Prepopulate your symbol cache with all your Source Server extracted source &lt;/li&gt; &lt;li&gt;    code.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNTAX&lt;/li&gt; &lt;li&gt;    Get-SourceServerFiles [-CacheDirectory] &amp;lt;String&amp;gt; [[-SrcTool] &amp;lt;String&amp;gt;] [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;DESCRIPTION&lt;/li&gt; &lt;li&gt;    Recurses the specified symbol cache directory for PDB files with Source Server&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    sections and extracts the source code. This script is a simple wrapper around &lt;/li&gt; &lt;li&gt;    SRCTOOl.EXE from the Debugging Tools for Windows (AKA WinDBG). If WinDBG is in &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    the PATH this script will find SRCTOOL.EXE. If WinDBG is not in your path, use&lt;/li&gt; &lt;li&gt;    the SrcTool parameter to specify the complete path to the tool.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;PARAMETERS&lt;/li&gt; &lt;li&gt;    -CacheDirectory &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        The required cache directory for the local machine.&lt;/li&gt; &lt;li&gt;    -SrcTool &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        The optional parameter to specify where SRCTOOL.EXE resides.&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;NAME&lt;/li&gt; &lt;li&gt;    Get-SymbolServer&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNOPSIS&lt;/li&gt; &lt;li&gt;    Returns a hashtable of the current symbol server settings.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNTAX&lt;/li&gt; &lt;li&gt;    Get-SymbolServer [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;DESCRIPTION&lt;/li&gt; &lt;li&gt;    Returns a hashtable with the current source server directories settings&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    for VS 2010, Dev 11 Beta, and the _NT_SYMBOL_PATH enviroment variable.&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;NAME&lt;/li&gt; &lt;li&gt;    Get-SysinternalsSuite&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNOPSIS&lt;/li&gt; &lt;li&gt;    Gets all the wonderful Sysinternals tools&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNTAX&lt;/li&gt; &lt;li&gt;    Get-SysinternalsSuite [-Extract] &amp;lt;String&amp;gt; [[-Save] &amp;lt;String&amp;gt;] [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;DESCRIPTION&lt;/li&gt; &lt;li&gt;    Downloads and extracts the Sysinternal tools to the directory you specify.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;PARAMETERS&lt;/li&gt; &lt;li&gt;    -Extract &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        The directory where you want to extract the Sysinternal tools.&lt;/li&gt; &lt;li&gt;    -Save &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        The default is to download the SysinternalsSuite.zip file and remove it after&lt;/li&gt; &lt;li&gt;        extracting the contents. If you want to keep the file, specify the save &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        directory with this parameter.&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;NAME&lt;/li&gt; &lt;li&gt;    Get-Uptime&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNOPSIS&lt;/li&gt; &lt;li&gt;    Returns how long a computer has been running.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNTAX&lt;/li&gt; &lt;li&gt;    Get-Uptime [[-computerName] &amp;lt;String&amp;gt;] [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;DESCRIPTION&lt;/li&gt; &lt;li&gt;    Returns the TimeSpan for how long a computer is running. If you&amp;#39;d like it &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    formatted you can use &amp;quot;Get-Uptime -f {0}&amp;quot;&lt;/li&gt; &lt;li&gt;PARAMETERS&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    -computerName &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;NAME&lt;/li&gt; &lt;li&gt;    Set-SourceServer&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNOPSIS&lt;/li&gt; &lt;li&gt;    Sets the source server directory.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNTAX&lt;/li&gt; &lt;li&gt;    Set-SourceServer [-Directory] &amp;lt;String&amp;gt; [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;DESCRIPTION&lt;/li&gt; &lt;li&gt;    Sets the source server cache directory for VS 2010, Dev 11 Beta, and WinDBG &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    through the _NT_SOURCE_PATH environment variable to all reference the same &lt;/li&gt; &lt;li&gt;    location. This ensures you only download the file once no matter which &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    debugger you use. Because this cmdlet sets an environment variable you &lt;/li&gt; &lt;li&gt;    need to log off to ensure it&amp;#39;s properly set.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;PARAMETERS&lt;/li&gt; &lt;li&gt;    -Directory &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        The directory to use. If the directory does not exist, it will be created.&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;NAME&lt;/li&gt; &lt;li&gt;    Set-SymbolServer&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNOPSIS&lt;/li&gt; &lt;li&gt;    Sets up a computer to use a symbol server.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;SYNTAX&lt;/li&gt; &lt;li&gt;    Set-SymbolServer [-Internal] [-Public] [[-CacheDirectory] &amp;lt;String&amp;gt;] [[-SymbolServers] &amp;lt;String[]&amp;gt;] [-WhatIf] [-Confi&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    rm] [&amp;lt;CommonParameters&amp;gt;]&lt;/li&gt; &lt;li&gt;DESCRIPTION&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    Sets up both the _NT_SYMBOL_PATH environment variable as well as Visual Studio &lt;/li&gt; &lt;li&gt;    2010 and Dev 11 Beta (if installed) to use a common symbol cache directory as &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    well as common symbol servers.&lt;/li&gt; &lt;li&gt;PARAMETERS&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    -Internal [&amp;lt;SwitchParameter&amp;gt;]&lt;/li&gt; &lt;li&gt;        Sets the symbol server to use to http://SymWeb. Visual Studio will not use &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        the public symbol servers. This will turn off the .NET Framework Source &lt;/li&gt; &lt;li&gt;        Stepping. This switch is intended for internal Microsoft use only.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        You must specify either -Internal or -Public to the script.&lt;/li&gt; &lt;li&gt;    -Public [&amp;lt;SwitchParameter&amp;gt;]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Sets the symbol server to use as the two public symbol servers from Microsoft. &lt;/li&gt; &lt;li&gt;        All the appropriate settings are configured to properly have .NET Reference &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Source stepping working.&lt;/li&gt; &lt;li&gt;    -CacheDirectory &amp;lt;String&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        Defaults to C:&amp;#92;SYMBOLS&amp;#92;PUBLIC&amp;#92;MicrosoftPublicSymbols for -Public and &lt;/li&gt; &lt;li&gt;        C:&amp;#92;SYMBOLS&amp;#92;INTERNAL for -Internal.&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    -SymbolServers &amp;lt;String[]&amp;gt;&lt;/li&gt; &lt;li&gt;        A string array of additional symbol servers to use. If -Internal is set, these &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        additional symbol servers will appear after HTTP://SYMWEB. If -Public is &lt;/li&gt; &lt;li&gt;        set, these symbol servers will appear after the public symbol servers so both&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        the environment variable and Visual Studio have the same search order.&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20687" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Understanding the Portable Library by Chasing ICommand (2 of 3)</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/09/understanding-the-portable-library-by-chasing-icommand-2-of-3.aspx</link><pubDate>Fri, 09 Mar 2012 14:20:05 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20652</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Part 1: Creating the Portable Library Part 2: Portability in Silverlight and WPF: a Tale of Type Forwarders (this post) Part 3: Portability in Metro: A CLR and WinRT Love Affair Portability in Silverlight and WPF: a Tale of Type Forwarders In the last post, I walked through creating a portable assembly that will target Silverlight 4.0 and above, .NET Framework 4.5, and Windows 8 Metro. In the assembly were a few classes that handled commands and property change notification for a simple view model....(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/09/understanding-the-portable-library-by-chasing-icommand-2-of-3.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20652" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/metro/default.aspx">metro</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/portable+library/default.aspx">portable library</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/winrt/default.aspx">winrt</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/wpf/default.aspx">wpf</category></item><item><title>What’s New in SOS for .NET 4.5?</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/03/08/what-s-new-in-sos-for-net-4-5.aspx</link><pubDate>Thu, 08 Mar 2012 21:27:57 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20648</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;One of these days Microsoft will release a version of .NET where we don’t have to worry about memory. HA! Who am I kidding!? All you worry about in a .NET application is the memory. Naturally, I personally never want Microsoft to come out with the memory worry free .NET because I’d be out of a job.&lt;/p&gt;  &lt;p&gt;With SOS for .NET 4.5, there’s not a whole lot different but there are two differences that will be valuable. The first are two new options to the most important SOS command, !dumpheap. One of the big problems in dealing with those minidumps from production systems is trying to figure out which objects are rooted, meaning have references and cannot be garbage collected, and those objects that are ready for garbage collection. That problem is easy to solve with the new –live and –dead options. Get in the habit now of always passing –live when you first do that initial !dumpheap –stat because that’s all you care about!&lt;/p&gt;  &lt;p&gt;Here’s an example output comparing the differences reported by –stat alone, -live, and –dead.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f4858c7a-250e-4474-b0dd-a39c28603a6d" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;&amp;gt;0:000 !dumpheap stat&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;. . .&lt;/li&gt; &lt;li&gt;000007feefedadd8    21567      2616488 System.Object[]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;000007feeff34198   336164      8067936 System.Int32&lt;/li&gt; &lt;li&gt;Total 509034 objects&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;gt;0:000 !dumpheap stat live&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;. . .&lt;/li&gt; &lt;li&gt;000007feefedadd8      135       285048 System.Object[]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;000007feeff2d8f0    19703       472872 System.WeakReference&lt;/li&gt; &lt;li&gt;Total 22711 objects&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;gt;0:000 !dumpheap stat dead&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;. . .&lt;/li&gt; &lt;li&gt;000007feefedadd8    21432      2331440 System.Object[]&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;000007feeff34198   336158      8067792 System.Int32&lt;/li&gt; &lt;li&gt;Total 486286 objects&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;What I haven’t been able to figure out is that the total objects between live and dead objects never add up to the total shown when looking at all objects with just the –stat switch. Doing some experimentation the output for –live looks valid so I’m going to trust it for now. I’ll talk to the CLR team and see if this is a bug or there’s a real reason for the discrepancy. It’s not like an object could be alive and dead at the same time… unless it was a ZOMBIE! No matter, the –live switch looks fantastic and will save everyone a huge amount of time.&lt;/p&gt;  &lt;p&gt;Since everyone is not moving over to .NET 4.5 immediately, I tried like crazy to see if I could get the .NET 4.5 SOS version working with minidumps from .NET 4.0. Nothing I tried and no amount of playing around with .cordll to load the MSCORDACWKS.DLL from .NET 4.0 would work. Do yourself a favor now and make sure you save off SOS.DLL, CLR.DLL, and MSCORDACWKS.DLL from a pure .NET 4.0 installation because .NET 4.5 is on top of .NET 4.0. I’ll keep working on trying more tricks to get !dumpheap –live working with .NET 4.0.&lt;/p&gt;  &lt;p&gt;The second SOS command to get some development love is !clrstack. There’s a new experimental option –i, which uses the CLR Debugging API’s ICorDebug interface to walk stacks and show variable names very much like the !mk command in &lt;a href="http://stevestechspot.com/"&gt;SOSEX&lt;/a&gt;. It’s very important that to use !clrstack –i you have the _NT_SYMBOL_PATH environment variable set to include the public Microsoft symbol server. SOS needs access to MSCORDBI.DLL through the symbol server download even though that DLL is in the framework directory along with SOS.DLL. &lt;/p&gt;  &lt;p&gt;Running !clrstack –a –i will show output like the following snippet. What you can’t see is that the output is that it’s fully DML ready.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6c67600c-52dd-463a-bbba-16d57d1cc0b6" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;00000000002fdca0 000007feefda060f [DEFAULT] [hasThis] Object System.Delegate.DynamicInvokeImpl(SZArray Object) (C:&amp;#92;Windows&amp;#92;Microsoft.Net&amp;#92;assembly&amp;#92;GAC_64&amp;#92;mscorlib&amp;#92;v4.0_4.0.0.0__b77a5c561934e089&amp;#92;mscorlib.dll)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;PARAMETERS:&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  + (Error 0x80131304 retrieving parameter &amp;#39;this&amp;#39;)&lt;/li&gt; &lt;li&gt;  + (Error 0x80131304 retrieving parameter &amp;#39;args&amp;#39;)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;LOCALS:&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  + (Error 0x80004005 retrieving local variable &amp;#39;local_0&amp;#39;)&lt;/li&gt; &lt;li&gt;  + (Error 0x80004005 retrieving local variable &amp;#39;local_1&amp;#39;)&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;You are probably wondering where the actual values are. Just like !mk, when it’s JIT optimized code we can’t get the values. That doesn’t make !clrstack –i any less valuable because at least it shows you the types so you can use !dso, or !mdso from SOSEX, to look them up. To turn off the JIT optimizations, you’d have to either run the whole application with the &lt;a href="http://blogs.msdn.com/b/sburke/archive/2008/01/29/how-to-disable-optimizations-when-debugging-reference-source.aspx"&gt;COMPLUS_ZAPDISABLE&lt;/a&gt; environment variable or turn it off for an individual assembly with the &lt;a href="http://blogs.msdn.com/b/jaredpar/archive/2008/08/29/disabling-jit-optimizations-while-debugging.aspx"&gt;INI file trick&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The new –live and –dead options for !dumpheap and the –i for !clrstack are the most important additions, but there are a few more worth mentioning. The !bpmd command now supports setting breakpoints on a source and line if you have the PDB file for the assembly loaded. If you’re doing heavy interop, the new !dumprcw, which dumps a Runtime Callable Wrapper, and !dumpccw, which dumps a COM Callable Wrapper, look helpful. The new SOS for .NET 4.5 is nice, but wait until you see the new version of SOSEX!&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20648" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Understanding the Portable Library by Chasing ICommand (1 of 3)</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/08/understanding-the-portable-library-by-chasing-icommand-1-of-3.aspx</link><pubDate>Thu, 08 Mar 2012 17:45:01 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20650</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>0</slash:comments><description>Part 1: Creating the Portable Library (this post) Part 2: Portability in Silverlight and WPF: a Tale of Type Forwarders Part 3: Portability in Metro: A CLR and WinRT Love Affair The portable library tools have been available for several months now. The goal for this add-in to Visual Studio 2010 was to enable you to create special portable assemblies that can run on various platforms, ranging from XBox and Windows Phone 7 to various versions of the .NET Framework and Windows 8, without having to recompile...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/08/understanding-the-portable-library-by-chasing-icommand-1-of-3.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20650" width="1" height="1"&gt;</description></item><item><title>Cool Dev 11 Trick: Diff Random Files Easily</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/03/07/cool-dev-11-trick-diff-random-files-easily.aspx</link><pubDate>Thu, 08 Mar 2012 01:56:39 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20645</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Dev 11 has a diff and merge view that is simply outstanding and using it to compare changes before checkin is just dreamy. I ran into a situation where I wanted to diff the output of two files and thought that it would be nice if I could do that in Dev 11. Popping into CTRL+Q and typing “diff” just says, “No search results available”, which isn’t very helpful.&lt;/p&gt;  &lt;p&gt;Figuring there had to be a command related to diffing, I looked up all the commands in the Keyboard Options page and ran into Tools.DiffFiles. Running that in the Command Windows did nothing so going for broke, I typed “Tools.DiffFiles c:\” and got a nice little autocomplete popup to choose the file. Obviously, Tools.DiffFiles takes two parameters, the first being the left side file, or the source, and the second being the right side file, or the target. Below shows an example from the Command Window&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:50be6ea0-0e48-4211-8043-ca7578e9ea47" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;Tools.DiffFiles c:&amp;#92;test&amp;#92;a.txt c:&amp;#92;test&amp;#92;b.txt&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;That’s great we’ve got the ability to do random diffs inside the IDE, but being a command line guy, I want to do the diffs directly from PowerShell even if Dev 11 isn’t running. It turned out to be far easier than I ever imagined. Checking the command line options to DEVENV.EXE, by running “devenv /?” showed there’s a new command line switch. /diff, that does exactly what I wanted. So anytime you want to use the Dev 11 diff tool, run the following:&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:23a30f47-8b82-48f2-bc07-7ab62f5486fe" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:'Courier New', Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#fff;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0;padding:0 0 0 5px;"&gt; &lt;li&gt;devenv /diff c:&amp;#92;foo&amp;#92;x.txt c:&amp;#92;bar&amp;#92;y.txt&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;If Dev 11 is running, you’ll get a new diff window in the running instance, otherwise, you’ll get a new copy of the IDE. Of course, you’ll need devenv.exe in the path so run VCVARSALL.BAT to get it in your path.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20645" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Windows 8 Icons: Segoe UI Symbol</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/06/windows-8-icons-segoe-ui-symbol.aspx</link><pubDate>Tue, 06 Mar 2012 07:28:01 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20640</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>1</slash:comments><description>Here’s a quick and easy tip for developing Windows 8 Metro applications. Are you looking for decent icons to use in your Application Bar ? Windows 8 makes it incredibly easy by using the built-in Segoe UI Symbol font. There are tons of icons embedded in the font that are perfect for using in your applications. Take a look at the following XAML snippet from the Microsoft quick start for adding an app bar : &amp;lt; StackPanel Orientation ="Vertical" Margin ="0,14,0,5" Grid . Column ="1" &amp;gt; &amp;lt; Button...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/03/06/windows-8-icons-segoe-ui-symbol.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20640" width="1" height="1"&gt;</description></item><item><title>Using the New Caller Information Attributes for Reliable Property Change Notifications</title><link>http://www.wintellect.com/cs/blogs/jgarland/archive/2012/03/05/using-the-new-callerinfo-attributes-for-reliable-property-change-notifications.aspx</link><pubDate>Mon, 05 Mar 2012 03:03:13 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20630</guid><dc:creator>jgarland</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;As anyone who has implemented the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx"&gt;INotifyPropertyChanged&lt;/a&gt; interface knows, the fact that the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.propertychangedeventargs(v=vs.110).aspx"&gt;PropertyChangedEventArgs&lt;/a&gt; takes a property name as a string means that you are one fat-fingered mistake away from a bug that can sometimes be difficult to track down.&amp;#160; If the property name supplied in the string doesn’t match the actual property name, the data binding (or other operations) that relies on this interface doesn’t work properly.&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Int32 MyProperty&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _myProperty; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     set&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_myProperty != &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;             _myProperty = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;             OnPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;MyProperty&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb397687(v=vs.110).aspx"&gt;Lambda expressions&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/bb397951(v=vs.110).aspx"&gt;Expression Trees&lt;/a&gt; in .Net 3 brought a solution to the problem, where the compile-time checking could help ensure that a correct value was provided.&amp;#160; I blogged about this back in 2010 (&lt;a title="http://blog.dotnetgator.com/2010/06/21/finding-binding-trouble/" href="http://blog.dotnetgator.com/2010/06/21/finding-binding-trouble/"&gt;http://blog.dotnetgator.com/2010/06/21/finding-binding-trouble/&lt;/a&gt;), and even cited my (then-future) coworker Jeremy Likness’s treatment of the same topic (&lt;a title="http://csharperimage.jeremylikness.com/2010/06/tips-and-tricks-for-inotifypropertychan.html" href="http://csharperimage.jeremylikness.com/2010/06/tips-and-tricks-for-inotifypropertychan.html"&gt;http://csharperimage.jeremylikness.com/2010/06/tips-and-tricks-for-inotifypropertychan.html&lt;/a&gt;).&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Int32 MyProperty&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _myProperty; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     set&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_myProperty != &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;             _myProperty = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;             OnPropertyChanged(() =&amp;gt; MyProperty);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now there’s a new feature in .Net 4.5 that provides yet another opportunity to ensure that INotifyPropertyChanged is implemented correctly – possibly in a simpler fashion than ever before, and with better performance than the Expression Tree/Lambda expression approach.&lt;/p&gt;

&lt;p&gt;.Net 4.5 includes 3 new “&lt;a href="http://msdn.microsoft.com/en-us/library/hh534540(v=vs.110).aspx"&gt;Caller Information&lt;/a&gt;” attributes&amp;#160; – &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callerfilepathattribute(v=vs.110).aspx"&gt;CallerFilePathAttribute&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callerlinenumberattribute(v=vs.110).aspx"&gt;CallerLineNumberAttribute&lt;/a&gt;, and &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx#Y0"&gt;CallerMemberNameAttribute&lt;/a&gt;.&amp;#160; These three attributes are scoped to individual method parameters, and when used, they apply the indicated value from the CALLING METHOD to the called method’s attributed parameter at run time.&amp;#160; In our case, we’re interested in the CallerMemberName attribute, which we can use to automatically retrieve the property that is trying to raise the property change notification:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; OnPropertyChanged([CallerMemberName] String caller = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     var handler = PropertyChanged;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (handler != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;         handler(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PropertyChangedEventArgs(caller));&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Note that the Caller Information attributes require a default value be supplied.&lt;/p&gt;

&lt;p&gt;This reduces the overhead of a property in the class that provides this method to the following:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:'Courier New', courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Int32 MyProperty&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _myProperty; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     set&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_myProperty != &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;             _myProperty = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;             OnPropertyChanged();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Courier New', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Of course, one important question is how does this method perform in comparison to either just providing a string, or using the Lambda/Expression Tree approach?&amp;#160; In my tests with iterations of between 1,000-500,000 property changes I saw between ~10-30% performance improvement over the Lambda/Expression Tree approach, and performance between ~20-30% lower than using a directly supplied string.&lt;/p&gt;

&lt;p&gt;Note that the latest version of the MSDN documentation illustrating the implementation of the INotifyPropertyChanged interface (as of this writing) show the use of the CallerMemberName attribute - &lt;a title="http://msdn.microsoft.com/en-us/library/ms229614(v=vs.110).aspx" href="http://msdn.microsoft.com/en-us/library/ms229614(v=vs.110).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms229614(v=vs.110).aspx&lt;/a&gt;.&amp;#160; &lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20630" width="1" height="1"&gt;</description></item><item><title>Fixing Stuck/Hung Build in TFS Preview and Dev 11 Beta Build Server</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/03/03/fixing-stuck-hung-build-in-tfs-preview-and-dev-11-beta-build-server.aspx</link><pubDate>Sat, 03 Mar 2012 20:22:45 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20629</guid><dc:creator>jrobbins</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Realizing I hadn’t updated my build server that ran against TFS Preview to the Beta Dev 11 TFS, I upgraded the machine and ran into a problem. The first queued build stuck and could not be canceled or deleted from the queue, thus blocking all builds. With an on premises TFS you can go into the SQL database and change the state of the build, but last I checked Microsoft won’t let us access our TFS Preview hosted SQL tables with SQL Management Studio.&lt;/p&gt;  &lt;p&gt;My scenario was a build controller running the Dev 11 Developer Preview TFS that was upgraded in place to the Dev 11 Beta TFS bits and kicking off builds from Visual Studio 2010. Since most of you will start with fresh Dev 11 Beta bits, I doubt anyone will run into the situation I had but will post the solution for karma points from the one other person who hits this.&lt;/p&gt;  &lt;p&gt;The upgrade itself went great and I was able to see the build servers from VS 2010. I checked in some changes that triggered a CI build and after 20 minutes saw that nothing had happened in the build. In Visual Studio 2010 I tried to cancel the build but no status changed. In the TFS Preview web site trying to cancel the build reported an error: “TFS.ServerException: TF215067: Cannot cancel queued build 48 on build controller BUILDSERVER - Controller. The current status is In Progress and queued builds can only be canceled if the status is either Postponed or Queued.” Shutting down Visual Studio, the build controller machine didn’t help either. Because of the stuck build, I couldn’t delete the build controller either.&lt;/p&gt;  &lt;p&gt;Firing up a new machine (named COMPILESERVER), I installed the Dev 11 Beta TFS and configured a new build server and said to replace an existing build server (named BUILDSERVER). That transferred the stuck build to COMPILESERVER. On BUILDSERVER, I unregistered the build server and removed the build server feature through the TFS Admin Console. Still on BUILDSERVER, I added back the build server feature and configured this to be a second build server against my TFS Preview hosted collection. &lt;/p&gt;  &lt;p&gt;Back in Visual Studio 2010, I queued up a new build against the updated BUILDSERVER and the stuck queued build immediately vanished. My new build worked fine and I was able to remove the build server from COMPILESERVER.&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20629" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Bugs/default.aspx">Bugs</category><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/TFS/default.aspx">TFS</category></item><item><title>Initial Thoughts After Using the Dev 11 Beta for Two Weeks</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/02/29/initial-thoughts-after-using-the-dev-11-beta-for-two-weeks.aspx</link><pubDate>Wed, 29 Feb 2012 17:08:09 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20620</guid><dc:creator>jrobbins</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;So today is the day everyone gets to see if that monochrome/metro UI look for Visual Studio Dev 11 works. Given the huge number of “constructive criticism” &lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2012/02/23/introducing-the-new-developer-experience.aspx#comments"&gt;comments&lt;/a&gt;&amp;#160; that everyone gave on the first look it will be very interesting to see what people think once they get their hands on it. Because of some work I am doing I’ve been using some of the beta builds full time for the last couple of weeks. In this post I want to give you some impressions and point you to a couple of key features that I’ve fallen in love with.&lt;/p&gt;  &lt;p&gt;In a nutshell, the overall new UI look is quite dull and I feel even stronger that color needs to be added back. One of the new UI changes I do very much love the blue highlight around the tool window that has focus. Now you know instantly which window where your typing will go and I wish that window focus hint could be back ported to Visual Studio 2010. While I’m getting better at what some of those black on grey icons do, I’m having to stop much more with the mouse hovering over the button to see what it does through the tool tip. I’d love to see how the methodology of the iconography study mentioned in the initial blog post because I haven’t talked to too many people who can recognize many of them at a glance.&lt;/p&gt;  &lt;p&gt;What bothers me most about the new UI kerfuffle is the marketing failure on how the changes were announced. There’s nothing wrong with moving my &lt;a href="http://en.wikipedia.org/wiki/Who_Moved_My_Cheese"&gt;cheese&lt;/a&gt;&amp;#160; if it’s going to make my life better. There are so many amazing changes for the better in Dev 11 that you will not only gladly have your cheese moved, you’ll happily change the flavor. I was frankly shocked that the first pieces of information about the Beta shown were static screen shots (with a ton of cheese moving for no apparent benefit) and emphasis on minor features. The second blog &lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2012/02/24/introducing-the-new-developer-experience-part2.aspx"&gt;entry&lt;/a&gt; on the UI was better as it focused on usable features such as the Hub and Pivots, but those are still smaller features compared to everything else in the Dev 11 Beta.&lt;/p&gt;  &lt;p&gt;Marketing 101, and common sense, says to go out with the strongest best features first. By having the first look being something divisive and not showing off what’s amazing about the product, the poor impression lingers and hurts everything else being announced. Compounding this marketing misstep was Microsoft’s recent history of jerking around the development community a little over Windows 8 and massively with Silverlight. As developers who’ve bet our careers and companies on Microsoft we can’t afford many more marketing screw-ups like we’ve been seeing lately. Make no mistake they’ve built another great release of our every day tool. My main feature request for the release after Dev 11 is for marketing and management to shove everything else aside and have an actual plan that all changes must make the majority of users day to day work demonstrably easier and more productive. If it doesn’t meet those criteria, it’s cut immediately.&lt;/p&gt;  &lt;p&gt;I’m sorry for going off on the sidetrack about marketing, but I really do feel it is the weakest part of Dev 11. You came hear to read about the experience of using the new Beta. Since there’s going to be tons of information about these features from Microsoft today I won’t go into details about usage but want mention a few key features that have delighted me to no end as I’ve been using Dev 11 and ones you should concentrate on.&lt;/p&gt;  &lt;p&gt;One feature in particular needs a proper introduction: THE UNIT TESTING TOOLS IN DEV 11 ARE BEYOND H*@#Y S&amp;amp;#@T F@#&amp;amp;!!*G AWESOME! (I apologize for that outburst but I can’t help it.) While the tools have been pretty good for .NET development, albeit with some very sharp and painful edges, the new unit testing across all languages, including native C++, integrates seamlessly with your day-to-day work. I moved over a fairly large C++ project and was thrilled to see it’s trivial to implement tests and has the same integration as .NET. Everything is first class now and the Run Tests After Build is so obvious I don’t know how we lived without it!&lt;/p&gt;  &lt;p&gt;Moving over a large .NET project with existing unit tests using MSTEST was obviously trivial. What I’ve loved is that the team added support for other unit testing tools like xUnit. This means that say someone comes up with a unit testing tool for JavaScript or databases, it will be extremely easy to integrate. This is going to be a huge win for the future.&lt;/p&gt;  &lt;p&gt;With many of us using TFS as our ALM system it’s nice to see a lot of love given to the friction points in dealing with tasks, bugs, and version control. The new Team Explorer Pane is simply sublime. All the modal dialog hell that used to be TFS is all gone and many things now happen in the background like check in, search, and automatic updating of pending changes. It really is a radical rethink of the entire usage model for team development. At your fingertips you have everything you need to see what’s happening. My new favorite keystrokes all start with CTRL+0 (that’s zero) because to get to the pending changes in the Team Explorer Pane is CTRL+0, P, where the builds are CTRL+0,B and so on. &lt;/p&gt;  &lt;p&gt;Another feature related to TFS is the shift to local workspaces. In VS 2010, working with TFS was mostly OK if you were permanently connected to your TFS server. Trying to work offline from your TFS server was pretty painful as it was up to you to manage adding and removing files. Don’t get me started on the reliance on the read only flag for files or file changes from external tools weren’t picked up. Compared to the SVN experience, TFS wasn’t so great.&lt;/p&gt;  &lt;p&gt;That’s all changed as with local workspaces, there’s really no difference between online and offline mode. You work with your projects anywhere and any changes made by you in VS or a quick change to a file with Notepad2 are automatically seen and ready to go as soon as you connect back to your TFS server.&lt;/p&gt;  &lt;p&gt;What you’ll see different on your disk is a directory called $tfs under the root of the top workspace directory. That’s where TFS stores super compressed versions of the files and data. A background file watcher scans the differences between this cache and the file system to automatically pick up all pending changes including file updates, adds, and deletes. The VS 2010 way of finding updates was to pull up the Pending Changes dialog and look for all the changes by pounding on the server. Now the client does the work a tiny bit at the time so you have a real time view. It’s kind of hard to describe just how nice it is to just work with your projects and code with all changes ready to check in at a moments notice.&lt;/p&gt;  &lt;p&gt;As someone who loves all things debugging and profiling, the new IntelliTrace the new standalone collector is going to change your life. Being able to capture a “video” of your application in production instead of just a minidump is huge. It’s actually very easy to use and Microsoft has already posted a page that shows all the steps: &lt;a href="http://msdn.microsoft.com/en-us/library/hh398365(v=VS.110).aspx"&gt;http://msdn.microsoft.com/en-us/library/hh398365(v=VS.110).aspx&lt;/a&gt;. With rich PowerShell support just go ahead and make the stand-alone IntelliTrace collector part of your standard server install so it’s ready at a moments notice. You’ll want to set up training for your network administrators so they can start collecting the “videos” as soon as they see a problem.&lt;/p&gt;  &lt;p&gt;Let me make very clear that I do feel that Dev 11 is a hugely valuable release and something you’ll quickly fall in love with because of features that will make your life better. I know Microsoft has heard us regarding color so I suspect things will get brighter in the future, no pun intended. The real test of the value of Dev 11 is that I don’t like going back to Visual Studio 2010. &lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20620" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Reviews/default.aspx">Reviews</category><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Windows 8 Consumer Preview 101</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/02/29/windows-8-consumer-preview-101.aspx</link><pubDate>Wed, 29 Feb 2012 09:27:04 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20621</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>2</slash:comments><description>It’s finally here! Unless you’ve been hiding under a rock, you have heard the buzz around the Windows 8 Consumer Preview. If you haven’t had the opportunity to grab it and install it, I suggest you browser over to this link now and download your copy! There are many exciting new features, and this post will guide you through a few of them. It is a Beta After All There has been much buzz around whether or not the name “Consumer Preview” means it is not a beta and therefore the final release will be...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/02/29/windows-8-consumer-preview-101.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20621" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/consumer+preview/default.aspx">consumer preview</category><category domain="http://www.wintellect.com/cs/blogs/jlikness/archive/tags/windows+8/default.aspx">windows 8</category></item><item><title>Going to the MVP Summit (or in Seattle)? We’d Love to Meetup!</title><link>http://www.wintellect.com/cs/blogs/jrobbins/archive/2012/02/24/going-to-the-mvp-summit-or-in-seattle-we-d-love-to-meetup.aspx</link><pubDate>Fri, 24 Feb 2012 19:10:37 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20616</guid><dc:creator>jrobbins</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;So I guess February 29th ought to be quite interesting with Windows 8 Consumer Preview and VS 11 being released. An even more important date is Monday February 27th as that’s when we are holding a &lt;a href="http://bit.ly/Wintellect"&gt;Wintellect Tweetup&lt;/a&gt; where we want to hear your thoughts on all the new announcements. We’ll have fellow Wintellectuals, Jeremy Likness, Steve Porter, and Jeffrey Richter there to stir the debate. The event will be at Parlor Billiards and&amp;#160; Spirits in Bellevue. Hit the &lt;a href="http://bit.ly/Wintellect"&gt;link&lt;/a&gt; to sign up.&lt;/p&gt;  &lt;p&gt;Please note that this even&lt;strong&gt;&lt;em&gt;&lt;u&gt; IS NOT AT ALL&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt; limited to just MVPs! If you’re a Seattle-based developer you are more than invited as well. All NDAs (Non Disclosure Agreements) will be honored so we won’t be giving out any secrets so the Wintellect lawyers can breath a sigh of relief.&lt;/p&gt;  &lt;p&gt;We look forward to chatting with you and getting your opinion of everything Microsoft!&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20616" width="1" height="1"&gt;</description><category domain="http://www.wintellect.com/cs/blogs/jrobbins/archive/tags/Wintellect/default.aspx">Wintellect</category></item><item><title>What are YOU Looking for in the Consumer Preview?</title><link>http://www.wintellect.com/cs/blogs/jlikness/archive/2012/02/24/what-are-you-looking-for-in-the-consumer-preview.aspx</link><pubDate>Fri, 24 Feb 2012 10:06:00 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20615</guid><dc:creator>C#er : IMage</dc:creator><slash:comments>1</slash:comments><description>It seems there is quite a bit of anticipation surrounding the imminent release of the Windows 8 Consumer Preview. I've read the speculation about what it will actually include, or not include, and if this release really means anything in the larger scheme of things. The release will coincide with the Mobile World Congress . What I find interesting is that the same week, thousands of Microsoft MVP awardees will descend on Bellevue, Washington (close to the campus in Redmond) for the Global MVP Summit...(&lt;a href="http://www.wintellect.com/cs/blogs/jlikness/archive/2012/02/24/what-are-you-looking-for-in-the-consumer-preview.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20615" width="1" height="1"&gt;</description></item><item><title>Programmatically uninstalling Silverlight Out-Of-Browser Application</title><link>http://www.wintellect.com/cs/blogs/sloscialo/archive/2012/02/21/programmatically-uninstalling-silverlight-out-of-browser-application.aspx</link><pubDate>Tue, 21 Feb 2012 22:41:50 GMT</pubDate><guid isPermaLink="false">c9b5046a-91b6-4822-a57a-d848b8cb6435:20610</guid><dc:creator>sloscialo</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Every once in a while there comes a need to provide a mechanism to uninstall your application programmatically.&amp;#160;&amp;#160; For Silverlight Out-Of-Browser applications , there seemed to be no way to accomplish it.&amp;#160; Fortunately, there’s a work-around that trusted OOB applications running in Windows can use.&lt;/p&gt;  &lt;p&gt;Silverlight OOB applications are launched via the “sllauncher.exe” command.&amp;#160; And if you open the properties on an OOB shortcut, you will see a target textbox with something like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;C:\Program Files (x86)\Microsoft Silverlight\sllauncher.exe&amp;quot; 2205248641.localhost&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Of course, “sllauncher.exe” has some command-line parameters and settings we can use to install and uninstall Silverlight OOB applications.&amp;#160; Since trusted Silverlight OOB applications can access COM Automation, we can run the “sllauncher.exe” application from within Silverlight.&amp;#160; The catch is that we’re not sure exactly where the program is located. &lt;/p&gt;  &lt;p&gt;There may be exceptions, but as a general rule “sllauncher.exe” is located in 1 of 2 places:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;on 64-bit machines : C:\Program Files (x86)\Microsoft Silverlight\sllauncher.exe&lt;/p&gt;    &lt;p&gt;on 32-bit machines : C:\Program Files\Microsoft Silverlight\sllauncher.exe&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;However, there’s no way to know which OS type you’re running on.&amp;#160; So we need to check for the existence of these folders.&amp;#160; Since they’re out of the sandbox, we have to resort to COM Automation to determine if they exist.&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; launcherPath = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (dynamic shell = AutomationFactory.CreateObject(&lt;span style="color:#006080;"&gt;&amp;quot;Shell.Application&amp;quot;&lt;/span&gt;))&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; launcher64 = &lt;span style="color:#006080;"&gt;@&amp;quot;C:\Program Files (x86)\Microsoft Silverlight&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; launcher32 = &lt;span style="color:#006080;"&gt;@&amp;quot;C:\Program Files\Microsoft Silverlight&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     dynamic folder64 = shell.NameSpace(launcher64);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (folder64 != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) launcherPath = launcher64;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     dynamic folder32 = shell.NameSpace(launcher32);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (folder32 != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) launcherPath = launcher32;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;To silently uninstall a Silverlight OOB application using “sllauncher.exe” you’d normally type something like:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;sllauncher.exe /uninstall /origin:[origin location]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once again, using COM Automation, we can have our application run the command.&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (dynamic shell = AutomationFactory.CreateObject(&lt;span style="color:#006080;"&gt;&amp;quot;WScript.Shell&amp;quot;&lt;/span&gt;))&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; origin = Application.Current.Host.Source.OriginalString;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     shell.Run(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;@&amp;quot;{0}/sllauncher.exe /uninstall /origin:&amp;quot;&lt;/span&gt;&lt;span style="color:#006080;"&gt;&amp;quot;{1}&amp;quot;&lt;/span&gt;&lt;span style="color:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, launcherPath, origin));&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:white;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:'Consolas', courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;That’s really all there is to it (other than adding in some error checking, of course).&lt;/p&gt;&lt;img src="http://www.wintellect.com/cs/aggbug.aspx?PostID=20610" width="1" height="1"&gt;</description></item></channel></rss>
