<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>PostSharp Official Blog</title><link>http://www.postsharp.net/blog/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/postsharp" /><description>News, tips and tricks from PostSharp</description><language>en-US</language><managingEditor>noemail@noemail.org (Gael Fraiteur)</managingEditor><generator>BlogEngine.NET 2.8.0.5</generator><blogChannel:blogRoll xmlns:blogChannel="http://backend.userland.com/blogChannelModule">http://www.postsharp.net/blog/opml.axd</blogChannel:blogRoll><blogChannel:blink xmlns:blogChannel="http://backend.userland.com/blogChannelModule">http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink><dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">PostSharp Blog</dc:title><geo:lat xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">0.000000</geo:lat><geo:long xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">0.000000</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/postsharp" /><feedburner:info uri="postsharp" /><thespringbox:skin xmlns:thespringbox="http://www.thespringbox.com/dtds/thespringbox-1.0.dtd">http://feeds.feedburner.com/postsharp?format=skin</thespringbox:skin><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>postsharp</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpostsharp" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpostsharp" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpostsharp" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/postsharp" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpostsharp" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fpostsharp" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fpostsharp" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item><title>PostSharp Supports Prague Flood Relief: Follow-Up</title><link>http://feedproxy.google.com/~r/postsharp/~3/6LA43eX9EPU/post.aspx</link><category>Community</category><pubDate>Thu, 13 Jun 2013 10:01:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=8f9c3f12-d907-4160-ae5f-554cfd26c018</guid><description>&lt;p&gt;&lt;a href="http://www.postsharp.net/blog/post/PostSharp-Supports-Prague-Flood-Relief.aspx"&gt;On June 3rd&lt;/a&gt;, we announced that we would support those affected by the floods and pledged to donate to a local flood relief fund 50% of all online purchases completed during the state of emergency.&lt;/p&gt;  &lt;p&gt;On June 7th, as floods started to subside, we sent $2,000 to Caritas, a well-known charity association.&lt;/p&gt;  &lt;div&gt;&lt;img style="float: left;" alt="" src="http://www.postsharp.net/blog/image.axd?picture=11d6e8e4435fb8f0.jpg" /&gt;&lt;img style="margin-left: 20px; float: left;" alt="" src="http://www.postsharp.net/blog/image.axd?picture=4e16ee58252e2b35.jpg" /&gt;&lt;/div&gt;  &lt;div class="clear"&gt;&lt;/div&gt;  &lt;p id="quote"&gt;&lt;em&gt;“It is extremely important that we all band together and support one another during such difficult time. We sincerely appreciate the generosity and community spirit of all donors. Your generous help will enable us to support families affected by the flood in Kralupy and its surroundings&lt;/em&gt;,” says Barbora Kovarova, director of the local Caritas of Kralupy nad Vltavou.&lt;/p&gt;  &lt;p&gt;For the whole team at PostSharp Technologies, I would like to express our warmest thanks to all customers who contributed to the donation.&lt;/p&gt;  &lt;p&gt;-iveta&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=6LA43eX9EPU:IYdpmDpDgxg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=6LA43eX9EPU:IYdpmDpDgxg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=6LA43eX9EPU:IYdpmDpDgxg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=6LA43eX9EPU:IYdpmDpDgxg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/6LA43eX9EPU" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Iveta Moldavcuk</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=8f9c3f12-d907-4160-ae5f-554cfd26c018</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=8f9c3f12-d907-4160-ae5f-554cfd26c018</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/PostSharp-Supports-Prague-Flood-Relief-Follow-Up#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=8f9c3f12-d907-4160-ae5f-554cfd26c018</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=8f9c3f12-d907-4160-ae5f-554cfd26c018</feedburner:origLink></item><item><title>[Recording] Unit Testing &amp; Thin Aspects</title><link>http://feedproxy.google.com/~r/postsharp/~3/WVISlksdE8M/post.aspx</link><category>Webinars</category><pubDate>Tue, 04 Jun 2013 04:34:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=a0398f7b-2432-4c7b-a031-aada1ac5be53</guid><description>&lt;p&gt;The benefits of unit testing are numerous. When aspects are involved, Matt Groves believes keeping them "thin" is key to keeping your code easy to unit test and he explores some of the implications of unit testing when a post-compiler tool is involved.  &lt;p&gt;Gael Fraiteur joins this final episode in the AOP in .NET series to give his differing opinion about the relevancy of "thin" aspects and speaks about a set of practices that can be used to create efficient tests of aspects.  &lt;p&gt;&lt;iframe height="460" src="http://player.vimeo.com/video/67455844?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;loop=1" frameborder="0" width="640" mozallowfullscreen webkitallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;h2&gt;Q&amp;amp;A&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;Q: What would be the best way to inject the cache provider VIA an IOC container? (e.g. Autofac/Unity)&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Whatever container you wish to use is fine. In my example I just new them up directly but in reality you shouldn't do that. In structure map you could say: &lt;/p&gt;&lt;pre&gt;if (!On) return; &lt;/pre&gt;&lt;pre&gt;_concern=ObjectFactory.GetInstance&amp;lt;ICacheConcern&amp;gt;();&lt;/pre&gt;
&lt;p&gt;As long as you're not tying it to a specific implementation, you're just asking for something that implements the interface. This is known as the service locator pattern.&lt;/p&gt;&lt;strong&gt;Q: Gael, you mentioned in your presentation that one can't test an aspect in isolation of a target. Isn’t that exactly what Matthew just showed us?&lt;/strong&gt;&lt;br&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Gael – yes, but Matt showed it in a very specific case using compiler internals to do it by instantiating the execution arguments that are being passed to the aspect. In the case of OnMethodBoundary Aspects, this is very simple to do, but if there are changes in methods or invocations it can become quite complex. &lt;/p&gt;
&lt;p&gt;Matt showed how to isolate the aspect completely from the aspect framework with the notion of thin aspects but to me the cost of doing so is huge. There is the abstraction that is added on top of the aspect which isn’t justified because test coverage is worsened and the meta data is part of the input. Just as you wouldn’t test a method without an argument, you wouldn’t test an aspect without a target. &lt;/p&gt;
&lt;p&gt;Matt – what I tested in isolation wasn’t an aspect but rather the advice or the actual logic of the aspect.&lt;/p&gt;
&lt;p&gt;Gael – Matt’s approach may work in simple cases but I would be curious to see how it works in complex aspects, including aspect combinations. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Why would you use a static IOC resolution instead of using the service locator with each call of "OnEntry"? (in the logging example)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; This is a matter of optimization. Logging is very performance sensitive, because it’s invoked at a very high frequency, so I would avoid resolving dynamically but this is entirely up to you. In documentation, I show several approaches where the service locator returns a delegate that may be re-evaluated each and every time (or not, depending on your preference). &lt;/p&gt;
&lt;p&gt;There is no general rule or best practice here, it depends on what you want to achieve in each situation and the tradeoffs between architecture and performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Gael, you mentioned in your presentation that you can’t unit test build-time logic because PostSharp performs code weaving at compile-time. For a consumer of a class or a framework, why would I be concerned on how the deliverables are made instead of how they are used?&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; It depends on who the consumer is. In large teams, you’re delivering aspects to the rest of the team and not the end customer. With some of our largest customers 10% of the team build aspects and the other 90% consume the aspects. In those cases, if you want your team to be more productive then you need to check that the aspect has correct build-time behavior. Then the problem is: how to test validation. &lt;/p&gt;
&lt;p&gt;If however your aspect never emits build-time errors, then run-time testing may be sufficient. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Couldn't you unit test the aspects advice the way Matthew suggests, and then integration test the combination and ordering of method calls of the aspects the way Gael suggests? Do these techniques really need to be mutually exclusive?&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A: Gael – it depends on what your objective is. If your objective is to decouple the framework from the aspect, then Matt’s approach may be useful. However, if the objective is to do good testing in as little time as possible then why would I add complexity and decouple the framework from the aspect? I don’t see the benefit in terms of architecture and time-savings.&lt;/p&gt;
&lt;p&gt;Matt – Gael and the PostSharp team take a different approach than I would because they’re writing aspects for the general public to consume and not just my team.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: In the case of injected concerns/dependencies for aspects, would you use a fake resolver?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Matt – in my case the aspect was thin enough so I didn’t have to use a fake resolver. What I did instead was to pass-in mock objects directly, injecting them myself.&lt;/p&gt;
&lt;p&gt;Gael – you should have your resolver work differently, depending on the context. In production, you would involve your real resolver and in testing you would add rules. and according to the context to which the aspect is being applied, it would return a different implementation of the service. these are all options to consider.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Have any of you used something like nCrunch with PostSharp?&lt;br&gt;A:&lt;/strong&gt; Matt – I’ve used nCrunch before, it’s a great test runner tool, and haven’t had any problems with using it and PostSharp together. However it’s been a while since I last used it.&lt;/p&gt;
&lt;p&gt;Many thanks to Matthew Groves for the wonderful 5-part series. We wish him much success with his new book, &lt;a href="http://www.manning.com/groves/"&gt;Aspect-Oriented Programming in .NET&lt;/a&gt;, out this month. You can see Matt speak and catch up with him in person this summer at &lt;a href="http://www.postsharp.net/community"&gt;Louisville .NET Meetup Group and CodeStock&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/apapadimoulis"&gt;Alex Papadimoulis&lt;/a&gt; of &lt;a href="http://thedailywtf.com/"&gt;The Daily WTF&lt;/a&gt; fame will join us on June 27th for the next PostSharp Live Webinar to talk about NuGet, deployment management issues, and private repositories as a possible solution. &lt;/p&gt;
&lt;p&gt;More on that coming very soon.&lt;/p&gt;
&lt;p&gt;-Britt&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=WVISlksdE8M:YrtkHTvBo5c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=WVISlksdE8M:YrtkHTvBo5c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=WVISlksdE8M:YrtkHTvBo5c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=WVISlksdE8M:YrtkHTvBo5c:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/WVISlksdE8M" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Britt King</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=a0398f7b-2432-4c7b-a031-aada1ac5be53</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=a0398f7b-2432-4c7b-a031-aada1ac5be53</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Recording-Unit-Testing-Thin-Aspects#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=a0398f7b-2432-4c7b-a031-aada1ac5be53</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=a0398f7b-2432-4c7b-a031-aada1ac5be53</feedburner:origLink></item><item><title>PostSharp Supports Prague Flood Relief</title><link>http://feedproxy.google.com/~r/postsharp/~3/K-hgn6rb7Vg/post.aspx</link><category>Community</category><pubDate>Mon, 03 Jun 2013 02:46:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=f44709ab-5c74-45d7-80a1-29b91f179ff1</guid><description>&lt;p&gt;&lt;a href="http://www.postsharp.net/blog/image.axd?picture=27b10c2e5db05df7.jpg"&gt;&lt;img style="background-image: none; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 5px 0px 0px; display: inline; padding-right: 0px; border-width: 0px;" title="prague_flood" src="http://www.postsharp.net/blog/image.axd?picture=40433a2f5345191e.jpg" alt="prague_flood" width="403" height="269" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;When I first moved to Prague in 2004 I heard many tales from locals about the devastation caused by the &lt;/span&gt;&lt;span style="color: #000000;"&gt;floods of 2002 which &lt;/span&gt;&lt;span style="color: #000000;"&gt;killed 17 people, forced tens of thousands from their homes and caused several billion dollars of damage across the country.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;I heard tales of rescue: brave souls risking their own lives to save elderly neighbors and pets. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;Tales of losing it all: families without homes and cars; historic photo albums, artwork and libraries of books now gone forever.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;And tales of starting over: communities coming together in solidarity to rebuild their lives; a city slowly restoring to its former beauty, one street at a time.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;I remember thinking to myself, &amp;ldquo;thank god flooding like that only happens every 100 years.&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;Just yesterday, &lt;/span&gt;Czech Prime Minister Petr Necas declared a state of emergency for most of the nation as swollen rivers caused by days of heavy rain threatened Prague's historic center and forced evacuations from low-lying areas.&lt;/p&gt;
&lt;p&gt;And the waters are STILL rising.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;In an effort to support the beautiful city to which we call home, and all those affected by the current Prague flooding, &lt;strong&gt;PostSharp Technologies is donating 50% of all online purchases to a local flood relief fund from now until the state of emergency is lifted.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;Please keep the city of Prague and the Czech nation in your thoughts and prayers during this difficult time, and we will keep you updated on Twitter as news comes in.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;Now is our chance to be part of a new tale.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #000000;"&gt;-Britt&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=K-hgn6rb7Vg:3ysC5BFe4K0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=K-hgn6rb7Vg:3ysC5BFe4K0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=K-hgn6rb7Vg:3ysC5BFe4K0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=K-hgn6rb7Vg:3ysC5BFe4K0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/K-hgn6rb7Vg" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Britt King</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=f44709ab-5c74-45d7-80a1-29b91f179ff1</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=f44709ab-5c74-45d7-80a1-29b91f179ff1</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/PostSharp-Supports-Prague-Flood-Relief#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=f44709ab-5c74-45d7-80a1-29b91f179ff1</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=f44709ab-5c74-45d7-80a1-29b91f179ff1</feedburner:origLink></item><item><title>[Recording] Under the Hood of a Post-Compiler + Q&amp;A</title><link>http://feedproxy.google.com/~r/postsharp/~3/t5jeZG6K_po/post.aspx</link><category>Webinars</category><pubDate>Tue, 28 May 2013 00:02:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=b4127f52-2722-4d2b-9e48-d6f08edc79df</guid><description>&lt;p&gt;Tools like PostSharp, that manipulate the IL, can seem like black magic at first. However, the simple act of opening a decompiler changes all that. In this episode, Matt Groves shows how to decompile a .NET assembly and view code with/without a PostSharp aspect using Reflector to see exactly what’s being manipulated.&lt;/p&gt; &lt;p&gt;&lt;iframe height="460" src="http://player.vimeo.com/video/66891143?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;loop=1" frameborder="0" width="640" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;h2&gt;Q&amp;amp;A&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;Q: In your previous session, you used aspect boundaries to do something that could also be accomplished by method interception. What factors help to decide which way you should implement?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; The OnMethodBoundaryAspect offers higher performance because only a part of the calling context needs to be passed to the aspect. This is especially true with the aspect optimizer feature, included in PostSharp Pro and Ultimate, when the aspect does not consume a lot of context, for instance a transaction scope aspect. The benefit is reduced however if the aspect consumes a lot of context, for instance all argument values. The MethodInterceptionAspect is more powerful: you can invoke the intercepted method on a different thread, for instance. But it is slower because the whole calling context needs to be stored to the heap and passed to the aspect.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: How can I disable a PostSharp aspect temporarily?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; There are a number of ways to disable PostSharp from a specific project:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;In Visual Studio, open the project properties dialog, select the right configuration, open the &lt;span class="ui"&gt;PostSharp&lt;/span&gt; tab page, and change the value of the &lt;span class="ui"&gt;Disable PostSharp&lt;/span&gt; option.&lt;/p&gt; &lt;li&gt; &lt;p&gt;In Visual Studio, open the project properties dialog, select the right configuration, open the &lt;span class="ui"&gt;Build&lt;/span&gt; tab page, and add the conditional compilation symbol &lt;span class="literalValue"&gt;SkipPostSharp.&lt;/span&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;Define the MSBuild property &lt;span class="code"&gt;SkipPostSharp=True&lt;/span&gt;, for instance using the command line msbuild /p:SkipPostSharp=True.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Q: Which Aspects are serialized? &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Every aspect is serialized at compile time. You can &lt;a href="http://doc.postsharp.net/postsharp-3.0/##PostSharp-3.0.chm/html/f711d5da-5696-443c-9b42-e67a3d8b7b36.htm"&gt;find out more on aspect serialization&lt;/a&gt; in PostSharp documentation.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Is there deserialization during run-time?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, by using a decompiler you will see that PostSharp stores serialized aspects as resources, for instance the aspect I applied to the DoSomething method in the video, and an internal class does the work of deserializing the resources into an object. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Why are you using the objects (internal classes) instead of writing the code directly in the corresponding methods? Wouldn't that be more performant?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; This approach is named “aspect inlining”. It is more performant but more complex and less powerful (aspects code would need to be more limited).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: System.Diagnostics.Contracts also uses the post-compiler rewrite method to check state and assertions. Do PostSharp and Contracts work well together?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, they work well together. PostSharp runs after Code Contracts.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: It’s evident that PostSharp is heavily dependent on using .NET's underlying support for discovering and calling methods using Reflection. Are there any significant trade-offs or compromises in using Reflection so heavily?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; PostSharp does not rely on reflection to discover and call methods. The analysis is done completely at build time, and PostSharp generates code to call exactly the right methods. Reflection is only used if the aspects themselves use reflection. Even then, any use of reflection is optimized and cached.&lt;/td&gt;&lt;/p&gt; &lt;p&gt;Up next: &lt;strong&gt;Unit Testing &amp;amp; Thin Aspects&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The benefits of unit testing are numerous. When aspects are involved, Matt believes keeping them "thin" is key to keeping your code easy to unit test. Join us this Thursday as he explores some of the implications of unit testing when a post-compiler tool is involved.  &lt;p&gt;During this final episode in the AOP in .NET series, Matt will be joined by Gael Fraiteur, the creator of PostSharp, who has a differing opinion about the relevancy of "thin" aspects and will speak about a set of practices that can be used to create efficient tests of aspects.  &lt;p&gt;SPECIAL OFFER:  &lt;p&gt;The generous folks at Manning Publications are offering a 40% discount on Matt’s new book to all live webinar attendees. So, if you want to learn what difference AOP and PostSharp can make in your projects, and take advantage of Manning’s discount offer, be sure to join us for the last live webinar in this series.  &lt;p&gt;&lt;a href="https://www3.gotomeeting.com/register/189817950"&gt;Seats are limited and this head-to-head episode is sure to sell out so reserve your spot today.&lt;/a&gt;  &lt;p&gt;-Britt&lt;/p&gt;&lt;/td&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=t5jeZG6K_po:BphB6bXq-Hk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=t5jeZG6K_po:BphB6bXq-Hk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=t5jeZG6K_po:BphB6bXq-Hk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=t5jeZG6K_po:BphB6bXq-Hk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/t5jeZG6K_po" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Britt King</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=b4127f52-2722-4d2b-9e48-d6f08edc79df</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=b4127f52-2722-4d2b-9e48-d6f08edc79df</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Recording-Under-the-Hood-of-a-Post-Compiler-2b-QA#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=b4127f52-2722-4d2b-9e48-d6f08edc79df</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=b4127f52-2722-4d2b-9e48-d6f08edc79df</feedburner:origLink></item><item><title>[Recording] Before and After: Boundary Aspects</title><link>http://feedproxy.google.com/~r/postsharp/~3/G48lb5MWjp4/post.aspx</link><category>Webinars</category><pubDate>Mon, 27 May 2013 05:19:04 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=bf63a50b-8763-4077-ac29-cd89cd4d4673</guid><description>&lt;p&gt;Matthew Groves delivered part 3 of his 5-part live webinar series on AOP in .NET recently. The series covers insights &lt;a href="http://www.manning.com/groves/"&gt;found in his new book&lt;/a&gt; and a variety of real-world coding examples using PostSharp.&lt;/p&gt; &lt;p&gt;In part 3, Matt looks at a real-world application of a method boundary aspect to help with caching.– followed by a Q&amp;amp;A session.&lt;/p&gt; &lt;h2&gt;&lt;iframe height="460" src="http://player.vimeo.com/video/66550886?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;loop=1" frameborder="0" width="640" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt;&lt;/iframe&gt;&lt;/h2&gt; &lt;h2&gt;Q&amp;amp;A&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;Q: Is OnExit always executed and, if yes, is it before or after OnSucess or OnException?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Imagine an invisible Try, Catch and Finally surrounding your method, then picture OnExit as being inside the Finally block of that imaginary Try/Catch block. &lt;/p&gt; &lt;p&gt;I say imaginary but, in the next episode, we will look at decompile and assembly and you’ll see there is a real Try, Catch and Finally block being generated by PostSharp. So, OnExit will run after OnSuccess because the code and Finally runs after the code inside the Try block.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: In the cache example is the data saved in the cache again, and is OnSucess even called or is it skipped because of the FlowBehavior?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; When we set FlowBehavior to return that means OnSuccess, OnExit and OnException won’t be called at all. It will just return immediately and those boundaries won’t be executed, and it won’t be stored in the cache again.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Instead of using a Cache object instantiated inside the aspect, is it possible to inject an implementation of it?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; In my example I tightly coupled an aspect to a specific caching framework [ASP.NET cache]. If you’re suggesting I should inject a dependency so I’m working against an interface instead of directly against the ASP.NET cache, I agree with you.&amp;nbsp; We’ll talk more about that in the upcoming unit testing episode, because an important part of unit testing is not having those elements be tightly coupled.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: How do we refresh the cache? Say if the value we are pulling from DB (say Median income) is changing every 10-15 minutes how can I keep my data up to date?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; The answer depends on the caching framework you’re using. With ASP.NET cache it has a default expiration of around 20 minutes. You can change that if you’d like. In my example I set the cacheKey directly by writing:&lt;/p&gt;&lt;pre&gt;HttpContext.Current.Cache[cacheKey] = args.ReturnValue &lt;/pre&gt;
&lt;p&gt;You can also use the Add method: &lt;/p&gt;&lt;pre&gt;HttpContext.Current.Cache.Add()&lt;/pre&gt;
&lt;p&gt;Here I can add the key, the value, CacheDependency, absoluteExpiration time, slidingExpiration time, Priority, etc. So if the median income caches often, you may want to set it to expire more frequently than every 20 minutes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Are there some useful pre-built caching aspects in PostSharp?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; PostSharp 3 currently offers ready-made aspects to handle logging, INotifyPropertyChanged and multithreading. Ready-made caching is on the horizon. In the meantime, you may want to look at &lt;a href="http://cache.codeplex.com/"&gt;Attribute Based Caching&lt;/a&gt;, found on CodePlex, which uses PostSharp to handle many of the implementation practices talked about today.&lt;/td&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: In your upcoming book, will the examples/code work in PostSharp 2.1 or is the latest version 3 required?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; When I started writing the book PostSharp 3 wasn’t released yet so I mostly used version 2.1 to write the code. The coding examples however should work fine in either version.&lt;/p&gt;
&lt;p&gt;Up next: Matt Groves goes &lt;strong&gt;Under the Hood of a Post-Compiler&lt;/strong&gt;, showing how to decompile a .NET assembly and view code with and without a PostSharp aspect with Reflector.&lt;/p&gt;
&lt;p&gt;-Britt&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=G48lb5MWjp4:dhz3E3rA4Q0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=G48lb5MWjp4:dhz3E3rA4Q0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=G48lb5MWjp4:dhz3E3rA4Q0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=G48lb5MWjp4:dhz3E3rA4Q0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/G48lb5MWjp4" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Britt King</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=bf63a50b-8763-4077-ac29-cd89cd4d4673</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=bf63a50b-8763-4077-ac29-cd89cd4d4673</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Recording-Before-and-After-Boundary-Aspects#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=bf63a50b-8763-4077-ac29-cd89cd4d4673</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=bf63a50b-8763-4077-ac29-cd89cd4d4673</feedburner:origLink></item><item><title>[Recording] Call This Instead: Intercepting Methods</title><link>http://feedproxy.google.com/~r/postsharp/~3/jZ5koQvg2_M/post.aspx</link><category>Webinars</category><pubDate>Tue, 21 May 2013 06:08:21 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=feefe512-cca9-441e-8926-ca8b99b5b4d6</guid><description>&lt;p&gt;Matthew Groves delivered part 2 of his 5-part live webinar series on AOP in .NET recently to support his upcoming book &lt;a href="http://www.manning.com/groves/"&gt;Aspect Oriented Programming in .NET&lt;/a&gt;, out from Manning Publications in June.&amp;nbsp; The series covers insights found in his book and a variety of real-world coding examples using PostSharp.&lt;/p&gt; &lt;p&gt;In part 2, Matt demonstrates the method interception aspect, and looks at a real-world application of the aspect that can help with data transactions – followed by a lively Q&amp;amp;A session.&lt;/p&gt; &lt;h2&gt;&lt;iframe height="460" src="http://player.vimeo.com/video/65892477?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;loop=1" frameborder="0" width="640" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt;&lt;/iframe&gt;&lt;/h2&gt; &lt;h2&gt;Q&amp;amp;A&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;Q: With the use of Aspect Interceptors, does the behavior of stepping through and debugging the code in either the Interceptor or calling code change?&amp;nbsp; If so, how?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; With PostSharp, debugging works great! When PostSharp rewrites your code with IL manipulation it also makes appropriate changes to the debugging file. Which means, if you set a breakpoint in an aspect or in a method that has an aspect on it, that breakpoint will be hit when expected and you’ll get the full stack with that as well.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Can you put a PostSharp attribute on an aspect’s method?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;No.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Can we apply interceptors globally to all the methods in a class?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Absolutely. You can apply the attribute to the class and by default it will be applied to every method within that class. There are &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/a5abdee8-ade1-45b4-b908-165ca1e03425.htm" target="_blank"&gt;lots of customization available&lt;/a&gt; with PostSharp. You can customize how you want the attributes to be applied – even at assembly level.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Is it possible to apply an aspect to DLL methods to which you don’t have the source?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; In theory yes, but this scenario is not supported so you will be on your own in case of problem.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Can we apply multiple aspects to a given method, and in what order are they executed?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; In some situations, for instance if you have caching and authorization, the order in which the aspect is applied is very important. PostSharp gives us a few ways to deal with that. The simplest one is called &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/P_PostSharp_Aspects_Aspect_AspectPriority.htm" target="_blank"&gt;AspectPriority&lt;/a&gt; where you specify a number to indicate the order in which aspects are run, and there are &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/30402cd7-58ab-49ac-8f5c-65f510174daf.htm" target="_blank"&gt;more robust features&lt;/a&gt; that PostSharp has as well to manage dependencies between aspects and aspect composition.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: What are some other examples of practical uses of aspects?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;&lt;a href="http://www.postsharp.net/aspects/examples/logging"&gt;Logging&lt;/a&gt;, &lt;a href="http://www.postsharp.net/aspects/examples/transaction"&gt;data transactions&lt;/a&gt;, &lt;a href="http://www.postsharp.net/media/tutorials/caching-1"&gt;caching&lt;/a&gt;, &lt;a href="http://www.postsharp.net/aspects/examples/inotifypropertychanged"&gt;INotifyPropertyChanged&lt;/a&gt;, &lt;a href="http://www.postsharp.net/aspects/examples/exception-handling"&gt;exception handling&lt;/a&gt;, &lt;a href="http://www.postsharp.net/aspects/examples/security"&gt;authorization&lt;/a&gt;, &lt;a href="http://www.postsharp.net/architecture/custom-architectural-constraints"&gt;validation&lt;/a&gt;, etc. In fact, &lt;a href="http://www.postsharp.net/purchase"&gt;PostSharp Ultimate comes with a whole suite of aspects&lt;/a&gt; that have been written for you. It’s a new feature in PostSharp 3 so you don’t have to spend time writing these aspects and can simply drop them in and start using them right away.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Can you add an Attribute to a parent object and have it apply to all child objects?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;Yes, using &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/42748720-e440-487a-a332-4c6b447d349c.htm" target="_blank"&gt;aspect inheritance&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Will you show how to TDD aspects in this series, and do you show it in your book?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Not TDD specifically, but I have dedicated an entire chapter of my book to unit testing aspects and episode 5 in the series (May 30th) will focus on that.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Does the aspect class name need to end with Attribute, as per .NET convention?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;No, it’s not necessary. As long as you inherit from the Attribute base class, .NET will recognize it as an Attribute.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Can you use PostSharp in Windows Phone 7 applications?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: What are the best practices for bringing dependencies into aspects?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A: &lt;/strong&gt;That question will be covered at length during the Unit Testing Aspects episode on May 30th.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: When will your book be published?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; June 14th.&lt;/p&gt; &lt;p&gt;If you want to ask Matt any question you may have about AOP in .NET and/or PostSharp be sure to sign-up for the series and &lt;a href="https://www3.gotomeeting.com/register/189817950"&gt;join us every Thursday throughout the month of May.&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=jZ5koQvg2_M:-ljOzhkYcXc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=jZ5koQvg2_M:-ljOzhkYcXc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=jZ5koQvg2_M:-ljOzhkYcXc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=jZ5koQvg2_M:-ljOzhkYcXc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/jZ5koQvg2_M" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=feefe512-cca9-441e-8926-ca8b99b5b4d6</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=feefe512-cca9-441e-8926-ca8b99b5b4d6</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Recording-Call-This-Instead-Intercepting-Methods#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=feefe512-cca9-441e-8926-ca8b99b5b4d6</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=feefe512-cca9-441e-8926-ca8b99b5b4d6</feedburner:origLink></item><item><title>[Recording] You May Already Be Using AOP</title><link>http://feedproxy.google.com/~r/postsharp/~3/dfl_VjrUVtQ/post.aspx</link><category>Webinars</category><pubDate>Fri, 10 May 2013 03:55:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=b2b2929b-58f8-49e5-a43f-ad5f483cfacb</guid><description>&lt;p&gt;Last Thursday our good friend Matthew Groves delivered part 1 of his 5-part live webinar series on AOP in .NET. He has a new book coming out next month called &lt;a href="http://www.manning.com/groves/"&gt;Aspect Oriented Programming in .NET&lt;/a&gt; from Manning Publications and the series will cover some of the practical AOP insights found in his book and a variety of real-world coding examples using PostSharp.&lt;/p&gt; &lt;p&gt;In part 1, Matt does an excellent job of demonstrating the basics of Aspect-Oriented Programming, including a number of live coding examples using ASP.NET and PostSharp – all in under 30 minutes.&lt;/p&gt; &lt;h2&gt;&lt;iframe height="460" src="http://player.vimeo.com/video/65376339?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;loop=1" frameborder="0" width="640" mozallowfullscreen webkitallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;/h2&gt; &lt;h2&gt;Q&amp;amp;A&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;Q: Can you provide any hints on unit testing with aspects involved?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; We’re going to talk about unit testing aspects – unit testing code that aspects are applied to – &lt;a href="https://www3.gotomeeting.com/register/189817950"&gt;in part 5 of this series [May 30th].&lt;/a&gt; In fact, I have dedicated an entire chapter of my book to unit testing aspects.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Q: Is PostSharp the only AOP framework covered in your book?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; My book is focused on AOP in .NET and PostSharp is a large part of that but I cover other .NET tools like Castle DynamicProxy and the ASP.NET examples [shown in the video]. The idea is that once you learn the principles of AOP, you will be comfortable using tools other than what’s covered in the book. So anything you learn about PostSharp or Castle you can apply to other frameworks as well.&lt;/p&gt; &lt;p&gt;I will be adding new recordings each week but, if you want to catch them live and have the chance to ask Matt any question you may have about AOP in .NET and/or PostSharp be sure to sign-up for the series and &lt;a href="https://www3.gotomeeting.com/register/189817950"&gt;join us every Thursday throughout the month of May.&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=dfl_VjrUVtQ:SqP3rCKhGws:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=dfl_VjrUVtQ:SqP3rCKhGws:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=dfl_VjrUVtQ:SqP3rCKhGws:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=dfl_VjrUVtQ:SqP3rCKhGws:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/dfl_VjrUVtQ" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Britt King</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=b2b2929b-58f8-49e5-a43f-ad5f483cfacb</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=b2b2929b-58f8-49e5-a43f-ad5f483cfacb</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Recording-You-May-Already-Be-Using-AOP#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=b2b2929b-58f8-49e5-a43f-ad5f483cfacb</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=b2b2929b-58f8-49e5-a43f-ad5f483cfacb</feedburner:origLink></item><item><title>Announcing PostSharp 3 RTM</title><link>http://feedproxy.google.com/~r/postsharp/~3/54l5XK6H6ZQ/post.aspx</link><category>Annoucements</category><pubDate>Fri, 03 May 2013 04:50:05 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=cb7bd5e3-ea0e-4db7-92bc-0bf98e6a9873</guid><description>&lt;p&gt;We’re excited to announce that PostSharp 3 RTM is now available for download from &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f8-a308-c3bdfdd0be4a" target="_blank"&gt;Visual Studio Gallery&lt;/a&gt; and &lt;a href="https://www.nuget.org/packages/PostSharp/" target="_blank"&gt;NuGet&lt;/a&gt;. After a successful RC cycle, PostSharp 3 now enters the stable quality band and replaces PostSharp 2.1 as our featured version.&lt;/p&gt; &lt;p&gt;PostSharp 3 marks a huge evolution from previous versions. Designed to deliver more value with less learning, PostSharp 3 is now much more than an awesome framework: using simple &lt;strong&gt;smart tags in the Visual Studio code editor&lt;/strong&gt;, you can add to your code &lt;strong&gt;ready-made implementations&lt;/strong&gt; of some of the most common design patterns. Other improvements include first-class support for Windows Store, Windows Phone and Silverlight apps.&lt;/p&gt; &lt;h2&gt;Improved Visual Studio Integration&lt;/h2&gt; &lt;p&gt;The single most striking feature of PostSharp 3 is its deeper integration with Visual Studio.  &lt;p&gt;For instance, move the caret to the name of a class or a method. Visual Studio will display a smart tag proposing actions that make sense in the current context: apply a threading model, add logging, implement INotifyPropertyChanged, …  &lt;p&gt;&amp;nbsp; &lt;img src="http://www.postsharp.net/Design/images/howto/DetailedTracing1.PNG"&gt;  &lt;p&gt;A wizard then guides you through the configuration of the aspect.  &lt;p&gt;&lt;img src="http://www.postsharp.net/Design/images/howto/DetailedTracing2.PNG" width="641" height="499"&gt;  &lt;p&gt;The wizard installs all required NuGet packages and generates the code for you – so you don’t have to study documentation to figure out how it works.  &lt;p&gt;Of course, you can still add aspects to your code the old good way.  &lt;h2&gt;Ready-Made Pattern Implementations&lt;/h2&gt; &lt;p&gt;While talking to customers, we figured out that the Pareto law also applies to our product: 80% of customers use the same top 20% aspects. We thought we would provide more value to our customers by providing ready-made implementations for the most common patterns. The results are our three first pattern libraries:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.postsharp.net/model" target="_blank"&gt;Model Pattern Library&lt;/a&gt;: INotifyPropertyChanged, Code Contracts (Not Null, Positive, …)  &lt;li&gt;&lt;a href="http://www.postsharp.net/diagnostics" target="_blank"&gt;Diagnostics Pattern Library&lt;/a&gt;: Logging to log4net, nlog, Enterprise Library  &lt;li&gt;&lt;a href="http://www.postsharp.net/threading" target="_blank"&gt;Threading Pattern Library&lt;/a&gt;: Thread dispatching, actor threading model, reader-writer synchronized threading model, verification of thread-unsafe objects &lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Windows Store, Windows Phone and Silverlight&lt;/h2&gt; &lt;p&gt;In previous versions of PostSharp, support for alien .NET platforms was quite limited. The raise of Windows Phone and Windows Store stressed the importance of supporting new trends, so we decided to invest in providing first-class support for Windows Store, Windows Store and Silverlight.&lt;/p&gt; &lt;p&gt;I’m very pleased that we could this through Portable Class Libraries.&lt;/p&gt; &lt;p&gt;The first challenge was to develop a portable alternative to the system BinaryFormatter and its&amp;nbsp; [Serializable] attribute. The result is the &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/T_PostSharp_Serialization_PortableFormatter.htm" target="_blank"&gt;PortableFormatter&lt;/a&gt; class and its [PSerializable] attribute – an interesting piece of software in itself.&lt;/p&gt; &lt;h2&gt;Deployment through NuGet and Visual Studio Gallery&lt;/h2&gt; &lt;p&gt;When PostSharp 1 was released seven years ago, it seemed mandatory to have a setup program. Over the years, source control and build servers have conquered the world, changing requirements on deployment of development tools. &lt;/p&gt; &lt;p&gt;Despites important limitations, Microsoft’s NuGet and Visual Studio Gallery are becoming the de-facto standards for deployment of development components and their user interface, so we decide to get aligned with Microsoft’s lead.&lt;/p&gt; &lt;p&gt;We are aware of some negative consequences and will be happy to work with customers who may be affected by this choice. &lt;/p&gt; &lt;h2&gt;Subscription-Based Maintenance Model&lt;/h2&gt; &lt;p&gt;PostSharp 3 marks also the move from a per-version to a per-year maintenance model, as described in &lt;a href="http://www.postsharp.net/blog/post/PostSharp-3-Licenses-Available.aspx" target="_blank"&gt;a previous blog post&lt;/a&gt;. A maintenance subscription is now included as a mandatory part of the product fee. The maintenance subscription not only gives right to major versions, but also to bug fixes.&lt;/p&gt; &lt;p&gt;We believe that part of our failure to deliver support for Visual Studio 2012 in time was due to our per-version revenue model. The new revenue model will allow us to release features as soon as they are needed, irrespective of the current major version number.&lt;/p&gt; &lt;p&gt;For more information regarding licensing and support, please read our &lt;a href="http://www.postsharp.net/purchase/faq" target="_blank"&gt;FAQ page&lt;/a&gt; or &lt;a href="http://www.postsharp.net/company" target="_blank"&gt;contact our sales team&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Tip: Upgrade Before Summer&lt;/h2&gt; &lt;p&gt;PostSharp 3 is now stable and it’s a good time to upgrade. During the next 2 months, the team will be ready to answer your questions and address support issues, without any other big project in the pipeline. We may be a bit slower during the vacation period, so it’s a good idea not to delay the upgrade if you can do it now.&lt;/p&gt; &lt;p&gt;PostSharp 3 is a big turn for our company, and so far we are very happy with the feedback and the businesses we received.&lt;/p&gt; &lt;p&gt;Happy PostSharping!&lt;/p&gt; &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=54l5XK6H6ZQ:9o3a45Loi98:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=54l5XK6H6ZQ:9o3a45Loi98:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=54l5XK6H6ZQ:9o3a45Loi98:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=54l5XK6H6ZQ:9o3a45Loi98:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/54l5XK6H6ZQ" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=cb7bd5e3-ea0e-4db7-92bc-0bf98e6a9873</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=cb7bd5e3-ea0e-4db7-92bc-0bf98e6a9873</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Announcing-PostSharp-3-RTM#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=cb7bd5e3-ea0e-4db7-92bc-0bf98e6a9873</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=cb7bd5e3-ea0e-4db7-92bc-0bf98e6a9873</feedburner:origLink></item><item><title>[Action Required] Imminent update of PostSharp NuGet package</title><link>http://feedproxy.google.com/~r/postsharp/~3/iQjnvnchH2U/post.aspx</link><pubDate>Tue, 30 Apr 2013 03:02:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=3f2c814f-f03b-40af-8a4c-d92f01b2dfd2</guid><description>&lt;p&gt;It&amp;rsquo;s official: PostSharp 3 RC was a success and we are scheduling to move PostSharp 3 to the &amp;ldquo;stable&amp;rdquo; quality band on May 2nd. That means that, on May 2nd, &lt;strong&gt;the stable release of the PostSharp package on NuGet will be version 3.0&lt;/strong&gt;. Because of the way the NuGet client is implemented and how people usually author their NuGet packages, this day may turn into a little apocalypse for some of you.&lt;/p&gt;
&lt;h2&gt;Problem 1. NuGet client in Visual Studio&lt;/h2&gt;
&lt;p&gt;The NuGet user interface in Visual Studio is hardwired to always give you the latest stable version of a Package. There is no way to specify that you want to stay in an old branch. Even if &lt;a href="http://docs.nuget.org/docs/Reference/Versioning" target="_blank"&gt;NuGet allegedly supports semantic versioning&lt;/a&gt;, NuGet is going to try to upgrade you to a new major version even if it not backward compatible with the old one (semantic versioning says &lt;a href="http://semver.org/" target="_blank"&gt;that backward compatibility can be broken&lt;/a&gt; when the major version number changes).&lt;/p&gt;
&lt;p&gt;However, PostSharp 3 is not fully backward-compatible with PostSharp 2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There are very minor API changes, and&lt;/li&gt;
&lt;li&gt;You will need to acquire a new license&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Action Required:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pay attention when upgrading using the NuGet user interface.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Consider using the NuGet PowerShell console with the &lt;strong&gt;-Version&lt;/strong&gt; flag to specify which version you want to install, for instance:&lt;br /&gt;
&lt;pre&gt;Install-Package PostSharp -Version 2.1.7.30&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Consider using &lt;a href="http://inedo.com/company/news/announcing-proget-20-and-proget-client-tools" target="_blank"&gt;ProGet Client Tools&lt;/a&gt;, an alternative to NuGet Client Tools that has not been optimized for for pushing the latest fresh bits to your desk, but to protect your build your breaking changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Problem 2. Packages with dependencies on PostSharp&lt;/h2&gt;
&lt;p&gt;NuGet packages that have a dependency on PostSharp 2 may install incorrectly after the PostSharp 3 release because NuGet is going to install PostSharp 3 instead of PostSharp 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Action Required:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To prevent NuGet from installing PostSharp 3, you need to edit your .nuspec file and add an upper bound to the PostSharp version:&lt;/p&gt;
&lt;pre&gt;&amp;lt;dependency id="PostSharp" version="[2.1,3)" /&amp;gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s it. Happy PostSharping!&lt;/p&gt;
&lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=iQjnvnchH2U:Az2g9_FIj0w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=iQjnvnchH2U:Az2g9_FIj0w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=iQjnvnchH2U:Az2g9_FIj0w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=iQjnvnchH2U:Az2g9_FIj0w:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/iQjnvnchH2U" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=3f2c814f-f03b-40af-8a4c-d92f01b2dfd2</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=3f2c814f-f03b-40af-8a4c-d92f01b2dfd2</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Done28099t-let-NuGet-break-your-build-with-the-upcoming-PostSharp-3-release#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=3f2c814f-f03b-40af-8a4c-d92f01b2dfd2</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=3f2c814f-f03b-40af-8a4c-d92f01b2dfd2</feedburner:origLink></item><item><title>Unit Testing of Aspects</title><link>http://feedproxy.google.com/~r/postsharp/~3/0ugZxWH8cSI/post.aspx</link><pubDate>Fri, 26 Apr 2013 08:55:23 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=3d500565-c967-4168-b3a8-6991e4a87ec4</guid><description>&lt;p&gt;If there’s one topic that is subject to almost religious observance, this is unit testing. &lt;/p&gt; &lt;p&gt;There has been much hesitation in the community about how PostSharp aspects should be tested and how aspects can consume dependencies from a dependency injection container. &lt;/p&gt; &lt;p&gt;Obviously, we have a lot of experience testing aspects. I finally took the time to write down a set of practices that can be used to &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/2ad6cf92-08eb-4537-a434-d88a3e493721.htm" target="_blank"&gt;create efficient tests of aspects&lt;/a&gt;. I also show techniques that allow aspects to &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/b57d32e9-f760-4fd2-9a2c-af41a1f00430.htm" target="_blank"&gt;consume services&lt;/a&gt; from a dependency injection container. Last but not least, I publish and document a &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/0264eebb-4e36-494c-bc8c-248c9d2c305c.htm" target="_blank"&gt;test framework for aspect build-time logic&lt;/a&gt;, especially logic emitting build-time errors and warnings. The framework is derived from the one we are using internally.&lt;/p&gt; &lt;p&gt;More on our &lt;a href="http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/2ad6cf92-08eb-4537-a434-d88a3e493721.htm" target="_blank"&gt;online documentation&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Happy PostSharping!&lt;/p&gt; &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=0ugZxWH8cSI:1nLfSTmu2UM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=0ugZxWH8cSI:1nLfSTmu2UM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=0ugZxWH8cSI:1nLfSTmu2UM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=0ugZxWH8cSI:1nLfSTmu2UM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/0ugZxWH8cSI" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=3d500565-c967-4168-b3a8-6991e4a87ec4</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=3d500565-c967-4168-b3a8-6991e4a87ec4</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Unit-Testing-of-Aspects#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=3d500565-c967-4168-b3a8-6991e4a87ec4</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=3d500565-c967-4168-b3a8-6991e4a87ec4</feedburner:origLink></item><item><title>Conceptual Documentation Available in Print-Ready PDF</title><link>http://feedproxy.google.com/~r/postsharp/~3/tz0LqCLj1v4/post.aspx</link><pubDate>Fri, 26 Apr 2013 05:43:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=3c17af9a-317d-44d5-86e5-3e78567df5a0</guid><description>&lt;p&gt;Some of you expressed the wish of to be able to read the PostSharp documentation offline on their tablet or ebook reader, so we did it. Our conceptual documentation is now available as a &lt;a href="http://www.postsharp.net/downloads/documentation/PostSharp-3.0.pdf" target="_blank"&gt;print-ready PDF document&lt;/a&gt;, and looks awesome on screen and paper. &lt;/p&gt; &lt;p&gt;It’s incredible the content renders to 140 pages, and it does not even include the class reference, which is still only available &lt;a href="http://doc.postsharp.net/" target="_blank"&gt;online&lt;/a&gt; or for download as a &lt;a href="http://www.postsharp.net/downloads/documentation/PostSharp-3.0.chm" target="_blank"&gt;CHM&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;But there’s an issue: although it looks like a book, it has been designed as a reference document and is not the best introduction to PostSharp. &lt;a href="http://www.postsharp.net/support" target="_blank"&gt;Online tutorials&lt;/a&gt; are still the preferred way to get started, and they are not included in the PDF.&lt;/p&gt; &lt;p&gt;Happy PostSharping!&lt;/p&gt; &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=tz0LqCLj1v4:f5v8MtxBors:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=tz0LqCLj1v4:f5v8MtxBors:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=tz0LqCLj1v4:f5v8MtxBors:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=tz0LqCLj1v4:f5v8MtxBors:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/tz0LqCLj1v4" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=3c17af9a-317d-44d5-86e5-3e78567df5a0</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=3c17af9a-317d-44d5-86e5-3e78567df5a0</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Conceptual-Documentation-Available-in-Print-Ready-PDF#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=3c17af9a-317d-44d5-86e5-3e78567df5a0</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=3c17af9a-317d-44d5-86e5-3e78567df5a0</feedburner:origLink></item><item><title>Live Webinar Series with Matthew Groves</title><link>http://feedproxy.google.com/~r/postsharp/~3/egfcTRVUN4M/post.aspx</link><category>Webinars</category><pubDate>Fri, 26 Apr 2013 05:30:00 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=3bdd03bb-cfbc-4a83-a77f-6c769b6474c5</guid><description>&lt;p&gt;Mark your calendar for Thursdays in May as we kickoff a new series of live webinars with our good friend, &lt;a href="http://www.postsharp.net/community/profile?id=a7bab0bc-a071-df11-b4ed-000ae4881457-4187c618"&gt;Matthew Groves&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Matt is a developer with over 10 years of professional experience in education, consulting, and product development. He concentrates on web applications, using C# with ASP.NET, JavaScript, and PHP. &lt;/p&gt; &lt;p&gt;His new book &lt;a href="http://www.manning.com/groves/"&gt;Aspect Oriented Programming in .NET&lt;/a&gt; from Manning Publications debuts in June and we’ve put together a 5-part webinar series that will give you a taste of the practical aspect-oriented programming insights found in his book and a variety of real-world coding examples as implemented by PostSharp. &lt;/p&gt; &lt;p&gt;Read on to learn more about the upcoming schedule and a special offer from Manning Publications. &lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;a href="https://www3.gotomeeting.com/register/189817950"&gt;Sign-up for the PostSharp live webinar series today &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;SCHEDULE:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1) You May Already Be Using AOP&lt;/strong&gt;&lt;strong&gt; &lt;br&gt;&lt;/strong&gt;Thursday, May 2nd at 9:00 AM PDT |12:00 PM EDT | 4:00 PM GMT&lt;/p&gt; &lt;p&gt;Learn the basics of Aspect-Oriented Programming and see live coding examples of AOP frameworks that come with ASP.NET. We will also look at how to write a simple PostSharp aspect using a pattern that is similar to the ASP.NET framework. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;2) Call This Instead: Intercepting Methods &lt;br&gt;&lt;/strong&gt;Thursday, May 9th at 9:00 AM PDT |12:00 PM EDT | 4:00 PM GMT&lt;/p&gt; &lt;p&gt;One of the most common types of aspect is the method interception aspect, which runs a piece of code instead of the intended method. In this episode, we will look at a real-world application of the method interception aspect that can help with data transactions. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;3) Before and After: Boundary Aspects &lt;br&gt;&lt;/strong&gt;Thursday, May 16th at 9:00 AM PDT| 12:00 PM EDT | 4:00 PM GMT&lt;/p&gt; &lt;p&gt;A PostSharp method boundary aspect can execute code at its borders (e.g. before a method, after a method, on exception). In this episode, we will look at a real-world application of a method boundary aspect to help with caching. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;4) Under the Hood of a Post-Compiler &lt;br&gt;&lt;/strong&gt;Thursday, May 23rd at 9:00 AM PDT| 12:00 PM EDT | 4:00 PM GMT&lt;/p&gt; &lt;p&gt;The details of how a post-compiler like PostSharp works can be complex, but it's important to have a basic understanding of what's happening in order to make an informed decision about where and when to use it. In this episode, we will look at how to decompile a .NET assembly and view code with/without a PostSharp aspect with ILSpy. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;5) Unit Testing and Thin Aspects &lt;br&gt;&lt;/strong&gt;Thursday, May 30th at 9:00 AM PDT| 12:00 PM EDT | 4:00 PM GMT&lt;/p&gt; &lt;p&gt;The benefits of unit testing are numerous. When aspects are involved, keeping those aspects "thin" is a key to keeping your code easy to unit test. In the final episode we will explore some of the implications of unit testing when a post-compiler tool is involved. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;SPECIAL OFFER:&lt;/p&gt; &lt;p&gt;Now there's even more reason to attend Matt's webinar series. The generous folks at Manning Publications are offering a &lt;strong&gt;big discount&lt;/strong&gt; on AOP in .NET to all live webinar attendees. Seats are limited and this series is sure to sell out so reserve your spot today.&lt;/p&gt; &lt;p&gt;If you want to learn what difference AOP and PostSharp can make in your projects, and take advantage of Manning’s special discount offer, join us every Thursday throughout the month of May.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="https://www3.gotomeeting.com/register/189817950"&gt;Reserve your seat for the PostSharp live webinar series now &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=egfcTRVUN4M:0bj05avohLw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=egfcTRVUN4M:0bj05avohLw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=egfcTRVUN4M:0bj05avohLw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=egfcTRVUN4M:0bj05avohLw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/egfcTRVUN4M" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Britt King</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=3bdd03bb-cfbc-4a83-a77f-6c769b6474c5</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=3bdd03bb-cfbc-4a83-a77f-6c769b6474c5</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Live-Webinar-Series-with-Matthew-Groves#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=3bdd03bb-cfbc-4a83-a77f-6c769b6474c5</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=3bdd03bb-cfbc-4a83-a77f-6c769b6474c5</feedburner:origLink></item><item><title>Announcing PostSharp 3 RC</title><link>http://feedproxy.google.com/~r/postsharp/~3/Nk20JadEl30/post.aspx</link><category>Annoucements</category><pubDate>Tue, 16 Apr 2013 23:56:09 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=63090129-83a2-40d3-be1a-5a4b75f635bc</guid><description>&lt;p&gt;We’re happy to announce that PostSharp 3 has finally reached the RC quality band. This means that it is now sufficiently documented, internal testing is completed, all known bugs (except some minor ones) have been fixed, and the rate of new bug reports has significantly decreased. We plan to move to RTW with two weeks, unless important bugs delay this objective.&lt;/p&gt; &lt;p&gt;It is now a good time for small teams to upgrade to the new versions. The procedure is described in &lt;a href="http://doc.postsharp.net/postsharp-3.0/##PostSharp-3.0.chm/html/1530becd-2bf4-470e-9e8e-31c16fdd01ec.htm" target="_blank"&gt;our online documentation&lt;/a&gt;. We are planning more articles and webinars regarding upgrades and deployment of PostSharp 3 in the next weeks.&lt;/p&gt; &lt;p&gt;Happy PostSharping!&lt;/p&gt; &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=Nk20JadEl30:a7kb5-6q4Yc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=Nk20JadEl30:a7kb5-6q4Yc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=Nk20JadEl30:a7kb5-6q4Yc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Nk20JadEl30:a7kb5-6q4Yc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/Nk20JadEl30" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=63090129-83a2-40d3-be1a-5a4b75f635bc</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=63090129-83a2-40d3-be1a-5a4b75f635bc</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Announcing-PostSharp-3-RC#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=63090129-83a2-40d3-be1a-5a4b75f635bc</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=63090129-83a2-40d3-be1a-5a4b75f635bc</feedburner:origLink></item><item><title>PostSharp 3 Documentation Online</title><link>http://feedproxy.google.com/~r/postsharp/~3/8dydScxlhHM/post.aspx</link><category>Annoucements</category><pubDate>Wed, 27 Mar 2013 06:58:01 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=b6ddd0a1-6317-4dc8-bc99-a055017e9142</guid><description>&lt;p&gt;We reached one of the last milestones before the RC: publishing the documentation! You can now browse it online from &lt;a title="http://doc.postsharp.net/" href="http://doc.postsharp.net/"&gt;http://doc.postsharp.net/&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Yet this is not a good time for all of you to rush on PostSharp 3 because I’ll have vacation (till April 7th) before the dead march to RTM. Support will be provided as usually, but we won’t do bug fixing releases until I’m back.&lt;/p&gt; &lt;p&gt;I like to write the documentation myself because it forces me to do a last API review and makes sure all concepts line up. Documenting is a never-ending job, and I hope this first version of the documentation cover the most important questions. Yet, there are still important holes. Let me know if you find one that is specially important to you, so I can prioritize.&lt;/p&gt; &lt;p&gt;This being done, the road is now clear for RC and then RTM. Finally!&lt;/p&gt; &lt;p&gt;Happy PostSharping!&lt;/p&gt; &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=8dydScxlhHM:kXDxpg3UQDs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=8dydScxlhHM:kXDxpg3UQDs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=8dydScxlhHM:kXDxpg3UQDs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=8dydScxlhHM:kXDxpg3UQDs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/8dydScxlhHM" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=b6ddd0a1-6317-4dc8-bc99-a055017e9142</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=b6ddd0a1-6317-4dc8-bc99-a055017e9142</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/PostSharp-3-Documentation-Online#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=b6ddd0a1-6317-4dc8-bc99-a055017e9142</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=b6ddd0a1-6317-4dc8-bc99-a055017e9142</feedburner:origLink></item><item><title>Upgrading from PostSharp 3.0.12 to 3.0.13</title><link>http://feedproxy.google.com/~r/postsharp/~3/QzbyRFBIK1k/post.aspx</link><category>General</category><pubDate>Thu, 21 Mar 2013 09:19:53 PDT</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=2eadf156-9e30-498e-a8bd-b3818c7529b6</guid><description>&lt;p&gt;We just pushed PostSharp 3.0.13 online, and this is just to inform you of the awful update procedure from previous builds.&lt;/p&gt; &lt;h2&gt;Why is the upgrade procedure cumbersome?&lt;/h2&gt; &lt;p&gt;PostSharp 3.0.12 included NuGet 2.1 in its payload. Unfortunately, because of limitations of the Visual Studio Extension Installer (VsixInstaller), it was not possible to install PostSharp when NuGet 2.2 was already installed. We had other problems with the way that VsixInstaller handled dependencies (I’m quite confident to say that it is a broken feature), so we decided to handle dependencies manually, without relying on VsixInstaller.&lt;/p&gt; &lt;p&gt;Because of the dependency to NuGet, PostSharp needed to be installed for All Users, requiring elevation during installation. But since we don’t have the dependency to NuGet anymore, PostSharp does not need to be installed with elevated privileges anymore. This is one more situation that VsixInstaller does not handle properly.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;/h2&gt; &lt;h2&gt;What is the proper procedure?&lt;/h2&gt; &lt;p&gt;Since Visual Studio Extension Installer is not able to upgrade PostSharp 3.0.12 to 3.0.13, you will have to uninstall PostSharp manually.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Start Visual Studio &lt;em&gt;with elevated privileges&lt;/em&gt;.&lt;/li&gt; &lt;li&gt;Go to Tools / Extensions and Updates, click on PostSharp, then click Uninstall&lt;/li&gt; &lt;li&gt;Install the new PostSharp&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;That’s it. Perhaps that was not so awful.&lt;/p&gt; &lt;p&gt;Remember that this procedure updates only the Visual Studio Extension for PostSharp. You can upgrade the compiler itself using NuGet.&lt;/p&gt; &lt;p&gt;Happy PostSharping!&lt;/p&gt; &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=QzbyRFBIK1k:n95PbOj7gX4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=QzbyRFBIK1k:n95PbOj7gX4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=QzbyRFBIK1k:n95PbOj7gX4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=QzbyRFBIK1k:n95PbOj7gX4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/QzbyRFBIK1k" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=2eadf156-9e30-498e-a8bd-b3818c7529b6</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=2eadf156-9e30-498e-a8bd-b3818c7529b6</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Upgrading-from-PostSharp-3012-to-3013#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=2eadf156-9e30-498e-a8bd-b3818c7529b6</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=2eadf156-9e30-498e-a8bd-b3818c7529b6</feedburner:origLink></item><item><title>PostSharp 3 Licenses Now Available</title><link>http://feedproxy.google.com/~r/postsharp/~3/TytjD9FpRZk/post.aspx</link><category>Annoucements</category><pubDate>Fri, 08 Mar 2013 03:23:36 PST</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=ec721e5b-4e32-45be-bfef-8b5f80d2398b</guid><description>&lt;p&gt;It's been a few days since we released our new website. Although PostSharp 3 is still in preview, we've become confident enough in its quality to start selling licenses – with a 30% discount until we reach RTM. I wanted to quickly tell you about changes made to the PostSharp product lineup, including maintenance, pricing, and upgrade conditions. &lt;/p&gt; &lt;h2&gt;New focus on design patterns&lt;/h2&gt; &lt;p&gt;In the past years, we've successfully positioned PostSharp as the leading framework for Aspect-Oriented Programming in .NET. With time and customer feedback, we've realized that AOP was only an instrument serving automation and enforcement of design patterns. Unlike AOP, design patterns are readily understood and accepted by the majority. We published our view of Design Pattern Automation in a &lt;a href="http://www.infoq.com/articles/Design-Pattern-Automation"&gt;recent article on InfoQ&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;PostSharp is now composed of the following members:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;b&gt;Pattern Libraries&lt;/b&gt; are ready-made solutions to the most common design patterns. We currently offer the &lt;a href="http://www.postsharp.net/diagnostics"&gt;Diagnostics Pattern Library&lt;/a&gt;, &lt;a href="http://www.postsharp.net/threading"&gt;Threading Pattern Library&lt;/a&gt;, and &lt;a href="http://www.postsharp.net/model"&gt;Model Pattern Library&lt;/a&gt;.  &lt;li&gt;The &lt;a href="http://www.postsharp.net/aspects"&gt;Aspect Framework&lt;/a&gt; allows you to automate implementation of custom design patterns.  &lt;li&gt;The &lt;a href="http://www.postsharp.net/architecture"&gt;Architecture Framework&lt;/a&gt; allows you to automate enforcement of custom design patterns that need to be implemented manually. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Note that Pattern Libraries were previously incubated as a satellite project of PostSharp 2.1, where they were named toolkits. They are now an integral and supported member of our product line.&lt;/p&gt; &lt;p&gt;We're very proud of &lt;a href="http://www.postsharp.net/"&gt;our new website&lt;/a&gt;, reflects our new vision of PostSharp. There are plenty of tutorials for beginners and intermediate users, and more are coming.&lt;/p&gt; &lt;h2&gt;What's New in PostSharp 3?&lt;/h2&gt; &lt;p&gt;PostSharp 3 is not just about repackaging old ideas differently. We also added a lot of new features and support for the latest platforms:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;First-class support for &lt;strong&gt;Silverlight&lt;/strong&gt;, &lt;strong&gt;Windows Phone&lt;/strong&gt;, and &lt;strong&gt;Windows Store&lt;/strong&gt;. Not only did we add new platforms, but we also brought all features to most cousins of the .NET Framework. Best of all: these platforms are supported through a single &lt;strong&gt;Portable Class Library&lt;/strong&gt;, so it's now possible to write truly portable aspects. A central component of this feature is the &lt;strong&gt;Portable Serializer&lt;/strong&gt;, similar in function to the BinaryFormatter (just replace [Serializable] by [PSerializable]).  &lt;li&gt;&lt;strong&gt;Pattern Libraries&lt;/strong&gt;, providing ready-made implementation of some the most common patterns. Improvements over PostSharp 2.1 Toolkits include better management through logging profiles, logging to Enterprise Library, code contracts, and performance enhancements.  &lt;li&gt;&lt;strong&gt;Smart tags&lt;/strong&gt; in the code editor help you adding ready-made aspects to your application without coding – without even reading our Getting Started. Smart tags are completed with a comprehensive wizard interface coupled with NuGet and a code generator.  &lt;li&gt;Support for &lt;strong&gt;Visual Studio 2012&lt;/strong&gt;, including the dark theme.  &lt;li&gt;Transparency to all obfuscators: PostSharp does not rely on any string references that may be broken during serialization.  &lt;li&gt;Better differentiation of "reference assemblies" and "runtime assemblies".  &lt;li&gt;New approach to licensing that will allow to install the license key to source control.  &lt;li&gt;Streamlined deployment through NuGet and Visual Studio Gallery &lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;New Maintenance Model&lt;/h2&gt; &lt;p&gt;PostSharp 2 was ruled by a "major-version" maintenance model: all updates (minor versions and bug fixes) within a major version were available for free. We released important improvements as "bug fixes": for instance, support for .NET 4.5 was included into PostSharp 2.1 because PostSharp 3 was not ready. This maintenance model created a conflict of interest between us (we need to be paid for our work) and our customers (you can't wait for a new major version to get new necessary features). It was time to change. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;PostSharp now comes with 1-year of maintenance subscription included&lt;/strong&gt; that gives you access to free updates, bug fixes and premium support. Every license key includes the subscription end date, which is tested against the build date of PostSharp. Importantly, licenses are still perpetual: if you can use a given PostSharp build one day, you can use it forever (except with the trial license). &lt;/p&gt; &lt;p&gt;Please read our &lt;a href="http://www.postsharp.net/purchase/faq"&gt;Licensing &amp;amp; Maintenance FAQ&lt;/a&gt; for details. Note that we have an updated &lt;a href="http://www.postsharp.net/downloads/legal"&gt;License Agreement&lt;/a&gt; that reflects these changes. If you need to continue with the previous license agreement, please &lt;a href="http://www.postsharp.net/company"&gt;contact our sales team&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;New Product Line&lt;/h2&gt;There are now three distinct editions available.&lt;br&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;PostSharp Express&lt;/strong&gt; (formerly Starter Edition) – for getting started with simple custom design pattern automation. Free as in beer.  &lt;li&gt;&lt;strong&gt;PostSharp Professional&lt;/strong&gt; – for automating custom design patterns (aspect framework) and logging (diagnostics pattern library). Price: 449$ or 329€ including maintenance subscription.  &lt;li&gt;&lt;strong&gt;PostSharp Ultimate&lt;/strong&gt; – for automating custom design patterns (aspect framework) and enforcing design rules (architecture framework), includes all ready-made design pattern libraries. Price: 799$ or 589€ including maintenance subscription. &lt;/li&gt;&lt;/ol&gt;For more information, see the &lt;a href="http://www.postsharp.net/purchase"&gt;feature matrix&lt;/a&gt; of all editions. As you can see, we dropped the Personal License. On the other side, we're now offering free licenses to all freelancers and consultants, additionally to students, educational facilities, and influencers of all sorts. We're also offering a one-time 1000$ discount to all businesses enrolled in BizSpark.  &lt;h2&gt;Upgrade Conditions&lt;/h2&gt; &lt;p&gt;We're giving 6 months of maintenance subscription for free to all customers:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Customers &lt;em&gt;without&lt;/em&gt; support subscription fully-featured PostSharp Ultimate for free and get 6-months of maintenance starting from the original date of purchase. Practically, it means that this offer only applies to customers who have purchased PostSharp later than six month ago.  &lt;li&gt;Customers &lt;em&gt;with&lt;/em&gt; a current support subscription get PostSharp Ultimate for free and will receive an additional 6 months of maintenance, at no cost.  &lt;li&gt;Other customers can benefit from our upgrade price (224$/164€ for PostSharp Professional or 399$/299€ for PostSharp Ultimate). &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Technically, we consider PostSharp 3 mature enough for most situations. However, if you cannot afford taking risks right now (tight deadline, large team), we recommend to wait until RTM before doing the upgrade. The principle obstacle on the path to RTM is now the lack of documentation for new features and new deployment options.&lt;/p&gt; &lt;h2&gt;Downgrade Conditions&lt;/h2&gt; &lt;p&gt;We understand that some teams don't want to upgrade to PostSharp 3 now, and may need to acquire new PostSharp 2.1 licenses. When you acquire a PostSharp 3 commercial license, you become eligible for a free PostSharp 2.1 license. To request your license key, please &lt;a href="http://ww.postsharp.net/company"&gt;contact our sales team&lt;/a&gt;. The offer does not apply to PostSharp Express.&lt;/p&gt; &lt;h2&gt;Time-Limited Discount&lt;/h2&gt; &lt;p&gt;For a limited time, we’re offering a special discount on PostSharp 3 purchases. From now until the RTM announcement, purchase any new PostSharp Professional or PostSharp Ultimate license and save 30% off your order by entering the discount code &lt;strong&gt;POSTSHARP3&lt;/strong&gt; during checkout. This offer also includes license upgrades and maintenance subscription renewals.&lt;/p&gt;PostSharp 3 is going to change the way software engineers think about design patterns. Happy PostSharping!&lt;br&gt;&lt;br&gt;-gael&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=TytjD9FpRZk:diVB85ekHs4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=TytjD9FpRZk:diVB85ekHs4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=TytjD9FpRZk:diVB85ekHs4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=TytjD9FpRZk:diVB85ekHs4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/TytjD9FpRZk" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=ec721e5b-4e32-45be-bfef-8b5f80d2398b</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=ec721e5b-4e32-45be-bfef-8b5f80d2398b</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/PostSharp-3-Licenses-Available#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=ec721e5b-4e32-45be-bfef-8b5f80d2398b</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=ec721e5b-4e32-45be-bfef-8b5f80d2398b</feedburner:origLink></item><item><title>PostSharp 3 moves from Alpha to Beta</title><link>http://feedproxy.google.com/~r/postsharp/~3/nqEb6zI1pz8/post.aspx</link><category>Annoucements</category><pubDate>Thu, 14 Feb 2013 09:10:24 PST</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=fc51f3f5-35a1-4a13-9350-7fe22fb090f2</guid><description>&lt;p&gt;Just a very short post to update you on the status on PostSharp 3. We spent the last 2 months stabilizing the new version, polishing new features without adding any new one, adding more tests, and running test suites on all supported platforms. The team is now quite satisfied with the quality, so we decided to move the quality label from Alpha to Beta. It means that we are code complete, that no important refactoring is planned, and that the only changes should be bug fixes and documentation. We have a few minor UI and UX bugs open, but there should be nothing serious.&lt;/p&gt;  &lt;p&gt;The main task that separates us from the Release Candidate status is API and reference documentation. That’s what we are going to work on during the next couple of weeks. The API could still change during this process because documenting also works as an excellent review process. &lt;/p&gt;  &lt;p&gt;If you are already using PostSharp 2.1, it is now a good time to try to upgrade to the next version and see if anything goes well. We don’t recommend you to “commit” the upgrade to your main development branch yet (and the PostSharp 3 does not come with a go-production license yet), but it would really help us to have feedback from the field. To upgrade to PostSharp 3, just use NuGet package manager at solution-level and add the &lt;em&gt;pre-release&lt;/em&gt; PostSharp package to all projects.&lt;/p&gt;  &lt;p&gt;We’re looking forward for your feedback.&lt;/p&gt;  &lt;p&gt;Happy PostSharping!&lt;/p&gt;  &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=nqEb6zI1pz8:a8QAorcieQ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=nqEb6zI1pz8:a8QAorcieQ0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=nqEb6zI1pz8:a8QAorcieQ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=nqEb6zI1pz8:a8QAorcieQ0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/nqEb6zI1pz8" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=fc51f3f5-35a1-4a13-9350-7fe22fb090f2</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=fc51f3f5-35a1-4a13-9350-7fe22fb090f2</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/PostSharp-3-moves-from-Alpha-to-Beta#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=fc51f3f5-35a1-4a13-9350-7fe22fb090f2</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=fc51f3f5-35a1-4a13-9350-7fe22fb090f2</feedburner:origLink></item><item><title>Detailed logging with Enterprise Library and PostSharp 3 CTP</title><link>http://feedproxy.google.com/~r/postsharp/~3/l75dsrAzq7s/post.aspx</link><category>Annoucements</category><pubDate>Mon, 14 Jan 2013 00:37:55 PST</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=5a0c7a9d-62d6-467c-bdc7-fecfc1f1e131</guid><description>&lt;p&gt;Microsoft Logging Application Block, a part of Enterprise Library, is very popular in corporate environments. As all logging frameworks, the Logging Application Block provides an infrastructure for collecting and routing log entries, but falls short at generating them. If you want to log something, you have to write code that emits this log record. But there are situations where you just want to trace the execution of &lt;em&gt;every&lt;/em&gt; method in some part of your application so that you can troubleshoot some issue. That typically requires a lot of boilerplate code.&lt;/p&gt;  &lt;p&gt;This is why we designed PostSharp Diagnostics Toolkit, a tool that excels at generating the boilerplate needed to emit tracing information at a very low level of details. Today, we’re proud that the toolkit also supports Enterprise Library, besides NLog, Log4Net and System.Diagnostics.&lt;/p&gt;  &lt;h2&gt;Adding tracing to your application&lt;/h2&gt;  &lt;p&gt;Seriously, adding tracing to your application has never been so easy. &lt;/p&gt;  &lt;p&gt;First, install PostSharp 3 CTP from &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f8-a308-c3bdfdd0be4a" target="_blank"&gt;Visual Studio Gallery&lt;/a&gt; or Visual Studio Extension Manager.&lt;/p&gt;  &lt;p&gt;Then, in the Solution Explorer, right-click on the project and choose Add &amp;gt; PostSharp policy&lt;/p&gt; &lt;img style="float: none; margin-left: auto; display: block; margin-right: auto" alt="" src="http://www.postsharp.net/blog/image.axd?picture=182fd200394133b0.png" /&gt;   &lt;p&gt;You’ll get a list of project-level policies. Choose logging.&lt;/p&gt; &lt;img alt="" src="http://www.postsharp.net/blog/image.axd?picture=336fb2e5261048b4.png" /&gt;   &lt;p&gt;You’re then asked which types and methods should be logged.&lt;/p&gt; &lt;img alt="" src="http://www.postsharp.net/blog/image.axd?picture=3b5bdaf11c7c1e27.png" /&gt;   &lt;p&gt;Here you have a chance to specify which details need to be included. There are two default profiles: log everything, and log only on exceptions. Both default profiles will include parameter values by default. You can edit the profiles and create new ones as required.&lt;/p&gt; &lt;img alt="" src="http://www.postsharp.net/blog/image.axd?picture=3d9339a90a967dbc.png" /&gt;   &lt;p&gt;Finally, you are asked to change the logging back-end. &lt;/p&gt; &lt;img alt="" src="http://www.postsharp.net/blog/image.axd?picture=30d1a7417f462119.png" /&gt;   &lt;p&gt;After confirmation, PostSharp will download the required NuGet packages and will add a [Log] custom attribute to a new file named GlobalAspects.cs. &lt;/p&gt;  &lt;pre&gt;[assembly: Log(AttributeTargetMemberAttributes = MulticastAttributes.Public,&lt;br /&gt;               AttributeTargetTypeAttributes = MulticastAttributes.Public)]&lt;/pre&gt;

&lt;p&gt;Of course, you can use the full power of &lt;a href="http://doc.sharpcrafters.com/postsharp-2.1/Content.aspx/PostSharp-2.1.chm/html/1B05CE59-61DE-4043-8E7C-12C130B1ACBB.htm" target="_blank"&gt;aspect multicasting&lt;/a&gt; to fine-tune the set of methods that you want to trace.&lt;/p&gt;

&lt;p&gt;If you build and run the application, and if you have included a trace listener, you will see that all public methods of public types have been traced!&lt;/p&gt;

&lt;h2&gt;High-Performance&lt;/h2&gt;

&lt;p&gt;The Logging Application Block is a bit different from other logging frameworks in that there is no concept of “trace source”. Instead, there is a a concept of extensible log record and a concept of filters that can match any property of log records, including custom properties. This design makes Enterprise Library more flexible than other logging frameworks, but is at first sight less suitable for massive tracing because of the expense of building a log record object. Fortunately, intelligent code generation can make Enterprise Library as fast as other frameworks by sharing some read-only data structures and assuming that filters do not change when the application is executing (i.e., that a change requires an application restart).&lt;/p&gt;

&lt;h2&gt;Hierarchical categories&lt;/h2&gt;

&lt;p&gt;Another limitation, critical for automated tracing, is the lack of support for hierarchical categories. As a workaround, PostSharp will enlist each log record in several categories, one for each part of the type name and namespace.&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;Generated Code&lt;/h2&gt;

&lt;p&gt;For those who want to see what’s under the hood, the following snippet shows the code generated from a simple “Hello, world” method with full tracing enabled.&lt;/p&gt;

&lt;pre&gt;public static void Main(string[] args)
{
    if (&amp;lt;&amp;gt;z__LoggingImplementationDetails._3)
    {
        object[] CS$0$0__args0 = new object[] { args };
        &amp;lt;&amp;gt;z__LoggingImplementationDetails.Write((TraceEventType) TraceEventType.Verbose,&lt;br /&gt;            &amp;quot;Entering: ConsoleApplication39.Program.Main({{{0}}})&amp;quot;, CS$0$0__args0, &lt;br /&gt;            &amp;lt;&amp;gt;z__LoggingImplementationDetails._2.Categories);
    }
    try
    {
        &lt;strong&gt;Console.WriteLine(&amp;quot;Hello, world.&amp;quot;);
&lt;/strong&gt;        if (&amp;lt;&amp;gt;z__LoggingImplementationDetails._3)
        {
            object[] CS$0$1__args1 = new object[] { args };
            &amp;lt;&amp;gt;z__LoggingImplementationDetails.Write((TraceEventType) TraceEventType.Verbose, &lt;br /&gt;               &amp;quot;Leaving: ConsoleApplication39.Program.Main({{{0}}})&amp;quot;, CS$0$1__args1, &lt;br /&gt;               &amp;lt;&amp;gt;z__LoggingImplementationDetails._2.Categories);
        }
    }
    catch (Exception)
    {
        if (&amp;lt;&amp;gt;z__LoggingImplementationDetails._5)
        {
            Exception CS$0$2__ex;
            object[] CS$0$3__args3 = new object[] { args, CS$0$2__ex };
            &amp;lt;&amp;gt;z__LoggingImplementationDetails.Write((TraceEventType) TraceEventType.Warning, &lt;br /&gt;                 &amp;quot;Exception in ConsoleApplication39.Program.Main({{{0}}}):\n{1}&amp;quot;, &lt;br /&gt;                 CS$0$3__args3,  &amp;lt;&amp;gt;z__LoggingImplementationDetails._4.Categories);
            throw;
        }
    }
}&lt;/pre&gt;

&lt;p&gt;As you can see, there is a lot of references to the class LoggingImplementationDetails. This class is generated by PostSharp. The static constructor configures prototype log entries and evaluates the filters. The &lt;em&gt;Write&lt;/em&gt; method acts as a re-entrance guard, preventing infinite recursions typically induced by &lt;em&gt;ToString&lt;/em&gt; when arguments get included in the logged text.&lt;/p&gt;

&lt;pre&gt;internal static class &amp;lt;&amp;gt;z__LoggingImplementationDetails
{
    // Fields
    public static readonly object[] _1 = new object[0];
    public static readonly LogEntry _2;
    public static readonly bool _3;
    public static readonly LogEntry _4;
    public static readonly bool _5;
    [ThreadStatic]
    private static bool isLogging;

    // Methods
    static &amp;lt;&amp;gt;z__LoggingImplementationDetails()
    {
        LogEntry CS$0$0__logEntry0 = new LogEntry();
        CS$0$0__logEntry0.set_Severity((TraceEventType) TraceEventType.Verbose);
        CS$0$0__logEntry0.Categories.Add(&amp;quot;ConsoleApplication39&amp;quot;);
        CS$0$0__logEntry0.Categories.Add(&amp;quot;ConsoleApplication39.Program&amp;quot;);
        _2 = CS$0$0__logEntry0;
        _3 = Logger.ShouldLog(_2);
        LogEntry CS$0$1__logEntry1 = new LogEntry();
        CS$0$1__logEntry1.set_Severity((TraceEventType) TraceEventType.Warning);
        CS$0$1__logEntry1.Categories.Add(&amp;quot;ConsoleApplication39&amp;quot;);
        CS$0$1__logEntry1.Categories.Add(&amp;quot;ConsoleApplication39.Program&amp;quot;);
        _4 = CS$0$1__logEntry1;
        _5 = Logger.ShouldLog(_4);
    }

    public static void Write(TraceEventType severity, string messageFormat, &lt;br /&gt;               object[] messageArgs, ICollection&lt;string&gt; categories)
    {
        if (!isLogging)
        {
            isLogging = true;
            try
            {
                LogEntry CS$0$0__logEntry0 = new LogEntry();
                CS$0$0__logEntry0.set_Severity(severity);
                CS$0$0__logEntry0.Message = string.Format(messageFormat, messageArgs);
                CS$0$0__logEntry0.Categories = categories;
                Logger.Write(CS$0$0__logEntry0);
            }
            finally
            {
                isLogging = false;
            }
        }
    }
}&lt;/pre&gt;

&lt;p&gt;In theory, the JIT compiler could see that the tracing block code depends on the read-only static field whose value is false, and could completely avoid to generate the logging code, resulting in zero cost in case that a given trace category is disabled.&lt;/p&gt;

&lt;h2&gt;Limitations&lt;/h2&gt;

&lt;p&gt;Perhaps the main feature that I regret is missing from the current version is support for the &lt;em&gt;Tracer&lt;/em&gt; facility, which may be more appropriate for the low-level massive tracing we are trying to achieve. We will have to consider, in a next version, how we can make this concept fit with the current architecture of the PostSharp Diagnostics Toolkit.&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;Detailed tracing with Enterprise Library Logging Application Block is now easier than ever. In just a few clicks, you can add tracing to thousands of methods, with no impact or your source code and minimal impact on run-time performance.&lt;/p&gt;

&lt;p&gt;Happy PostSharping!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=l75dsrAzq7s:l14p9hnnD-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=l75dsrAzq7s:l14p9hnnD-s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=l75dsrAzq7s:l14p9hnnD-s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=l75dsrAzq7s:l14p9hnnD-s:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/l75dsrAzq7s" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=5a0c7a9d-62d6-467c-bdc7-fecfc1f1e131</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=5a0c7a9d-62d6-467c-bdc7-fecfc1f1e131</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Detailed-logging-with-Enterprise-Library-and-PostSharp-3-CTP#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=5a0c7a9d-62d6-467c-bdc7-fecfc1f1e131</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=5a0c7a9d-62d6-467c-bdc7-fecfc1f1e131</feedburner:origLink></item><item><title>Validating parameters, fields and properties with PostSharp 3</title><link>http://feedproxy.google.com/~r/postsharp/~3/ZxqdHUkGVhM/post.aspx</link><category>Annoucements</category><pubDate>Wed, 09 Jan 2013 03:01:26 PST</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=ee38436e-ad36-4ddb-9cce-1d20b237d5d1</guid><description>&lt;p&gt;A few days after Phil Haack described how to &lt;a href="http://haacked.com/archive/2013/01/05/mitigate-the-billion-dollar-mistake-with-aspects.aspx" target="_blank"&gt;implement a null-checking aspect with PostSharp 2&lt;/a&gt;, it’s a good time to introduce a new feature of the refreshed PostSharp 3 CTP: validation of parameters, field, and properties.&lt;/p&gt;  &lt;p&gt;First, you need to have &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f8-a308-c3bdfdd0be4a" target="_blank"&gt;PostSharp 3 CTP (3.0.5)&lt;/a&gt; installed.&lt;/p&gt;  &lt;p&gt;To add a contract to to a parameter, just position the caret to the parameter name and select the relevant smart tag:&lt;/p&gt; &lt;img style="float: none; margin-left: auto; display: block; margin-right: auto" alt="" src="http://www.postsharp.net/blog/image.axd?picture=59c02ef0bec573f.png" /&gt;   &lt;p&gt;After you click on the action, PostSharp will download and install the relevant NuGet packages to your project, and add a [Required] custom attribute to the parameter. The same works for fields and properties. &lt;/p&gt;  &lt;p&gt;It could not be easier. Of course, you can also introduce contracts without the user interface by installing the package PostSharp.Toolkit.Domain and adding the custom attribute yourself.&lt;/p&gt;  &lt;pre&gt;public void Foo( [Required] string bar ) &lt;/pre&gt;

&lt;p&gt;(Make sure to allow pre-releases if you install the package manually.)&lt;/p&gt;

&lt;h2&gt;Ready-Made Contracts&lt;/h2&gt;

&lt;p&gt;The following contracts are available in the &lt;em&gt;PostSharp.Toolkit.Contracts&lt;/em&gt; namespace, depending on the type of the field, property or parameter:&lt;/p&gt;

&lt;table cellspacing="0" cellpadding="2" width="625" border="0"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;NotNull&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a non-null value&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;NotEmpty&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a non-null and non-empty string or collection&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;Required&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a non-null object or a non-whitespace string&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;CreditCard&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a valid credit card number&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;EmailAddress&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a valid email address&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;Phone&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a valid phone number&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;RegularExpression&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a match of a regular expression&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;StringLength&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a string of a given length&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;EnumDataType&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a valid value for an enumeration (can be applied to strings and integers)&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;GreaterThan&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a value greater than a threshold.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;LessThan&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a value less than a threshold.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;Positive&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a value greater or equal to 0.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;StrictlyPositive&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a value strictly greater than 0.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="123"&gt;Range&lt;/td&gt;

      &lt;td valign="top" width="500"&gt;Requires a value within a range.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;h2&gt;High Performance and Flexibility&lt;/h2&gt;

&lt;p&gt;Unlike previous validation aspects based on &lt;em&gt;OnMethodBoundaryAspect&lt;/em&gt;, the new aspects result in compact and fast code, with almost no overhead compared to hand-written code. &lt;/p&gt;

&lt;p&gt;Yet, they are based on an abstraction that you can extend to develop your own contracts: &lt;em&gt;ILocationValidationAspect&amp;lt;T&amp;gt;&lt;/em&gt; is a new aspect primitive designed specifically for the task. It works transparently for fields, properties, and parameters.&lt;/p&gt;

&lt;p&gt;If you want to create your own contract, you can derive a class from &lt;em&gt;System.Attribute&lt;/em&gt;, or preferably &lt;em&gt;PostSharp.Extensibility,MulticastAttribute&lt;/em&gt; (which supports inheritance, see below), and &lt;em&gt;ILocationValidationAspect&amp;lt;T&amp;gt;&lt;/em&gt;, where &lt;em&gt;T&lt;/em&gt; is the type of values to be validated, as many times as necessary. Note that the aspect does not know any standard type conversion (other than down-casting, which is not a conversion), so you will need a lot of these &lt;em&gt;T&lt;/em&gt;s, for instance for &lt;em&gt;int&lt;/em&gt;, &lt;em&gt;int?&lt;/em&gt;, &lt;em&gt;long&lt;/em&gt;, &lt;em&gt;long?&lt;/em&gt;, and so on if you want to target numbers.&lt;/p&gt;

&lt;h2&gt;Contract Inheritance&lt;/h2&gt;

&lt;p&gt;If you apply a contract to a parameter of an interface, abstract or virtual method, any the contract will be implemented in any derived method, for instance:&lt;/p&gt;

&lt;pre&gt;interface IFoo
{
   void Bar( [Required] string fooBar );
}

class Foo : IFoo
{
   public void Bar( string fooBar ) 
   {
      // PostSharp will inject the [Required] contract at the top of this method body.
   }
}&lt;/pre&gt;

&lt;p&gt;Note that inheritance is a feature of &lt;em&gt;MulticastAttribute&lt;/em&gt; and not just contracts, so you can use it with just any aspect.&lt;/p&gt;

&lt;h2&gt;Limitations&lt;/h2&gt;

&lt;p&gt;I already mentioned that the aspect does not support any type conversion, which could be annoying if you need to develop contracts that work on numbers.&lt;/p&gt;

&lt;p&gt;Also note that the aspect is not yet able to validate output argument and return values. It is purely a precondition checker.&lt;/p&gt;

&lt;p&gt;Finally, note that all contracts are opt-in. There is no “not-null by default”. It would be fairly easy to develop such a policy using an assembly-level &lt;em&gt;IAspectProvider&lt;/em&gt;, but currently you have to do it yourself.&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;PostSharp 3 introduces a new aspect primitive that is optimized to validate fields, properties, and parameters with high run-time efficiency. The PostSharp Domain Toolkit contains a set of standard contracts that you can add to your code easily – just using the smart tags in Visual Studio.&lt;/p&gt;

&lt;p&gt;Happy PostSharping!&lt;/p&gt;

&lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=ZxqdHUkGVhM:f9AYGcyxWYk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=ZxqdHUkGVhM:f9AYGcyxWYk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=ZxqdHUkGVhM:f9AYGcyxWYk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=ZxqdHUkGVhM:f9AYGcyxWYk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/ZxqdHUkGVhM" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=ee38436e-ad36-4ddb-9cce-1d20b237d5d1</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=ee38436e-ad36-4ddb-9cce-1d20b237d5d1</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Validating-parameters-field-and-properties-in-PostSharp-3#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=ee38436e-ad36-4ddb-9cce-1d20b237d5d1</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=ee38436e-ad36-4ddb-9cce-1d20b237d5d1</feedburner:origLink></item><item><title>Announcing PostSharp 3 CTP</title><link>http://feedproxy.google.com/~r/postsharp/~3/Cd_IPpeSkjQ/post.aspx</link><category>Annoucements</category><pubDate>Mon, 26 Nov 2012 03:10:54 PST</pubDate><guid isPermaLink="false">http://www.postsharp.net/blog/post.aspx?id=de075368-312a-453e-ba86-9e8491641c18</guid><description>&lt;p&gt;The PostSharp team is excited to announce today the first public release of PostSharp 3, available for &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f8-a308-c3bdfdd0be4a" target="_blank"&gt;download&lt;/a&gt; on the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a058d5d3-e654-43f8-a308-c3bdfdd0be4a" target="_blank"&gt;Visual Studio Gallery&lt;/a&gt; and NuGet (make sure to allow prereleases).&lt;/p&gt;  &lt;p&gt;This release marks an important turning point in the way we talk about PostSharp. During the last 8 years, we have successfully positioned PostSharp as the leading framework for aspect-oriented programming in Microsoft .NET. We provided an abstract construction kit and told customers they could build “whatever they wanted” with it. However, we became increasingly aware that the vast majority of our customers were all re-implementing the same aspects. &lt;/p&gt;  &lt;p&gt;In addition to just providing a wonderful framework, we now offer more value to our customers by delivering ready-made implementations of the most common design patterns that hang over application development today:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Logging for System.Diagnostics, NLog, Log4Net (Enterprise Library coming soon); &lt;/li&gt;    &lt;li&gt;Design patterns for safe multithreading; &lt;/li&gt;    &lt;li&gt;INotifyPropertyChanged beyond the obvious; &lt;/li&gt;    &lt;li&gt;Architectural validation; &lt;/li&gt;    &lt;li&gt;Change tracking and undo/redo (coming soon); &lt;/li&gt;    &lt;li&gt;Value validation: not null, regular expression, range, custom rules, … (coming soon); &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Long-time PostSharpers know that we already started building on this vision nearly a year ago with our PostSharp Toolkits, published as free add-ons to PostSharp 2.1 Pro Edition. Although the toolkits have always been an important part of our vision for PostSharp 3, we wanted to nurture these projects jointly with our community and release them continuously. The incubation period is now over, and we are happy to announce that PostSharp toolkits will join our product line as first-class members.&lt;/p&gt;  &lt;p&gt;With PostSharp 3, not only do we provide ready-made solutions to top problems, but we also make these solutions much more accessible than ever. With the new content-sensitive smart tags and wizards, you will be able to implement design patterns in a matter of minutes, without need to read extensive documentation.&lt;/p&gt;  &lt;p&gt;So, beyond the new orientation, what’s new in PostSharp 3?&lt;/p&gt;  &lt;h2&gt;Smart tags and wizards in Visual Studio&lt;/h2&gt;  &lt;p&gt;The single most striking feature of PostSharp 3 is its deeper integration with Visual Studio. &lt;/p&gt;  &lt;p&gt;For instance, move the caret to the name of a class or a method. Visual Studio will display a smart tag proposing actions that make sense in the current context: apply a threading model, add logging, implement INotifyPropertyChanged, …&lt;/p&gt; &lt;img style="border-top: black 1px solid; border-right: black 1px solid; border-bottom: black 1px solid; float: none; margin: 5px auto; border-left: black 1px solid; display: block" alt="" src="http://www.postsharp.net/blog/image.axd?picture=181e9d481ea7ea59.png" /&gt;   &lt;p&gt;A wizard-like user interface then collects all relevant settings and performs the required operations, such as installing a NuGet package and adding a custom attribute to your code.&lt;/p&gt; &lt;img alt="" src="http://www.postsharp.net/blog/image.axd?picture=4fc17d671cdb6050.png" width="618" height="486" /&gt;   &lt;h2&gt;Support for Visual Studio 2012&lt;/h2&gt;  &lt;p&gt;Visual Studio 2012 is now fully supported. Windows Store projects are supported too (see below). Visual Studio 2010 is still supported at an equal level of features, but support for Visual Studio 2008 has been discontinued.&lt;/p&gt;  &lt;h2&gt;First-Class Support for Windows Store Apps, Silverlight, and Windows Phone&lt;/h2&gt;  &lt;p&gt;Silverlight and Windows Phone (previously .NET Compact Framework) have been supported since PostSharp 1.5, but only a small subset of features was actually available for these platforms. This limitation was due to the inability of previous versions of PostSharp to execute, at build-time, code that was linked to exogenous platforms. Concretely, this affected features such as &lt;b&gt;CompileTimeValidate&lt;/b&gt;, &lt;b&gt;CompileTimeInitialize&lt;/b&gt;, &lt;b&gt;IAspectProvider&lt;/b&gt; and &lt;b&gt;MethodPointcut&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Thanks to some significant engineering effort, this limitation is now removed and all PostSharp features are now equally available on all supported platforms.&lt;/p&gt;  &lt;h2&gt;Support for Portable Class Libraries&lt;/h2&gt;  &lt;p&gt;Exogenous platforms are now supported through a single Portable Class Library that can target .NET 4.0, Silverlight 4, Windows Phone 7, and Windows Store 8. Therefore, it is now possible to create portable aspect libraries.&lt;/p&gt;  &lt;p&gt;Note that a separate version of PostSharp.dll is still available for .NET 2.0. Unlike the portable version, this one supports serialization of aspects through the BinaryFormatter and provides backward compatibility not only with previous versions of .NET, but also with previous versions of PostSharp.&lt;/p&gt;  &lt;p&gt;Because the BinaryFormatter is not portable, we had to develop our own portable serializer. Unlike other formatters readily available with the portable class library, and just as the BinaryFormatter, our implementation serializes the internal object structure (i.e. fields, and not public properties) and supports cyclic object graphs. To use the portable serializer, just use [PSerializable] instead of [Serialiable] and [PNonSerialized] instead of [NonSerialized]. This alone is already a pretty piece of software!&lt;/p&gt;  &lt;p&gt;In order to provide support for portable class libraries, we had to do some breaking changes in PostSharp.dll. Specifically, the interface &lt;b&gt;_Assembly&lt;/b&gt; is now replaced everywhere by the class &lt;b&gt;Assembly&lt;/b&gt;. We had to use the interop interface &lt;b&gt;_Assembly&lt;/b&gt; in previous versions of PostSharp because the class &lt;b&gt;Assembly&lt;/b&gt; used to be sealed. Since _&lt;b&gt;Assembly&lt;/b&gt; is not portable and &lt;b&gt;Assembly&lt;/b&gt; is now portable and abstract, we decided to make this breaking change.&lt;/p&gt;  &lt;p&gt;Practically, it means that PostSharp 3 won’t compile aspects linked to a previous version.&lt;/p&gt;  &lt;h2&gt;Unified Deployment Experience&lt;/h2&gt;  &lt;p&gt;As industry has evolved since PostSharp’s debuts in 2004, we decide to embrace Microsoft’s new vision of development tools deployment. PostSharp distribution is now clearly split into two parts: the compiler is now only distributed as a NuGet package and published on the NuGet Gallery, and the user interface is shipped as a VSIX package and published on the Visual Studio Gallery.&lt;/p&gt;  &lt;h2&gt;Feature Scavenging&lt;/h2&gt;  &lt;p&gt;It’s sometimes necessary to make difficult choices and discontinue support for scenarios that seem no longer central. That’s what we did with the following features:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Support for Mono as a build platform, &lt;/li&gt;    &lt;li&gt;Support for Visual Studio 2005 and .NET 3.5 as a build platform (.NET 2.0 is still supported as a runtime platform), &lt;/li&gt;    &lt;li&gt;Support for .NET Compact Framework (Windows Phone 7 is supported through the Portable Class Library), &lt;/li&gt;    &lt;li&gt;Support for Silverlight 3 (Silverlight 4 is supported through the Portable Class Library), &lt;/li&gt;    &lt;li&gt;Diagnostic build, &lt;/li&gt;    &lt;li&gt;Diagnostic console, &lt;/li&gt;    &lt;li&gt;Windows Installer distribution, &lt;/li&gt;    &lt;li&gt;Zip package distribution. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Customers who rely on these features have the possibility to keep using PostSharp 2.1, which is still maintained. Also, note that the user interface of PostSharp 3 is compatible with the compiler of PostSharp 2.1, so side-by-side usage is possible.&lt;/p&gt;  &lt;p&gt;Commercial customers who are severely affected by these deprecations are invited to contact us directly.&lt;/p&gt;  &lt;h2&gt;Continuous Delivery and Subscription-Based Maintenance&lt;/h2&gt;  &lt;p&gt;As of PostSharp 2.1 we officially switched to a continuous delivery process. We abandoned the distinction between “milestone releases” and “hotfixes” to assure that our customers will always have the latest build from the download page on our website, as well as on NuGet.&lt;/p&gt;  &lt;p&gt;All paid PostSharp 3 licenses will come with subscription-based maintenance including 1 year of free updates, web-based technical support, phone support, remote assistance and issue escalation. Maintenance subscriptions are renewed annually with multi-year subscriptions available. Pricing for all PostSharp 3 editions will be announced shortly.&lt;/p&gt;  &lt;h2&gt;Conditions for Free Upgrade &lt;/h2&gt;  &lt;p&gt;Those who recently purchased PostSharp 2.1 without support subscription will be eligible for a free upgrade to PostSharp 3, with 6 months of free maintenance from the original date of purchase. This offer is valid only for customers who purchase PostSharp 2.1 within 6 months of the official PostSharp 3 release, scheduled for Q1 2013.&lt;/p&gt;  &lt;p&gt;Current PostSharp 2.1 customers with support subscription can upgrade to PostSharp 3 and will receive an additional 6 months of maintenance to their subscription – at no cost.&lt;/p&gt;  &lt;h2&gt;Limitations&lt;/h2&gt;  &lt;p&gt;Note that PostSharp is currently in pre-release quality. It comes with several minor issues and the following limitations:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;All new APIs are still subject to change. &lt;/li&gt;    &lt;li&gt;Support for obfuscation is not yet available for portable class library. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;Starting today, you will hear much less about aspect-oriented programming from us and much more about patterns. Engineers need patterns because they have been proven to reduce complexity and PostSharp provides ready-made implementations of some of the most common patterns found in .NET applications. Furthermore, PostSharp helps you to build custom design patterns of your own, implement them automatically, and validate that they have been implemented properly. AOP remains at the heart of PostSharp as one of the enabling technologies, but now PostSharp adds even more value to software engineering.&lt;/p&gt;  &lt;p&gt;Happy PostSharping!&lt;/p&gt;  &lt;p&gt;-gael&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=Cd_IPpeSkjQ:RuDDfQvlWmU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=Cd_IPpeSkjQ:RuDDfQvlWmU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?i=Cd_IPpeSkjQ:RuDDfQvlWmU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/postsharp?a=Cd_IPpeSkjQ:RuDDfQvlWmU:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/postsharp?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/postsharp/~4/Cd_IPpeSkjQ" height="1" width="1"/&gt;</description><dc:publisher xmlns:dc="http://purl.org/dc/elements/1.1/">Gael Fraiteur</dc:publisher><pingback:server xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/pingback.axd</pingback:server><pingback:target xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/">http://www.postsharp.net/blog/post.aspx?id=de075368-312a-453e-ba86-9e8491641c18</pingback:target><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://www.postsharp.net/blog/trackback.axd?id=de075368-312a-453e-ba86-9e8491641c18</trackback:ping><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/post/Announcing-PostSharp-3-CTP#comment</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.postsharp.net/blog/syndication.axd?post=de075368-312a-453e-ba86-9e8491641c18</wfw:commentRss><feedburner:origLink>http://www.postsharp.net/blog/post.aspx?id=de075368-312a-453e-ba86-9e8491641c18</feedburner:origLink></item></channel></rss>
