<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/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>Grigori Melnik: Thoughts on Agile Software Engineering and Beyond</title><link>http://blogs.msdn.com/b/agile/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Microsoft Enterprise Library 6 - Wave 2 Release</title><link>http://blogs.msdn.com/b/agile/archive/2013/05/24/microsoft-enterprise-library-6-wave-2-release.aspx</link><pubDate>Fri, 24 May 2013 22:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10421277</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10421277</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2013/05/24/microsoft-enterprise-library-6-wave-2-release.aspx#comments</comments><description>&lt;p&gt;Last month we &lt;a href="http://aka.ms/el6announce"&gt;shipped&lt;/a&gt; the new versions of Microsoft Enterprise Library and Unity.&amp;nbsp;They've been very well received. Today we are pleased to add the following guidance assets to enhance the set of reusable components:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290917"&gt;Reference Implementation&lt;/a&gt;&lt;/strong&gt; (RI) &amp;ndash; an end-to-end sample application that showcases the use of various application blocks from Enterprise Library.&lt;!--StartFragment--&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Note the RI comes in 2 versions &amp;ndash; for EntLib v5.0 and for EntLib6. This was intentional as we have never produced an RI for v5.0 and by doing so we were also able to guide you through a migration process.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s highly recommended you review the installation guide packaged with the RI first.&lt;!--EndFragment--&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=304198"&gt;Enterprise Library 6 binaries &amp;ndash; full set&lt;/a&gt;&lt;/strong&gt; (includes all binaries and doesn&amp;rsquo;t require any ports to be open to pull additional dependencies via NuGet) &amp;ndash; this is in response to the requests of the customers in constrained network environments.&lt;/li&gt;
&lt;li&gt;New &lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290920"&gt;Unity Developer&amp;rsquo;s Guide&lt;/a&gt;&lt;/strong&gt; with &lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=304199"&gt;code samples&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Updated &lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290904"&gt;Enterprise Library Developer&amp;rsquo;s Guide&lt;/a&gt;&lt;/strong&gt; (preview) with &lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=304200"&gt;code samples&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290918"&gt;Enterprise Library Quickstarts&lt;/a&gt;&lt;/strong&gt;, including:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Semantic Logging: Flush on Error Trigger.&lt;/li&gt;
&lt;li&gt;Semantic Logging: Alarm Flood Throttle.&lt;/li&gt;
&lt;li&gt;Reconfiguring Logging Application Block at runtime (via a verbosity setting in an appSetting in the configuration file).&lt;/li&gt;
&lt;li&gt;Reconfiguring Semantic Logging Application Block at runtime (via a service setting for a Windows Azure role).&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290919"&gt;Unity Quickstarts&lt;/a&gt;&lt;/strong&gt;:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;StopLight showcases basic container usage such as type mapping and resolving with attributes.&lt;/li&gt;
&lt;li&gt;Event Broker showcases the use of a custom extension to wire up events instead of wiring them up through code.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Updated&lt;strong&gt; &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=304201"&gt;Config tool VSIX package for Visual Studio 2012&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Addresses an issue of side-by-side editing of v5 and v6 solution properties if you have both installed .&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Updated&lt;strong&gt; &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290902"&gt;Unity reference documentation&lt;/a&gt;&lt;/strong&gt; (preview).&lt;/li&gt;
&lt;li&gt;Updated&lt;strong&gt; &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290901"&gt;Enterprise Library reference documentation&lt;/a&gt;&lt;/strong&gt; (preview).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As a reminder, we also have a &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290906"&gt;Migration Guide&lt;/a&gt;, which we shipped earlier, to help you move your app from using EntLib v5 to v6.&lt;/p&gt;
&lt;p&gt;We hope these additional materials will help you learn EntLib and Unity and get quickly up to speed in using them.&lt;/p&gt;
&lt;p&gt;In p&amp;amp;p we consider the written &lt;strong&gt;guidance that complements our code to be as important as the code itself&lt;/strong&gt;. We spend a lot of time and effort making sure that it&amp;rsquo;s technically accurate, as well as engaging to read. We appreciate your patience while we work on polishing and finalizing the developer&amp;rsquo;s guides and making them available as books (both printed and eBooks). We&amp;rsquo;ll gratefully accept your feedback on any of the above. We are also seeking EntLib and Unity users willing to share their stories as case studies to be included in the guides. If you are interested in contributing a short story, please contact me for details.&lt;/p&gt;
&lt;p&gt;Happy learning, happy experimenting, happy coding!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10421277" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/p_2600_amp_3B00_p/">p&amp;amp;p</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/EntLib/">EntLib</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/guide/">guide</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Enterprise+Library/">Enterprise Library</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Unity/">Unity</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/new+release/">new release</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/learnability/">learnability</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/patterns+_2600_amp_3B00_+practices/">patterns &amp;amp; practices</category></item><item><title>Dealing with Windows Azure Storage transient faults</title><link>http://blogs.msdn.com/b/agile/archive/2013/05/22/dealing-with-windows-azure-storage-transient-faults.aspx</link><pubDate>Wed, 22 May 2013 23:22:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10420747</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10420747</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2013/05/22/dealing-with-windows-azure-storage-transient-faults.aspx#comments</comments><description>&lt;h4&gt;Preamble&lt;/h4&gt;  &lt;p&gt;When an application uses a service, errors can occur because of temporary conditions such as intermittent service, infrastructure-level faults, network issues, or explicit throttling by the service. These types of error occur more frequently with cloud-based services, but can also occur in on-premises solutions. Very often, if you retry the operation a short time later (maybe only a few milliseconds later) the operation may succeed. These types of error conditions are referred to as transient faults. Transient faults typically occur very infrequently, and in most cases, only a few retries are necessary for the operation to succeed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/3806.image_5F00_2.png"&gt;&lt;img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/8105.image_5F00_thumb.png" width="520" height="218" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Transient Fault Handling Application Block (&lt;a href="http://nuget.org/packages/EnterpriseLibrary.TransientFaultHandling/"&gt;Topaz&lt;/a&gt;) lets developers make their applications more resilient by adding robust transient fault handling logic. It encapsulates information about the transient faults that can occur when you use the following services in your application:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SQL Database&lt;/li&gt;    &lt;li&gt;Windows Azure Service Bus&lt;/li&gt;    &lt;li&gt;Windows Azure Storage&lt;/li&gt;    &lt;li&gt;Windows Azure Caching Service&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This blog post focuses on Windows Azure Storage.&lt;/p&gt;  &lt;h4&gt;Retries in Windows Azure Storage Client&lt;/h4&gt;  &lt;p&gt;The Windows Azure Storage Client Library has &lt;a href="http://blogs.msdn.com/b/windowsazurestorage/archive/2011/02/03/overview-of-retry-policies-in-the-windows-azure-storage-client-library.aspx"&gt;supported retries&lt;/a&gt; for a while as an integral part of the API. Instead of wrapping each API call with a call to one of Topaz's RetryPolicy methods, you would set the storage client’s RetryPolicy property and execute the action directly. In fact, you would get retries by default, so in order to use Topaz's retries you had to explicitly override the default retry policy in the storage client.&lt;/p&gt;  &lt;p&gt;Using built-in support for retries, if such support is available, is usually more appealing than using external support like Topaz's: code is terser, and the API has more information about the actual operations it retries so it can be more effective. With external retry support an entire operation needs to be retried, while retries managed by the API can retry specific requests within a single operation. Also, when the API might perform additional work after it has returned a result (for example, if it returns an IEnumerable that might result in new requests to a service to pull new results while enumerating) an external retry would need to include not only the API call but the processing of the results.&lt;/p&gt;  &lt;h4&gt;Why would you want to use Topaz's retries instead of the built-in retry support from the Windows Azure Storage Client Library? &lt;/h4&gt;  &lt;p&gt;The built-in retry support prior to Windows Azure Storage Client v2 had two shortcomings:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It was relatively hard to extend, since it was based on delegates rather than classes.&lt;/li&gt;    &lt;li&gt;It only allowed you to specify how long to wait but not which exceptions should be retried; t that decision was still made by the API. You could refuse a retry for exceptions that the client library considered should be retried, but you couldn't force a retry for exceptions that the client library had already vetoed. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;With v2 the support for retries was &lt;a href="http://blogs.msdn.com/b/windowsazurestorage/archive/2012/10/29/windows-azure-storage-client-library-2-0-breaking-changes-amp-migration-guide.aspx"&gt;overhauled&lt;/a&gt; to address these two shortcomings: it is class based now, and the new IRetryPolicy implementations are responsible for determining what exceptions should be retried. Because of this change, &lt;b&gt;our recommendation now is that you use the built-in support for retries if you're using v2 of the Windows Azure Storage Client Library&lt;/b&gt;. &lt;/p&gt;  &lt;h4&gt;Does this mean that Topaz does not support Windows Azure Storage Client Library v2? &lt;/h4&gt;  &lt;p&gt;Absolutely not. Topaz supports retries for the new versions of the client library, as well as previous versions. You can use it if you wish, particularly if you want to benefit from Topaz's configuration support. It's just that as the Windows Azure Storage Client library evolved Topaz's support became less necessary so the recommendation changed.&lt;/p&gt;  &lt;h4&gt;Can you show me the difference in usage? &lt;/h4&gt;  &lt;p&gt;Here are examples of what using Topaz and the built-in retries look like. In both cases the initialization of retry policies can be separated from performing the requests, and many requests might share the same retry configuration.&lt;/p&gt;  &lt;p&gt;Using Topaz&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#9bbb59" face="Consolas"&gt;&lt;font color="#8fb08c"&gt;// setup retries&lt;/font&gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;var retryPolicy =&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; new RetryPolicy&amp;lt;StorageTransientErrorDetectionStrategy&amp;gt;(        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new ExponentialBackoff(3, TimeSpan.FromMilliseconds(10),         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TimeSpan.FromMilliseconds(10000), TimeSpan.FromMilliseconds(200)));&lt;/font&gt;&lt;/p&gt;   &lt;font face="Consolas"&gt;&lt;/font&gt;    &lt;p&gt;&lt;font face="Consolas"&gt;&amp;#160; client.RetryPolicy = new NoRetry();&lt;/font&gt;&lt;/p&gt;   &lt;font face="Consolas"&gt;&lt;/font&gt;    &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font color="#8fb08c"&gt;// execute operation with retries&lt;/font&gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;try        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;{        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&amp;#160; foreach (var container in retryPolicy.ExecuteAction(() =&amp;gt;        &lt;br /&gt;&amp;#160; client.ListContainers().ToArray()))         &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;{        &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;&amp;#160; Console.WriteLine(container.Name);        &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;}        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;}        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;catch (Exception e)        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;{        &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;Console.WriteLine(&amp;quot;Exception occurred: &amp;quot; + e.Message);        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note how the IEnumerable of containers is converted to an array as part of the operation to retry (which might result in some overhead) to ensure that all requests to the Windows Azure Storage services are retried.&lt;/p&gt;  &lt;p&gt;Using built-in retry policies:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#8fb08c" face="Consolas"&gt;// setup retries        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;client.RetryPolicy = new ExponentialRetry(TimeSpan.FromMilliseconds(200), 3);&lt;/font&gt;&lt;/p&gt;   &lt;font face="Consolas"&gt;&lt;/font&gt;    &lt;p&gt;&lt;font color="#8fb08c" face="Consolas"&gt;// execute operation with retries        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;try        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;{        &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;foreach (var container in client.ListContainers())        &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;Console.WriteLine(container.Name);        &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font face="Consolas"&gt;}        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;}        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;catch (Exception e) &lt;/font&gt;&lt;font face="Consolas"&gt;{        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&amp;#160; Console.WriteLine(&amp;quot;Exception occurred: &amp;quot; + e.Message);        &lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Many thanks to Fernando Simonazzi for contributing to this post.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10420747" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/EntLib/">EntLib</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Enterprise+Library/">Enterprise Library</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Azure/">Azure</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Windows+Azure/">Windows Azure</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/transient+fault+handling/">transient fault handling</category></item><item><title>Just released - Microsoft Enterprise Library 6</title><link>http://blogs.msdn.com/b/agile/archive/2013/04/25/just-released-microsoft-enterprise-library-6.aspx</link><pubDate>Fri, 26 Apr 2013 00:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10414130</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10414130</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2013/04/25/just-released-microsoft-enterprise-library-6.aspx#comments</comments><description>&lt;p&gt;Five months ago we formulated our &lt;a href="http://blogs.msdn.com/b/agile/archive/2012/11/08/enterprise-library-6-0-vision-scope.aspx"&gt;vision&lt;/a&gt; for the new version of Enterprise Library. Now we are delivering on it. I&amp;rsquo;m excited to announce the latest release of &lt;strong&gt;Microsoft Enterprise Library&lt;/strong&gt;: &lt;strong&gt;version&lt;/strong&gt; &lt;strong&gt;6&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;What is Enterprise Library?&lt;/h4&gt;
&lt;p&gt;Enterprise Library is made up of application blocks, each aimed at managing specific crosscutting concerns. Crosscutting concerns are those tasks that you need to accomplish in several places in your application. When trying to manage crosscutting concerns there is often the risk that you/different team members will implement slightly different solutions for each task at each location in your application, or that you will just forget them altogether. Writing entries to a system log file or Windows Azure table storage, dealing with transient error conditions and validating user input are typical crosscutting concerns. While there are several approaches to managing them, the Enterprise Library application blocks make it a whole lot easier by providing generic and configurable functionality that you can centralize and manage.&lt;/p&gt;
&lt;p&gt;Enterprise Library application blocks are standalone. They work well together, but you only have to get the ones that you need. They are also customizable and extensible, so you can extend them to provide what you need in your specific contexts. You can choose to use it as a seedwork and grow your own library, which you can later reuse and sell. We ship under &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290915"&gt;MS-PL&lt;/a&gt;, so this is allowed.&lt;/p&gt;
&lt;h4&gt;What are the main themes for this release?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simplifying&lt;/strong&gt; the library all around&lt;/li&gt;
&lt;li&gt;Embracing &lt;strong&gt;semantic logging&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Increasing &lt;strong&gt;resiliency&lt;/strong&gt; to errors&lt;/li&gt;
&lt;li&gt;Enhancing &lt;a href="http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx"&gt;&lt;strong&gt;Unity type registration&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Supporting &lt;strong&gt;Windows Store apps &lt;/strong&gt;(Unity, Topaz)&lt;/li&gt;
&lt;li&gt;Streamlining &lt;strong&gt;programmatic configuration&lt;/strong&gt; of all blocks&lt;/li&gt;
&lt;li&gt;Integrating with other technologies (&lt;strong&gt;ASP.NET MVC and ASP.NET Web API&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Improving &lt;strong&gt;ease of learning&lt;/strong&gt;, &lt;strong&gt;ease of experimentation&lt;/strong&gt; (fast start), and &lt;strong&gt;ease of use&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4&gt;What&amp;rsquo;s in the box?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New block&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://aka.ms/slab"&gt;&lt;strong&gt;Semantic Logging&lt;/strong&gt;&lt;/a&gt; Application Block (v1.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;New programmatic configuration&lt;/li&gt;
&lt;li&gt;Updated 7 blocks:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data Access&lt;/strong&gt; Application Block&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exception Handling&lt;/strong&gt; Application Block&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logging&lt;/strong&gt; Application Block&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy Injection&lt;/strong&gt; Application Block&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transient Fault Handling&lt;/strong&gt; Application Block&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation&lt;/strong&gt; Application Block&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unity&lt;/strong&gt; Application Block/DI Container (v3.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Configuration console (largely unchanged since v5)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As usual, we are shipping not only the binaries, but also the source code and test cases (unit, integration). To see the details of what have changed and deployment instructions, see the &lt;a href="http://aka.ms/el6release"&gt;Release Notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The diagram below depicts all application blocks and their dependency on the Common package (needed to support configuration tool experience) and optional interblock dependencies.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/3162.EL6_5F00_4.png"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="EL6" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/7875.EL6_5F00_thumb_5F00_1.png" alt="EL6" width="523" height="384" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Additionally, in the next couple of weeks we&amp;rsquo;ll be shipping a reference implementation and several Quickstarts to showcase how the Enterprise Library can be used in certain scenarios.&lt;/p&gt;
&lt;h4&gt;How to get it?&lt;/h4&gt;
&lt;p&gt;Our primary shipping channel for code is &lt;a href="http://nuget.org/packages?q=entlib"&gt;NuGet&lt;/a&gt;. There are 27 NuGet packages. Search for &lt;em&gt;Unity&lt;/em&gt; or &lt;em&gt;EntLib &lt;/em&gt;inside NuGet Package Manager.&lt;/p&gt;
&lt;p&gt;Additionally, we&amp;rsquo;ve made all deliverables available as self-extractable zip packages via &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290898"&gt;Microsoft Download Center&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Our guidance deliverables are &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290908"&gt;available&lt;/a&gt; on Codeplex today. After post-production work is completed, they will be published on MSDN. You will also be able to order the hardcopies of the Developer&amp;rsquo;s Guides or get them in PDF, Epub or Mobi formats.&lt;/p&gt;
&lt;h4&gt;How to get started?&lt;/h4&gt;
&lt;p&gt;Whether you are experienced with Enterprise Library or new to it, we have guidance to help you make the most out of this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290913"&gt;Dependency Injection with Unity&lt;/a&gt; &amp;ndash; new Developer&amp;rsquo;s guide (preview on Codeplex)&lt;/li&gt;
&lt;li&gt;Updated &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290904"&gt;Developer&amp;rsquo;s Guide to Enterprise Library&lt;/a&gt; (preview on Codeplex)&lt;/li&gt;
&lt;li&gt;Updated &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290901"&gt;reference documentation&lt;/a&gt; (preview on Codeplex)&lt;/li&gt;
&lt;li&gt;Reference implementation (v5 and v6) (available in May)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290911"&gt;Reference API&lt;/a&gt; (on MSDN)&lt;/li&gt;
&lt;li&gt;Quickstarts (available in May)&lt;/li&gt;
&lt;li&gt;New &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290906"&gt;Migration Guide&lt;/a&gt; to help you move from v5 to v6&lt;/li&gt;
&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=290910"&gt;Videos&lt;/a&gt; (on Channel 9)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The table below will help you orientate:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/4744.EL6Guidance_5F00_2.png"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="EL6Guidance" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/6724.EL6Guidance_5F00_thumb.png" alt="Enterprise Library 6 Guidance" width="523" height="322" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Do I have to upgrade?&lt;/h4&gt;
&lt;p&gt;Strictly speaking, no. If you are happy with Enterprise Library 5.0, you can continue using that version. If the new and improved features of Enterprise Library 6.0 appeal to you, then you would want to migrate. Note: Enterprise Library 6.0 targets .NET4.5 framework only. Enterprise Library 5.0 works fine on .NET3.5, .NET4.0 as well as .NET4.5. So, in order for you to move to .NET4.5, you don&amp;rsquo;t have to upgrade.&lt;/p&gt;
&lt;h4&gt;How to get help and provide feedback?&lt;/h4&gt;
&lt;p&gt;Many people provided feedback on our vision, our backlog and CTPs. We thank you all.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to provide further feedback, please post it via the &lt;a href="http://entlib.codeplex.com/Thread/List.aspx"&gt;Codeplex forum&lt;/a&gt;. This is where you can also get support. We have a dedicated sustained engineering team monitoring the forum regularly. To report a bug, use online &lt;a href="http://entlib.codeplex.com/workitem/list/basic"&gt;Issue Tracker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you have a story of how your team leverages EntLib and would like to share it with the broader community, please &lt;a href="mailto:ourstory@microsoft.com"&gt;contact us&lt;/a&gt;. We&amp;rsquo;ll be happy to work with you on a case study.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Happy coding!&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10414130" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/p_2600_amp_3B00_p/">p&amp;amp;p</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/EntLib/">EntLib</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Enterprise+Library/">Enterprise Library</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Unity/">Unity</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/new+release/">new release</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/nuget/">nuget</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/patterns+_2600_amp_3B00_+practices/">patterns &amp;amp; practices</category></item><item><title>Unity Configuration - Registration by Convention</title><link>http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx</link><pubDate>Tue, 12 Mar 2013 22:03:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10401764</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10401764</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx#comments</comments><description>&lt;p&gt;To make container setup easier and less verbose, we are adding a new feature in Unity 3.0 – &lt;b&gt;registration by convention&lt;/b&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;What is the Registration by Convention feature?&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;This feature (also referred to as auto-registration) is intended to simplify your type registrations. Rather than specify each type mapping individually (lots of &lt;font face="Consolas"&gt;container.RegisterType&amp;lt;IFoo, Foo&amp;gt;()&lt;/font&gt;) , you can direct the Unity container to scan a collection of assemblies and then automatically register multiple mappings based on a set of rules that identify the types and their locations.&lt;/p&gt;  &lt;p&gt;The following code shows example usage of the current implementation of registration by convention:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt; (&lt;font color="#0000ff"&gt;var&lt;/font&gt; container = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#4bacc6"&gt;UnityContainer&lt;/font&gt;())&amp;#160; {&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;container.RegisterTypes(&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160; &lt;font color="#4bacc6"&gt;AllClasses&lt;/font&gt;.FromAssembliesInBasePath(),&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160; &lt;font color="#4bacc6"&gt;MappedTo&lt;/font&gt;.MatchingInterface,&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160; &lt;font color="#4bacc6"&gt;WithName&lt;/font&gt;.Default,&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160; &lt;font color="#4bacc6"&gt;WithLifetime&lt;/font&gt;.ContainerControlled);&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;What conventions are supported?&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;A convention must specify which available types should be mapped in the Unity container as well as how those type mappings are defined. Currently, the available conventions work by specifying the following rules:&lt;/p&gt;  &lt;p&gt;1. Identify the list of assemblies to scan for types to be registered: you can provide your own list of assemblies, use only currently loaded assemblies, or use assemblies that reside in the base path of your application. You can further filter the list of types by names, suffixes or other predicates by using LINQ queries or extension methods. This first step results in a list of types to potentially register with the container. By the way, by default, all system assemblies will be skipped – you have to opt-in for them to be included. Note: you don’t need to start from our helper method for loading types. You can use any method to obtain an enumeration of types, even as simple as an array of literal types.&lt;/p&gt;  &lt;p&gt;2. Optionally, specify which types (typically interfaces or abstract classes) you want the container to resolve to each of the types identified in step 1. Currently, conventions include:&lt;/p&gt;  &lt;p&gt;a. Create mappings where the following naming convention is followed: type &lt;b&gt;&lt;font face="Consolas"&gt;Foo&lt;/font&gt;&lt;/b&gt; and interface &lt;b&gt;&lt;font face="Consolas"&gt;IFoo&lt;/font&gt;&lt;/b&gt;. &lt;/p&gt;  &lt;p&gt;b. Map each type to all of the interfaces it implements.&lt;/p&gt;  &lt;p&gt;c. Map each type to all of the interfaces it implements where those interfaces are in the same assembly as the type.&lt;/p&gt;  &lt;p&gt;3. Optionally, specify whether to use a &lt;a href="http://msdn.microsoft.com/en-us/library/ff649710.aspx"&gt;named registration&lt;/a&gt;. In this case Unity uses the type name as the name of the registration.&lt;/p&gt;  &lt;p&gt;4. Optionally, specify which &lt;a href="http://msdn.microsoft.com/en-us/library/ff647854.aspx"&gt;lifetime manager&lt;/a&gt; to use for the registrations.&lt;/p&gt;  &lt;p&gt;5. Optionally, identify any members of the type that should be &lt;a href="http://msdn.microsoft.com/en-us/library/ff660882(v=pandp.20).aspx"&gt;injected&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;What about Windows Store Apps?&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;The registration by convention will also be supported by Unity for Windows Store Apps with some limitations enforced by the framework, such as you won’t be able to scan the loaded assemblies and you won’t be able to scan a particular folder, but you can assemblies packaged with the app.&lt;/p&gt;  &lt;h3&gt;&lt;font color="#0080ff"&gt;What other specific conventions should we support?&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;As always, we seek your feedback on the new features. As we are finalizing the implementation of the registration by convention, it would be helpful to get your thoughts on the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Do you see a requirement for out-of-the-box automatic creation of mappings for abstract types as well as interfaces?&lt;/p&gt;    &lt;p&gt;2. Do you see a requirement for out-of-the-box support for scanning other locations for assemblies? E.g. arbitrary folders.&lt;/p&gt;    &lt;p&gt;3. In scanning the assemblies in some location, would you want to have a way of annotating specific assemblies with an optional attribute?&lt;/p&gt;    &lt;p&gt;4. Do you see any requirement for context specific conventions? Such as ASP.NET MVC, WCF, etc. Or is Unity auto-wiring sufficient in these cases?&lt;/p&gt;    &lt;p&gt;5. If you are providing injection members, some of those will be associated with the “from” type, but most will be associated with the “to” type. Do you see the need to be able to specify more fine-grained injection members, or is the support for “to” types sufficient?&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10401764" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/Unity/">Unity</category></item><item><title>Embracing Semantic Logging</title><link>http://blogs.msdn.com/b/agile/archive/2013/02/07/embracing-semantic-logging.aspx</link><pubDate>Thu, 07 Feb 2013 21:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10391998</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10391998</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2013/02/07/embracing-semantic-logging.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;UPDATE 4/25/2013&lt;/strong&gt;: The Semantic Logging Application Block&amp;nbsp;final version is &lt;a href="http://aka.ms/el6announce"&gt;released&lt;/a&gt;. Get it via NuGet.&lt;/p&gt;
&lt;hr style="border: 1px solid #cccccc; width: 100%; height: 1px; color: #ffffff;" noshade="noshade" size="1" width="100%" /&gt;
&lt;p&gt;&lt;strong&gt;UPDATE 2/14/2013&lt;/strong&gt;: The Semantic Logging Application Block CTP is now &lt;a href="http://entlib.codeplex.com/releases/view/101823"&gt;available&lt;/a&gt;.&lt;/p&gt;
&lt;hr style="border: 1px solid #cccccc; width: 100%; height: 1px; color: #ffffff;" noshade="noshade" size="1" width="100%" /&gt;
&lt;p&gt;In the world of software engineering, every system needs to log. Logging helps to diagnose and troubleshoot problems with your system both in development and in production. This requires proper, well-designed instrumentation. All too often, however, developers instrument their code to do logging without having a clear strategy and without thinking through the ways the logs are going to be consumed, parsed, and interpreted. Valuable contextual information about events frequently gets lost, or is buried inside the log messages. Furthermore, in some cases logging is done simply for the sake of logging, more like a checkmark on the list. This situation is analogous to people fallaciously believing their backup system is properly implemented by enabling the backup but never, actually, trying to restore from those backups.&lt;/p&gt;
&lt;p&gt;This lack of a thought-through logging strategy results in systems producing huge amounts of log data which is less useful or entirely useless for problem resolution.&lt;/p&gt;
&lt;p&gt;Many logging frameworks exist today (including our own &lt;a href="http://msdn.microsoft.com/en-us/library/ff664569(v=pandp.50).aspx"&gt;Logging Application Block&lt;/a&gt; and &lt;a href="http://logging.apache.org/log4net/"&gt;log4net&lt;/a&gt;). In a nutshell, they provide high-level APIs to help with formatting log messages, grouping (by means of categories or hierarchies) and writing them to various destinations. They provide you with an entry point &amp;ndash; some sort of a logger object through which you call log writing methods (conceptually, not very different from &lt;span style="font-family: Consolas;"&gt;Console.WriteLine(message)&lt;/span&gt;). While supporting dynamic reconfiguration of certain knobs, they require the developer to decide upfront on the template of the logging message itself. Even when this can be changed, the message is usually intertwined with the application code, including metadata about the entry such as the severity and entry id.&lt;/p&gt;
&lt;p&gt;Thus, the discrete event payloads get flattened and the unstructured or semi-structured logging messages become the norm. Take a look at the following section of a typical log file:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/0741.image_5F00_2.png"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/6102.image_5F00_thumb.png" alt="image" width="450" height="167" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is what typical string-and-property-bag-based logging produces. While it may contain useful info such as the level (priority) of the log event and its source, the log message itself is totally flattened into a string. In order to parse it, knowledge of the format/template is required and that format/template must have been consistently applied in the application. This is especially true, if the log data needs to be post-processed (aggregated, filtered etc.) This pre-requisite knowledge gets lost if you are using unstructured logging frameworks today. The messages highlighted in pink and light blue demonstrate the compatibility problem, where you must actually know both templates. This problem is exacerbated when the developers are long gone; the IT/Pros are faced with the hassle of interpreting these kinds of messages, many of which don&amp;rsquo;t even use intuitive names.&lt;/p&gt;
&lt;p&gt;Also, the code to generate log entries and make calls through logging framework facades, often pollutes the business logics and make the core code less readable.&lt;/p&gt;
&lt;p&gt;Imagine another world, where the events get logged and their semantic meaning is preserved. You don&amp;rsquo;t lose any fidelity in your data. Welcome to the world of &lt;strong&gt;semantic logging&lt;/strong&gt;. Note, some people refer to semantic logging as &lt;em&gt;&amp;ldquo;structured logging&amp;rdquo;&lt;/em&gt;, &lt;em&gt;&amp;ldquo;strongly-typed logging&amp;rdquo; or &amp;ldquo;schematized logging&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Take a look at the next example. Here I took an event from the Event Log.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/5444.image_5F00_4.png"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/8171.image_5F00_thumb_5F00_1.png" alt="image" width="579" height="480" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It may appear that this is no different than the event message discussed earlier. This is because the General tab formats the event data into a human readable string. It flattens it, but it&amp;rsquo;s an artifact of the tool, and it only displays this way because I, the reader, chose to view it this way. Underneath the raw message in structured format is preserved. Switching to Details, I can see that along with some system metadata, I get the event specific discrete payload, which corresponds to the message displayed earlier (I used color highlighting to emphasize how different parts of the event got used to form the message):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/5050.image_5F00_6.png"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/4477.image_5F00_thumb_5F00_2.png" alt="image" width="398" height="480" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We hit the hassle of dealing with unstructured logging when working on the Tailspin sample app for the &lt;a href="http://aka.ms/wasabi"&gt;Autoscaling Application Block (&amp;ldquo;Wasabi&amp;rdquo;)&lt;/a&gt; a year ago. All visualizations for monitoring (demoed &lt;a href="http://channel9.msdn.com/Events/Patterns-Practices-Symposium-Online/pattern-practices-symposium-2013/Autoscaling-in-Windows-Azure"&gt;here&lt;/a&gt;, starting 00:16:23) would have been so much simpler to implement, had we had semantic logging in place.&lt;/p&gt;
&lt;p&gt;The technology to enable semantic logging in Windows has been around for a while (since Windows 2000). It&amp;rsquo;s called &lt;strong&gt;ETW&lt;/strong&gt; &amp;ndash; &lt;strong&gt;Event Tracing for Windows.&lt;/strong&gt; It is a fast, scalable logging mechanism built into the Windows operating system itself. As Vance Morrison &lt;a href="http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx"&gt;explains&lt;/a&gt;, &amp;ldquo;it is powerful because of three reasons:&lt;/p&gt;
&lt;p&gt;1. The operating system comes pre-wired with a bunch of useful events&lt;/p&gt;
&lt;p&gt;2. It can capture stack traces along with the event, which is INCREDIBLY USEFUL.&lt;/p&gt;
&lt;p&gt;3. It is extensible, which means that you can add your own information that is relevant to your code.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not going to get into the details of ETW and its architecture. This &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163437.aspx"&gt;MSDN article&lt;/a&gt; does a good job with that. What I&amp;rsquo;d like to emphasize here is that ETW is based on a different logging paradigm where you must create a class representing an event (an ETW Event Provider). Historically, this has been a non-trivial task. It also involved foreign, unnatural to .NET developers concepts (like authoring manifests) and required tedious steps. This could be one of the reasons the ETW adoption was slow (our &lt;a href="http://www.surveymonkey.com/s/loggingscenarios"&gt;research&lt;/a&gt; confirms that).&lt;/p&gt;
&lt;p&gt;To address this, the &lt;strong&gt;&lt;span style="font-family: Consolas;"&gt;System.Diagnostics.Tracing.EventSource&lt;/span&gt;&lt;/strong&gt; type was added in the .NET Framework 4.5. It makes writing ETW providers easier and much more natural to the way .NET developers typically work. In an nutshell, developers specify an &lt;span style="font-family: Consolas;"&gt;EventSource&lt;/span&gt; subsclass, where each of its methods defines an event and its signature defines the event&amp;rsquo;s discrete payload. This separates the code that defines events from the code that raises the events, providing the application-specific instrumentation API. Events published through methods in an &lt;span style="font-family: Consolas;"&gt;EventSource&lt;/span&gt; class are published to ETW, and there is also the possibility of adding other destinations for events using custom Event Listener implementations. Vance Morrison provides an in-depth &lt;a href="http://blogs.msdn.com/b/vancem/archive/2012/08/13/windows-high-speed-logging-etw-in-c-net-using-system-diagnostics-tracing-eventsource.aspx"&gt;explanation&lt;/a&gt; of what kind of problem the &lt;span style="font-family: Consolas;"&gt;EventSource&lt;/span&gt; class is solving and how. I highly recommend you watch his &lt;a href="http://channel9.msdn.com/Series/PerfView-Tutorial/PerfView-Tutorial-8-Generating-Your-Own-Events-with-EventSources"&gt;video tutorial&lt;/a&gt; on generating your own events with EventSources and the &lt;a href="http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx"&gt;companion blog entry&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While the &lt;span style="font-family: Consolas;"&gt;EventSource&lt;/span&gt; provides a great idiomatic way for .NET developers to author ETW events, it doesn&amp;rsquo;t come with any of the familiar destinations for logging (rolling file, database, etc.). ETW uses its own destinations such as .etl files, and uses different tools for parsing and analyzing log data.&lt;/p&gt;
&lt;p&gt;This is where the new &lt;strong&gt;Semantic Logging Application Block&lt;/strong&gt; comes in &amp;ndash; &lt;span style="text-decoration: underline;"&gt;it makes it easier to incorporate the &lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;EventSource functionality and to manage the logging behavior of your system&lt;/span&gt;. It makes it possible to inherit most of the structure from the ETW pipeline, including event metadata and payload, to write log messages to multiple destinations, such as flat files, databases, or Windows Azure table storage, and to control what your system logs by setting filters and logging verbosity. Note, that the event flattening problem that I have described with the unstructured logging, may still be an issue when using the file-based destinations of the Semantic Logging Application Block. But the flattening does not occur where the logging request takes place, it occurs when the log message is written and that&amp;rsquo;s the core enabler of semantic logging.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve designed the Semantic Logging Application Block for .NET developers. The block is intended to help you move from the traditional, unstructured logging approach (such as that offered by the Logging Application Block) towards the semantic logging approach offered by ETW. The Semantic Logging Application Block enables you to use the EventSource class and semantic log messages in your applications without moving away from the log formats you are familiar with. Importantly, you do not need to commit to how you consume events when developing business logic; you have a &lt;strong&gt;unified application-specific API&lt;/strong&gt; for logging and then you can &lt;strong&gt;decide later&lt;/strong&gt; whether you want those events to go to ETW or alternative destinations. In the future, you can easily migrate to a complete ETW-based solution without modifying your application code: you continue to use the same custom EventSource class, but use ETW tooling to capture and process your log messages instead of using the Semantic Logging Application Block event listeners.&lt;/p&gt;
&lt;p&gt;If with a traditional logging infrastructure, such as that provided by the Logging Application Block, you might record an event exhibited in the previous example as shown in the following code sample:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;"&gt;myLogWriter.Write( &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new LogEntry {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;Severity = TraceEventType.Information,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;EventId = 5315,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Message = string.Format(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CultureInfo.CurrentCulture,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;EventResources.NextPolicyProcessing,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;username,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;nextAttemptTime,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;nextAttemptTimeUnitName),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;Categories = { "Policy Processing" }});&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Using the Semantic Logging Application Block, you would record the same event by:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;"&gt;MyCompanyEventSource.Log.NextPolicyProcessing (username, nextAttemptTime, nextAttemptTimeUnit);&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;where the &lt;span style="font-family: Consolas;"&gt;NextPolicyProcessing()&lt;/span&gt; is defined separately in the &lt;span style="font-family: Consolas;"&gt;MyCompanyEventSource&lt;/span&gt; like so, for example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;"&gt;[Event(5315, Level = EventLevel.Information, Message = "Next processing for {0} will be attempted in {1} {2}", Keywords = Keywords.PolicyProcessing)] &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;internal void NextPolicyProcessing(string username, int nextAttemptTime, TimeUnit nextAttemptTimeUnit) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;{ &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;... &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Notice how with the Semantic Logging Application Block you are simply reporting the fact that some event occurred that you might want to record in a log. You do not need to specify an event ID, a priority, or the format of the message when you write the log message in your application code. This approach of using strongly typed events in your logging process provides the following benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can be sure that you format and structure your log messages in a consistent way because there is no chance of making a coding error when you write the log message.&lt;/li&gt;
&lt;li&gt;It is easier to query and analyze your log files because the log messages are formatted and structured in a consistent manner.&lt;/li&gt;
&lt;li&gt;You can more easily parse your log data using some kind of automation.&lt;/li&gt;
&lt;li&gt;You can more easily consume the log data from another application. For example, in an application that automates activities in response to events that are recorded in a log file.&lt;/li&gt;
&lt;li&gt;It is easier to correlate log entries from multiple sources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, this requires you to author the &lt;span style="font-family: Consolas;"&gt;MyCompanyEventSource&lt;/span&gt; class (subclass of the &lt;span style="font-family: Consolas;"&gt;EventSource&lt;/span&gt;). But it makes sense for the developers to do so. It puts the effort in the right place: instead of putting all the effort in the parsing of the flat messages (and often failing at that), you put the effort into structuring your events properly in the first place. Besides, we are thinking of providing some additional aiding tools (snippets and/or FxCop rules) to make authoring of event methods even easier.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll be able to use the Semantic Logging Application Block to create an out-of-process logger. This will help to reduce the logging overhead in your LOB applications because most of the processing of log messages takes place in a separate application. This is especially useful if you have a requirement to collect high volumes of trace messages from a production system. The out-of-process logger included with the Semantic Logging Application Block can also be dynamically reconfigured simply by editing a configuration file, enabling you, for example, to easily change the level of logging on the fly without touching your production system.&lt;/p&gt;
&lt;p&gt;As we release the CTP of the Semantic Logging Application Block, we&amp;rsquo;ll demonstrate how to construct your own EventSources and route your logging to various destinations. This blog post is intended to describe the type of problem we are trying to solve and to entice you to think about the semantic logging paradigm.&lt;/p&gt;
&lt;p&gt;In conclusion, I encourage you to read Vance Morrison&amp;rsquo;s tutorials and familiarize yourself with the EventSource. Start thinking about your logging in the new way. The Semantic Logging Application Block we are building is going to be a stepping-stone for you to get from a traditional, unstructured logging approach (such as that taken by the Logging Application Block or log4net), to a modern, semantic approach as provided by ETW.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10391998" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/intro/">intro</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/EntLib/">EntLib</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Enterprise+Library/">Enterprise Library</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/ease+of+use/">ease of use</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/logging/">logging</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/-NET4-5/">.NET4.5</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/ETW/">ETW</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/semantic+logging/">semantic logging</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/EventSource/">EventSource</category></item><item><title>Join us at the patterns &amp; practices symposium 2013</title><link>http://blogs.msdn.com/b/agile/archive/2012/12/06/join-us-at-the-patterns-amp-practices-symposium-2013.aspx</link><pubDate>Thu, 06 Dec 2012 21:59:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10375386</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10375386</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2012/12/06/join-us-at-the-patterns-amp-practices-symposium-2013.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/4382.clip_5F00_image002_5F00_2.jpg"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/5852.clip_5F00_image002_5F00_thumb.jpg" width="624" height="101" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Join my team for our flagship event – the &lt;b&gt;patterns &amp;amp; practices symposium 2013&lt;/b&gt;. It will take place on Microsoft campus, Jan 15-17, 2013.&lt;/p&gt;  &lt;p&gt;Don’t miss the opportunity to see my colleagues and I speak on the latest projects coming from p&amp;amp;p and industry experts discussing the latest trends in software engineering. We have a fantastic roundup of speakers. Where else would you get to meet in person and hear ScottGu, Scott Hanselman, Greg Young, Adam Steltzner and Felicity Aston – all at one event? &lt;/p&gt;  &lt;p&gt;The symposium agenda includes three tracks: &lt;em&gt;The Cloud&lt;/em&gt;, &lt;em&gt;The Client&lt;/em&gt; and &lt;em&gt;The Engineering&lt;/em&gt;. Check out the &lt;a href="http://msdn.microsoft.com/en-us/practices/ff797018"&gt;details&lt;/a&gt; and register now. We look forward to seeing you and interacting with you over these three exciting days.&lt;/p&gt;  &lt;p&gt;Register at &lt;a href="http://aka.ms/pnpsym"&gt;http://aka.ms/pnpsym&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10375386" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/p_2600_amp_3B00_p/">p&amp;amp;p</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/events/">events</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/p_2600_p/">p&amp;p</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/patterns+_2600_+practices/">patterns &amp; practices</category></item><item><title>Enterprise Library 6.0 - Vision/Scope</title><link>http://blogs.msdn.com/b/agile/archive/2012/11/08/enterprise-library-6-0-vision-scope.aspx</link><pubDate>Thu, 08 Nov 2012 21:50:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10367043</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10367043</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2012/11/08/enterprise-library-6-0-vision-scope.aspx#comments</comments><description>&lt;h4&gt;TL;DR version&lt;/h4&gt;  &lt;p&gt;This post is an overview of the direction the patterns &amp;amp; practices team is taking with the next version of Microsoft Enterprise Library. Feel free to scroll down for the specific product backlog themes or just visit our &lt;a href="http://entlib.uservoice.com/"&gt;Uservoice site&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Exploration and preparation&lt;/h4&gt;  &lt;p&gt;After a couple of months of &lt;a href="http://blogs.msdn.com/b/agile/archive/2012/08/22/enterprise-library-vnext-simplified.aspx"&gt;exploration&lt;/a&gt;, we have finalized our plans for the next major version of Microsoft Enterprise Library. We have analyzed a sea of information from various sources, including:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;numerous discussions with subject-matter experts and EntLib users &lt;/li&gt;    &lt;li&gt;discussions with the members of the advisory board &lt;/li&gt;    &lt;li&gt;discussions with various Microsoft product groups&lt;/li&gt;    &lt;li&gt;suggestions and votes on our &lt;a href="http://entlib.uservoice.com"&gt;Uservoice site&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://entlib.codeplex.com/workitem/list/basic?field=Votes&amp;amp;direction=Descending&amp;amp;issuesToDisplay=Open&amp;amp;keywords=&amp;amp;emailSubscribedItemsOnly=false"&gt;IssueTracker items&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/architecturegeneral/threads"&gt;MSDN&lt;/a&gt;, &lt;a href="http://entlib.codeplex.com/discussions"&gt;Codeplex&lt;/a&gt; and &lt;a href="http://stackoverflow.com/questions/tagged/enterprise-library"&gt;StackOverflow&lt;/a&gt; forums&lt;/li&gt;    &lt;li&gt;suggestions from our sustained engineering and Premier support teams &lt;/li&gt;    &lt;li&gt;review of remaining stories from the previous product backlog (that didn’t get done in v5.0)&lt;/li&gt;    &lt;li&gt;team brainstorming, categorizing, filtering&lt;/li&gt;    &lt;li&gt;responses to our blog posts&lt;/li&gt;    &lt;li&gt;comments in social media over the past 18 months&lt;/li&gt;    &lt;li&gt;direct email communications with the product owner and members of the dev team&lt;/li&gt;    &lt;li&gt;observations of users in action&lt;/li&gt;    &lt;li&gt;log analysis (popularity of certain parts of Enterprise Library based on number of downloads and page views of the corresponding pages on MSDN)&lt;/li&gt;    &lt;li&gt;user ranking and commenting on MSDN articles&lt;/li&gt;    &lt;li&gt;satisfaction exit survey data&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/agile/archive/2012/09/14/clarifying-logging-scenarios.aspx"&gt;logging scenarios survey&lt;/a&gt; data&lt;/li&gt;    &lt;li&gt;conversations with //Build attendees&lt;/li&gt;    &lt;li&gt;downloads and comments on the EntLib related videos on Channel9.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We thank everyone who provided their thoughtful feedback.&lt;/p&gt;  &lt;p&gt;We have now created a new Advisory Board, presented our vision to the leadership team, got business consensus on the themes and an approval to go ahead with the project. Our dev team is formed and we are excited about the project.&lt;/p&gt;  &lt;h4&gt;The Vision – simplification throughout&lt;/h4&gt;  &lt;p&gt;Here’s the formal vision for Microsoft Enterprise Library 6.0:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;For &lt;b&gt;developers&lt;/b&gt;, &lt;b&gt;solution architects&lt;/b&gt;, &lt;b&gt;DevOps&lt;/b&gt; and &lt;b&gt;IT Pros&lt;/b&gt; building, extending and maintaining LOB systems on &lt;b&gt;Microsoft platforms&lt;/b&gt; (.NET Framework 4.5 and Windows Azure), &lt;b&gt;Microsoft Enterprise Library 6.0&lt;/b&gt; will provide &lt;b&gt;guidance&lt;/b&gt; and &lt;b&gt;reusable components &lt;/b&gt;designed to encapsulate &lt;b&gt;recommended practices &lt;/b&gt;for &lt;b&gt;end-to-end&lt;/b&gt; application development in .NET which facilitate ease of use, consistency, and extensibility.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Let me share with you a couple of laptop stickers that I designed for EntLib5.0 and 6.0. They are meant to epitomize this project vision. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/0511.image_5F00_4.png"&gt;&lt;img style="margin: 2px 12px 8px 0px; float: left; display: inline; background-image: none;" title="EntLib 5.0 vision" border="0" alt="click to enlarge" align="left" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/2642.image_5F00_thumb_5F00_1.png" width="168" height="242" /&gt;&lt;/a&gt;Here’s the one for 5.0 (on the left). &lt;/p&gt;  &lt;p&gt;As you can see the key message here was to position EntLib as a developer accelerator meant to do heaving lifting for you. The Enterprise Library design has traditionally been guided by the principles of:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Consistency: &lt;/b&gt;Application blocks are written with and used in common patterns &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Extensibility:&lt;/b&gt; Pluggable extension points &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Ease of use: &lt;/b&gt;Config tool, tons of docs, simple interfaces, labs, webcasts &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Integration: &lt;/b&gt;Work well together or separately &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The vision of EntLib blocks addressing common-cross cutting concerns and promoting code reuse hasn’t changed. We still want to encourage devs to focus less on the plumbing and more on what matters to the stakeholders – business logic and overall user experience. However, the order of the guiding design principles has changed. Our primary consideration now (as can be seen from the stated vision above) is the ease of use and the fast start.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/7455.image_5F00_9.png"&gt;&lt;img style="margin: 0px 0px 8px 8px; float: right; display: inline; background-image: none;" title="image" border="0" alt="image" align="right" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/6787.image_5F00_thumb_5F00_3.png" width="171" height="242" /&gt;&lt;/a&gt;The metaphor for v6.0 is this one on the right. &lt;/p&gt;  &lt;p&gt;As you can see, what we are envisioning is to make the Enterprise Library much lighter. This means &lt;a href="http://blogs.msdn.com/b/agile/archive/2011/04/08/on-deprecation.aspx"&gt;deprecating&lt;/a&gt; the blocks that are not relevant anymore due to the modern capabilities of the platform itself (&lt;i&gt;Caching&lt;/i&gt;, &lt;i&gt;Security&lt;/i&gt; and &lt;i&gt;Crypto&lt;/i&gt;), removing lots of historic cruft which we were carrying forward to support backward compatibility, and generally simplifying the underlying architecture. For example, there are currently &lt;a href="http://msdn.microsoft.com/en-us/library/Ff953191.441da4ba-fa2e-4da3-bac1-89897580d80b(l=en-us,v=pandp.50).png"&gt;four different ways&lt;/a&gt; to get your Enterprise Library objects. This is not needed – so we’ll simplify this and offer 1 or 2 recommended approaches. Simplification also means minimizing the number of interblock dependencies. We are going to emphasize that each application block can be used standalone. The vision is that if you download the Logging Application Block package, you will &lt;b&gt;not&lt;/b&gt; need to marry into an extended family of other packages (like EnterpriseLibrary Common -&amp;gt; Unity Interception -&amp;gt; Unity -&amp;gt; Service Location). It will be just one package with an optional dependency on the configuration package (if and only if you want to use declarative configuration).&lt;/p&gt;  &lt;p&gt;We are also making a substantial investment in tackling the configuration complexity. Our ultimate goal is to make it so simple, straightforward, and intuitive that no configuration tool is required at all. This is while assisting DevOps and IT/Pros in deploying, managing, and supporting their systems that are built with EntLib application blocks. This is a very ambitious goal. We feel with your feedback we’ll be able to pull it off. I will be writing a separate post dedicated specifically to our plans around configuration. &lt;/p&gt;  &lt;p&gt;One other important aspect of the new release is that we plan to target both on-prem and cloud naturally, with no tension. This includes the configuration and all application blocks (including the Transient Fault Handling Application Block and the Autoscaling Application Block). This is also worth a separate post.&lt;/p&gt;  &lt;h4&gt;Target personas&lt;/h4&gt;  &lt;p&gt;These are our primary target personas with the corresponding goals:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Devs new to EntLib: &lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;– Get going fast!&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Alumni EntLib devs &lt;/b&gt;who are not using it today &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;– Reignite my passion for EntLib, make me see the value-adds; debunk the myth of all-or-nothing deal.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Current loyal EntLib fans&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;– Provide smooth migration experience, continuity and support.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;DevOps &lt;/b&gt;and&lt;b&gt; IT Pros&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;– Simplify deployment and operations by reducing the chance of errors.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;Product backlog themes&lt;/h4&gt;  &lt;p&gt;Currently, our product backlog is organized by the following broad themes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Fast start &amp;amp; learnability &lt;/li&gt;    &lt;li&gt;Configuration &lt;/li&gt;    &lt;li&gt;Architectural refactoring &lt;/li&gt;    &lt;li&gt;Semantic Logging (new block!) &lt;/li&gt;    &lt;li&gt;Generalizing the &lt;a href="http://aka.ms/topaz"&gt;Transient Fault Handling Application Block&lt;/a&gt; (“Topaz”) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://aka.ms/wasabi"&gt;Autoscaling Application Block&lt;/a&gt; (“Wasabi”) improvements &lt;/li&gt;    &lt;li&gt;&lt;a href="http://unity.codeplex.com"&gt;Unity&lt;/a&gt; improvements &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff953185(v=pandp.50).aspx"&gt;Logging Application Block&lt;/a&gt; improvements &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff953182(v=pandp.50).aspx"&gt;Validation Application Block&lt;/a&gt; improvements &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Individual user stories can be found on the &lt;a href="http://entlib.uservoice.com/"&gt;Uservoice&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Target framework&lt;/h4&gt;  &lt;p&gt;Let me make it clear: Enterprise Library 6.0 is primarily about the back-end story. We will target the .NET 4.5 framework and all platforms that .NET 4.5 is supported on, including:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows 8 Desktop (no Windows RT except for Unity)&lt;/li&gt;    &lt;li&gt;Windows 7 (32-bit and 64-bit)&lt;/li&gt;    &lt;li&gt;Windows Server 2012 (64-bit)&lt;/li&gt;    &lt;li&gt;Windows Sever 2008 R2 (64-bit)&lt;/li&gt;    &lt;li&gt;Windows Server 2008 SP2 (32-bit and 64-bit)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cloud-specific features will target the latest Windows Azure SDK.&lt;/p&gt;  &lt;p&gt;Unity 3.0 is the only application block which will have a WinRT version for now. We have already released the &lt;a href="http://blogs.msdn.com/b/agile/archive/2012/08/10/unity-3-0-preview-for-net-framework-4-5-and-winrt.aspx"&gt;preview&lt;/a&gt; of it. During this project, we’ll do the proper test pass, security review and other quality gates.&lt;/p&gt;  &lt;h4&gt;How can you help?&lt;/h4&gt;  &lt;p&gt;Please continue to comment/vote on use stories on our &lt;a href="http://entlib.uservoice.com"&gt;Uservoice site&lt;/a&gt;. We definitely appreciate your input and would like our backlog priorities and sprints to continue to be informed and driven by your feedback.&lt;/p&gt;  &lt;p&gt;If you feel strongly about engaging with us more closely, consider joining our &lt;a href="http://entlib.codeplex.com/wikipage?title=EntLib6AdvisoryBoardCall"&gt;advisory board&lt;/a&gt;. We are looking for both experience EntLib users and enthusiastic novices.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10367043" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/EntLib/">EntLib</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Enterprise+Library/">Enterprise Library</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Unity/">Unity</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/plans/">plans</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/ease+of+use/">ease of use</category></item><item><title>Topaz now supports the new Task-based Async Pattern</title><link>http://blogs.msdn.com/b/agile/archive/2012/10/09/topaz-now-supports-the-new-task-based-async-pattern.aspx</link><pubDate>Tue, 09 Oct 2012 19:19:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10357942</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10357942</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2012/10/09/topaz-now-supports-the-new-task-based-async-pattern.aspx#comments</comments><description>&lt;p&gt;We’ve released a new version of the &lt;a href="http://aka.ms/topaz"&gt;&lt;strong&gt;Transient Fault Handling Application Block (“Topaz”)&lt;/strong&gt;&lt;/a&gt; which supports the new &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=19957"&gt;Task-based Asynchronous Pattern&lt;/a&gt; using the &lt;a href="http://msdn.microsoft.com/en-us/library/dd460717(v=vs.100).aspx"&gt;Task Parallel Library&lt;/a&gt; (TPL). This simplifies the process of retrying asynchronous calls significantly. &lt;/p&gt;  &lt;p&gt;The new block is available via NuGet. Check out the &lt;a href="http://entlib.codeplex.com/wikipage?title=TopazTplSep2012UpdateReleaseNotes"&gt;Release Notes&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Special thanks to &lt;/em&gt;&lt;a href="http://blogs.msdn.com/b/toub"&gt;&lt;em&gt;Stephen Toub&lt;/em&gt;&lt;/a&gt;&lt;em&gt; for the code review and feedback.&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10357942" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/new+release/">new release</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/transient+fault+handling/">transient fault handling</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Topaz/">Topaz</category></item><item><title>Clarifying logging scenarios</title><link>http://blogs.msdn.com/b/agile/archive/2012/09/14/clarifying-logging-scenarios.aspx</link><pubDate>Fri, 14 Sep 2012 18:55:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10349574</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10349574</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2012/09/14/clarifying-logging-scenarios.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/practices/bb969103"&gt;patterns &amp;amp; practices team&lt;/a&gt; is exploring the space of application development for &lt;a href="http://blogs.msdn.com/b/windowsstore/archive/2012/09/11/windows-store-now-open-to-all-developers.aspx"&gt;&lt;strong&gt;Windows App Store&lt;/strong&gt;&lt;/a&gt; and &lt;strong&gt;Windows 8&lt;/strong&gt;. We are thinking of building lean application blocks (reusable components) to help accelerate your development. If you are building or planning on building this type of app, please engage with us and help us understand your&lt;strong&gt; logging scenarios&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;This is the first survey in the series of our public consultations to help direct our exploration. Depending on your feedback and related priorities we will produce an initial backlog which we will also invite the community to comment/vote on later.&lt;/p&gt;  &lt;p&gt;Please take a few minutes to provide your input and also invite others to do the same:&lt;font size="3"&gt; &lt;/font&gt;&lt;a href="http://www.surveymonkey.com/s/loggingscenarios"&gt;&lt;font size="3"&gt;http://www.surveymonkey.com/s/loggingscenarios&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thank you!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10349574" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/Windows8/">Windows8</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/WinRT/">WinRT</category></item><item><title>Enterprise Library vNext - Simplified!</title><link>http://blogs.msdn.com/b/agile/archive/2012/08/22/enterprise-library-vnext-simplified.aspx</link><pubDate>Thu, 23 Aug 2012 00:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10342557</guid><dc:creator>Grigori Melnik MSFT</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/agile/rsscomments.aspx?WeblogPostID=10342557</wfw:commentRss><comments>http://blogs.msdn.com/b/agile/archive/2012/08/22/enterprise-library-vnext-simplified.aspx#comments</comments><description>&lt;table style="width: 80%;" border="1" cellspacing="0" cellpadding="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;h3&gt;TL;DR edition&lt;/h3&gt;
&lt;p&gt;We are simplifying EntLib. Next version targets Windows 8/Windows Server 2012 and .NET4.5. Help shape the release. Provide input via &lt;a href="http://entlib.uservoice.com/"&gt;Uservoice&lt;/a&gt;.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3&gt;Full edition&lt;/h3&gt;
&lt;p&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="EntLib Simplification Metaphor" border="0" alt="EntLib Simplification Metaphor" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-86-66-metablogapi/3617.EntLibSimplificationMetaphor_5F00_3.png" width="600" height="278" /&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been over 2 years since the last major release of &lt;strong&gt;Microsoft Enterprise Library&lt;/strong&gt;. That release (v5.0) was the most successful &lt;a href="http://blogs.msdn.com/b/agile/archive/2010/04/20/microsoft-enterprise-library-5-0-released.aspx"&gt;release&lt;/a&gt; to date with over 1.5 million downloads and many teams using it in their systems development today. I regularly get feedback and testimonials from our users. Those are inspiring. We have also shipped two integrations packs &amp;ndash; one for &lt;a href="http://msdn.microsoft.com/en-us/library/hh852705(v=pandp.51).aspx"&gt;Silverlight&lt;/a&gt; and another one for &lt;a href="http://msdn.microsoft.com/en-us/library/hh680918(v=pandp.50)"&gt;Windows Azure&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Original mission&lt;/h4&gt;
&lt;p&gt;When the original Enterprise Library was envisioned back in 2004, the target audience included developers, solution architects, and operations specialists, who build, extend, and maintain .NET line-of-business systems that typically need to be deployed widely and need to interoperate with other applications and systems. The vision was to provide guidance and reusable components designed to encapsulate recommended practices for .NET application development which facilitate consistency, extensibility, ease of use, and integration. These components (which we call &amp;ldquo;&lt;em&gt;application blocks&lt;/em&gt;&amp;rdquo;) address common cross-cutting concerns (like logging, validation, data access, error management), sparing you, the developer, from building your own plumbing (though many would consider that to be the most fun) and instead focus on what matters the most to your customers &amp;ndash; the business logic. Thus, Enterprise Library is meant as a development accelerator.&lt;/p&gt;
&lt;p&gt;The vision hasn&amp;rsquo;t changed.&lt;/p&gt;
&lt;h4&gt;Path forward&lt;/h4&gt;
&lt;p&gt;Over time, Enterprise Library evolved and grew by adding new application blocks and new features to the existing blocks. We kept the public APIs mostly backwards compatible with the previous versions of EntLib (going as far back as v2.0). As a result, EntLib became large and arguably more complex than it needs to be. In our efforts to simplify EntLib, we&amp;rsquo;ve removed certain features in v5.0 (such as WMI support) and announced deprecation of others in the future releases (such as the Caching Application Block). A year ago, I wrote a blog post &lt;a href="http://blogs.msdn.com/b/agile/archive/2011/04/08/on-deprecation.aspx"&gt;On Deprecation&lt;/a&gt; elaborating on why deleting code is one of my favorite things. I encourage you to read it to better understand our approach to graceful deprecation.&lt;/p&gt;
&lt;p&gt;The time has come to think about the future of Enterprise Library and Unity. In vNext, we&amp;rsquo;d like to revisit all the scenarios EntLib addresses and see whether they still make sense to be included. The .NET Framework has advanced big time in the past couple of years. Thus, we plan to deprecate many pieces that are not relevant anymore. In addition to the Caching Application Block, the Cryptography Application Block and the Security Application Block are likely candidates. We don&amp;rsquo;t want to be confined by the historical cruft. We will also do a sweep of all providers for other blocks and see which ones make sense to keep. This means that even the remaining blocks will be reimagined and possibly rearchitected, not simply ported. On the other hand, we&amp;rsquo;ll evaluate which blocks from the integration packs make sense to generalize. In the world of distribution and asynchrony, it&amp;rsquo;s likely that the&lt;a href="http://aka.ms/topaz"&gt; Transient Fault Handling Application Block&lt;/a&gt; will play a much more prominent role and become more general purpose, not just focusing on the technologies and services offered by Windows Azure.&lt;/p&gt;
&lt;p&gt;The way we envision Enterprise Library v6.0 and Unity 3.0 is that they will be targeted at Windows 8 and Windows Server 2012 developers that are using .NET framework 4.5. We would like to take advantage of all the new powerful features .NET 4.5 has to offer (including the &lt;a href="http://msdn.microsoft.com/en-us/library/hh156548"&gt;new asynchronous features&lt;/a&gt;, new communication APIs, improved portable class libraries, instrumentation, etc.) as well as the full power of the Windows 8 runtime and application model. Keep in mind that EntLib 5.0 has been fully tested on .NET 4.5 already. You can use it now with confidence. We have also recently released a &lt;a href="http://blogs.msdn.com/b/agile/archive/2012/08/10/unity-3-0-preview-for-net-framework-4-5-and-winrt.aspx"&gt;port of Unity to .NET4.5 and WinRT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The guidance will embody recommendations and patterns of design for scalability, high availability, and high perf. Another important theme will likely be the unification and simplification of the configuration throughout. We recognize this is a non-trivial task.&lt;/p&gt;
&lt;h4&gt;Call to action&lt;/h4&gt;
&lt;p&gt;Considering the above, I&amp;rsquo;d like to issue an open call to action. Help us scope and shape the next release of Enterprise Library and Unity. Where should we focus our efforts? What stories should we address? Unleash your ideas. Don&amp;rsquo;t feel constrained by the current blocks or features. Think of an ideal world where all your wishes could be granted and the types of scenarios you really wished were supported. My call goes to our raving fans and loyal users, as well as to the avid critics. If you are annoyed by any of the EntLib features, make your criticism constructive &amp;ndash; suggest improvements! We are not only listening, but also acting.&lt;/p&gt;
&lt;p&gt;You can provide your input in a variety of ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Respond/comment/vote via &lt;a href="http://entlib.uservoice.com"&gt;UserVoice&lt;/a&gt;. Do not assume we are looking for new feature requests only. If there&amp;rsquo;s something in the existing EntLib you really want to see moving forward, please submit that as a separate UserVoice story. Also, please don&amp;rsquo;t be biased by the existing submissions &amp;ndash;UserVoice displays them in the order of the most votes, but we suggest you review the entire list.&lt;/li&gt;
&lt;li&gt;Comment to this blog post.&lt;/li&gt;
&lt;li&gt;If you prefer, send me an email directly at &lt;i&gt;grigori&lt;/i&gt; dot &lt;i&gt;melnik&lt;/i&gt; at &lt;i&gt;microsoft&lt;/i&gt; dot &lt;i&gt;com&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look forward to your suggestions!&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Update [27-Aug-2012]: Call for Advisory Board Members&lt;/h4&gt;
&lt;p&gt;I describe how our Advisory Board operates &lt;a href="http://entlib.codeplex.com/wikipage?title=AdvisoryBoardFAQ"&gt;here&lt;/a&gt;. We are lookig for both subject matter experts and passionate novices. If you are interested in being an advisor and helping us shape the next releases of Enterprise Library and Unity, answer this &lt;a href="http://entlib.codeplex.com/wikipage?title=EntLib6AdvisoryBoardCall"&gt;call&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10342557" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/agile/archive/tags/EntLib/">EntLib</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/Enterprise+Library/">Enterprise Library</category><category domain="http://blogs.msdn.com/b/agile/archive/tags/plans/">plans</category></item></channel></rss>