<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7386105208394107344</id><updated>2012-01-29T07:30:14.287-05:00</updated><category term='WebDeploymentProject'/><category term='reflection'/><category term='xaml'/><category term='tools'/><category term='.net3.5'/><category term='javascript'/><category term='EnvDte'/><category term='cross-site'/><category term='DRY'/><category term='Deployment'/><category term='vs2008'/><category term='dataBinding'/><category term='CORS'/><category term='Math'/><category term='teamFoundationServer'/><category term='T4'/><category term='unitTesting'/><category term='linq2Sql'/><category term='IDE'/><category term='Reactive'/><category term='n-tier'/><category term='MEF'/><category term='Code Generation'/><category term='Xml'/><category term='TDD'/><category term='windows forms'/><category term='WebSiteProject'/><category term='Parallel'/><category term='fxCop'/><category term='configuration'/><category term='Wpf'/><category term='bookmarklet'/><category term='extension'/><category term='attributes'/><category term='MsBuild'/><category term='Debugging'/><category term='macro'/><category term='.net'/><category term='code'/><category term='.net2.0'/><category term='asp.net mvc'/><category term='datagridview'/><category term='code silverlight'/><category term='ActiveDirectory'/><category term='DateTimePicker'/><category term='dependency injection'/><category term='enum'/><category term='teamEmail'/><category term='linq'/><category term='.net3.0'/><category term='jQuery'/><category term='WindowsXP'/><category term='refactoring'/><category term='ajax'/><category term='Workflow-Foundation-4'/><category term='EntityFramework'/><category term='static-reflection'/><category term='lambda'/><category term='ideas'/><category term='IIS'/><category term='LDAP'/><category term='regex'/><category term='nullable'/><category term='EF4'/><category term='Click Once'/><category term='Vs2010'/><category term='teamBuild'/><category term='TypeMock'/><category term='NuGet'/><category term='html'/><category term='razor'/><category term='code standards'/><category term='combobox'/><category term='tfs2010'/><category term='asp.net'/><category term='linq-to-sql'/><category term='version control'/><category term='sourcesafe'/><category term='webapp'/><category term='reuse'/><category term='dependencies'/><title type='text'>.Net coding discoveries, focused on reusability</title><subtitle type='html'>&lt;a href="http://code.msdn.microsoft.com/ImaginaryDevelopment"&gt; Msdn code repository&lt;/a&gt;
&lt;a href="http://github.com/ImaginaryDevelopment"&gt; My Git repository&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>79</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8179567705227142958</id><published>2012-01-13T11:32:00.000-05:00</published><updated>2012-01-13T11:32:13.066-05:00</updated><title type='text'>Stand up Ninject on MVC against EF4</title><content type='html'>Here's the bindings I used to get it done&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;pre class="brush: csharp"&gt;    /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;    /// Load your modules or register your &lt;br /&gt;services here&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;    /// &amp;lt;param name="kernel"&amp;gt;The kernel.&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;private static void RegisterServices(IKernel kernel)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;  kernel.Bind&amp;lt;string&amp;gt;()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .ToMethod(f =&amp;gt;&lt;br /&gt;#pragma warning disable 0618 //disable obsolete warning as this is the ONLY place this method should be used in the application&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;  ProjectDb.Adapter.EfExtensions.CreateConnectionString(&lt;br /&gt;#pragma warning restore 0618&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "data source=databaseSource;initial &lt;br /&gt;catalog=YourDbName;integrated &lt;br /&gt;security=True;multipleactiveresultsets=True;App=EntityFramework"))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .Named("efString");&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;kernel.Bind(typeof(Project.Shared.Behaviors.IRepository&amp;lt;&amp;gt;))&lt;br /&gt;&amp;nbsp; .To&amp;lt;ProjectDb.Adapter.DEVEntities&amp;gt;()&lt;br /&gt;  .InThreadScope()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;  .WithConstructorArgument("connectionString",kernel.Get&amp;lt;string&amp;gt;("efString"));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8179567705227142958?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8179567705227142958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2012/01/stand-up-ninject-on-mvc-against-ef4.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8179567705227142958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8179567705227142958'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2012/01/stand-up-ninject-on-mvc-against-ef4.html' title='Stand up Ninject on MVC against EF4'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-4100846886435497708</id><published>2011-11-29T10:33:00.001-05:00</published><updated>2011-11-29T10:40:15.832-05:00</updated><title type='text'>Best Software Writing - More than money</title><content type='html'>&lt;h3 style="background: white; margin-bottom: .1in; margin-left: 0in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;&lt;i&gt;I sent these excerpts to all on my team and many more developers and developer managers at work.&lt;/i&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style="background: white; margin-bottom: .1in; margin-left: 0in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;Thewhole chapter is VERY insightful on understanding what drives top developertalent.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="background: white; margin-bottom: .1in; margin-left: 0in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="background: white; margin-bottom: 5.55pt; margin-left: .5in; margin-right: 0in; margin-top: 2.3pt;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Edisons &lt;/span&gt;&lt;/span&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;…&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;That's not a new idea.Fred Brooks wrote about it in 1974,&lt;sup&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344"&gt;&lt;span style="color: #003399;"&gt;[]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="I_think"&gt;&lt;/a&gt;&lt;span class="apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;and the studyhe quoted was published in 1968. But I think he underestimated the variationbetween programmers. He wrote about productivity in lines of code: the bestprogrammers can solve a given problem in a tenth of the time. But what if theproblem isn't given? In programming, as in many fields, the hard part isn'tsolving problems, but deciding what problems to solve. Imagination is hard tomeasure, but in practice it dominates the kind of productivity that's measuredin lines of code.&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;Productivityvaries in any field, but there are few in which it varies so much. Thevariation between programmers is so great that it becomes a difference in kind.I don't think this is something intrinsic to programming, though. In everyfield, technology magnifies differences in productivity. I think what'shappening in programming is just that we have a lot of technological leverage.But in every field the lever is getting longer, so the variation we see issomething that more and more fields will see as time goes on. And the successof companies, and countries, will depend increasingly on how they deal with it.&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;If variation in productivity increases withtechnology, then the contribution of the most productive individuals will notonly be disproportionately large but will actually grow with time. When youreach the point where 90% of a group's output is created by 1% of its members,you lose big if something (whether Viking raids, or central planning) dragstheir productivity down to the average.&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;If we want to get the most out of them, we need to understandthese especially productive people. What motivates them? What do they need todo their jobs? How do you recognize them? How do you get them to come and workfor you? And then of course there's the question, how do you become one?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/h3&gt;&lt;div class="doctext" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; line-height: 14.4pt; margin-bottom: 5.55pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="no_controversy"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="doctext" style="background: white; line-height: 14.4pt; margin-bottom: 5.55pt; margin-left: .5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="which_it"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="doctext" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; line-height: 14.4pt; margin-bottom: 5.55pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="in_productivity"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="doctext" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; line-height: 14.4pt; margin-bottom: 5.55pt; margin-left: 0.5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="most_out"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style="background: white; margin-bottom: .1in; margin-left: 0in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: Verdana, sans-serif; font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Morethan Money&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;I know a handful of super-hackers, so I sat down and thought aboutwhat they have in common. Their defining quality is probably that they reallylove to program. Ordinary programmers write code to pay the bills. Greathackers think of it as something they do for fun, and which they're delightedto find people will pay them for.&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;Great programmers are sometimes said to beindifferent to money. This isn't quite true. It is true that all they reallycare about is doing interesting work. But if you make enough money, you get towork on whatever you want, and for that reason hackers are attracted by theidea of making really large amounts of money. But as long as they still have toshow up for work every day, they care more about what they do there than howmuch they get paid for it.&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;Economically, this is a fact of the greatest importance, becauseit means you don't have to pay great hackers anything like what they're worth.A great programmer might be ten or a hundred times as productive as an ordinaryone, but he'll consider himself lucky to get paid three times as much. As I'llexplain later, this is partly because great hackers don't know how good theyare. But it's also because money is not the main thing they want.&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;What do hackers want? Like all craftsmen, hackers like good tools.In fact, that's an understatement. Good hackers find it unbearable to use badtools. They'll simply refuse to work on projects with the wrong infrastructure.&lt;/span&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;div class="doctext" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; line-height: 14.4pt; margin-bottom: 0.1in; margin-left: 0.5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="I_know"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="doctext" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; line-height: 14.4pt; margin-bottom: 0.1in; margin-left: 0.5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="sometimes_said"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="doctext" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; line-height: 14.4pt; margin-bottom: 0.1in; margin-left: 0.5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="it_means"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="doctext" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; line-height: 14.4pt; margin-bottom: 0.1in; margin-left: 0.5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="Like_all"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="doctext" style="background: white; line-height: 14.4pt; margin-bottom: .1in; margin-left: .5in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 5.5pt;"&gt;…&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 style="background: white; margin-bottom: .1in; margin-left: 0in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;a href="http://www.blogger.com/blogger.g?blogID=7386105208394107344" name="things_pinned"&gt;&lt;/a&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="background: white; margin-bottom: .1in; margin-left: .5in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;span class="apple-style-span"&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I've found that people who aregreat at something are not so much convinced of their own greatness asmystified at why everyone else seems so incompetent.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="background: white; margin-bottom: .1in; margin-left: 0in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="background: white; margin-bottom: .1in; margin-left: 0in; margin-right: 0in; margin-top: 3.0pt;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 8.5pt; font-weight: normal;"&gt;Excerptstaken from &lt;a href="http://techbus.safaribooksonline.com/9781590595008/more_than_money"&gt;TheBest Software writing I: Selected and Introduced by Joel Spoelsky Page 97-106&lt;/a&gt;– (a collection of writing’s Joel gathered from other writers)&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-4100846886435497708?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/4100846886435497708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/11/best-software-writing-more-than-money.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4100846886435497708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4100846886435497708'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/11/best-software-writing-more-than-money.html' title='Best Software Writing - More than money'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-1509681563908305512</id><published>2011-10-24T11:08:00.000-04:00</published><updated>2011-10-24T11:08:17.218-04:00</updated><title type='text'>Composition Root</title><content type='html'>I'm reading&amp;nbsp;&lt;a href="http://manning.com/seemann/"&gt;Dependency Injection in .Net&lt;/a&gt;&amp;nbsp;by Mark Seemann&lt;br /&gt;&lt;br /&gt;In response to&amp;nbsp;&lt;a href="http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx"&gt;http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm only up to reading mid-way through your chapter on doing it right (and jumped to the asp.net webforms composition root after reading this blog post), but here is more of my reasoning.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;The catch comes when you look at the behavior, and you realize that there is hardly any behavior on these objects, making them little more than bags of getters and setters. Indeed often these models come with design rules that say that you are not to put any domain logic in the the domain objects.&lt;/i&gt; &lt;a href="http://martinfowler.com/bliki/AnemicDomainModel.html"&gt;AnemicDomain Models&lt;/a&gt; - Martin Fowler&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;It becomes a 'real' domain model when it contains all (or most) of the behaviour that makes up the business domain (note I'm emphasising business logic, not UI or other orthogonal concerns).&lt;/i&gt; &lt;a href="http://stackoverflow.com/questions/1805641/anemic-domain-model-versus-domain-model/1807593#1807593"&gt; Anemic Domain Models&lt;/a&gt; - Stack overflow&lt;/div&gt;&lt;br /&gt;I don't feel that this is headed into an Anemic domain model as the domain model assembly would contain all behaviors specific to the domain.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;i&gt;Designs that share very little state or, even better, have no state at all tend to be less prone to hard to analyze bugs and easier to repurpose when requirements change.&lt;/i&gt; &lt;a href="http://www.colourcoding.net/blog/archive/2009/07/21/gang-of-four-anti-patterns.aspx"&gt; Blog article &lt;/a&gt; - makes sense but i could be missing multiple boats here.&lt;br /&gt;&lt;br /&gt;The domain would have zero state, and would depend on interfaces not DTOs. This would make test-ability and analysis simple.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Motivation for DTOs in the interfaces layer: presentation and persistence could all share the DTOs rather than having them duplicated in either place.&lt;br /&gt;Barring that perceived gain, then the shared layer across all would just be interfaces.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;The UI could depend on interfaces only, but the same assembly would contain DTOs that the presentation layer and any persistence could share without having to be duplicated/rewritten. So the domain is completely persistence and presentation ignorant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-1509681563908305512?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/1509681563908305512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/10/composition-root.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/1509681563908305512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/1509681563908305512'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/10/composition-root.html' title='Composition Root'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-212812306136411443</id><published>2011-10-19T17:14:00.000-04:00</published><updated>2011-10-19T17:19:20.316-04:00</updated><title type='text'>Routing except webforms requests</title><content type='html'>I have a legacy webforms (.aspx) project that I'm sliding routing and MVC3 into. I needed a route that would not prevent the default page from being handled by IIS, but would allow all other controller style routing. &amp;nbsp;How do you make a regex that only fails uri's that have .aspx or .axd in them?&lt;br /&gt;&lt;br /&gt;Then I thought well I still don't want anything that doesn't look like an mvc route (things that end in .foo or .fooo) &amp;nbsp;Sounds like a crazy negative regex.&lt;br /&gt;Here's the regular expression:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #999999;"&gt;^(.(?!\.[a-zA-Z0-9]{3,}))*$&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;Match anything that doesn't look like a file extension&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;And here's the routeAdd in &lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #999999;"&gt;global.asax&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #999999;"&gt;&lt;pre class="brush: c#"&gt;static void RegisterRoutes(RouteCollection routes)&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;     routes.MapRoute("mvc", "{controller}/{action}/{id}",defaults: new{action="index",id=""}, constraints:new{controller=@"^(.(?!\.[a-zA-Z0-9]{3,}))*$"});&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-212812306136411443?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/212812306136411443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/10/routing-except-webforms-requests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/212812306136411443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/212812306136411443'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/10/routing-except-webforms-requests.html' title='Routing except webforms requests'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-5054975524530560225</id><published>2011-09-29T15:49:00.002-04:00</published><updated>2011-09-29T15:49:58.626-04:00</updated><title type='text'></title><content type='html'>Microsoft is embracing extensibility... using Stackoverflow.com for forums, and &lt;a href="http://visualstudio.uservoice.com/"&gt;uservoice&lt;/a&gt; for VS feedback!&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #323223; font-family: verdana; font-size: 13px;"&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 1.5; margin-bottom: 18px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;i&gt;&lt;strong style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Where are the MSDN forums?&lt;/strong&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="line-height: 1.5; margin-bottom: 18px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;i&gt;We have decided to migrate our forums to&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/tagged/pex" style="color: #1166ff; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-decoration: none;" target="_self"&gt;stackoverflow.com&lt;/a&gt;&amp;nbsp;in order to better build a community around Pex and Moles. Questions about Pex should be tagged with 'Pex' and Moles with 'Moles'...&lt;/i&gt;&lt;/div&gt;&lt;div style="line-height: 1.5; margin-bottom: 18px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;i&gt;- from&amp;nbsp;&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;a href="http://research.microsoft.com/en-us/projects/pex/"&gt;http://research.microsoft.com/en-us/projects/pex/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-5054975524530560225?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/5054975524530560225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/09/microsoft-is-embracing-extensibility.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5054975524530560225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5054975524530560225'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/09/microsoft-is-embracing-extensibility.html' title=''/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-4999792765258815628</id><published>2011-09-19T20:29:00.000-04:00</published><updated>2011-09-29T15:51:33.937-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Some F# early learning and reference</title><content type='html'>I'm translating my bulk code detector from c# to f#, to learn f#.It's a linqpad c# program that recurses a directory tree organizing code&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;by&lt;/li&gt;&lt;ul&gt;&lt;li&gt;highest line count&amp;nbsp;&lt;/li&gt;&lt;li&gt;highest line count by directory&amp;nbsp;&lt;/li&gt;&lt;li&gt;highest line count by base filename (the stuff before the .)&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;includes&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;non-whitespace count&amp;nbsp;&lt;/li&gt;&lt;li&gt;potential magic numbers count&amp;nbsp;&lt;/li&gt;&lt;li&gt;" count&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre class="brush:f#"&gt;&lt;code class="language-f#"&gt;&lt;br /&gt;//path returns string&lt;br /&gt;let path :string= &lt;br /&gt;  let userPath=Util.ReadLine("SourceDirectory?",@"D:\projects\")&lt;br /&gt;  let exists=System.IO.Directory.Exists(userPath)&lt;br /&gt;  if not(exists) then //guard clause&lt;br /&gt;    raise(DirectoryNotFoundException(userPath))&lt;br /&gt;  userPath&lt;br /&gt;  &lt;br /&gt;let doTestFileExclude = false&lt;br /&gt;&lt;br /&gt;//fileExclude= Func&amp;lt;string,bool&amp;gt; a=&amp;gt;&lt;br /&gt;let fileExclude  (a:string):bool = &lt;br /&gt;  a.EndsWith("designer.cs",StringComparison.CurrentCultureIgnoreCase)||&lt;br /&gt;  a.StartsWith("jquery-",StringComparison.CurrentCultureIgnoreCase)||&lt;br /&gt;  a.StartsWith("AssemblyInfo");&lt;br /&gt;  &lt;br /&gt;let pathExclude (a:string) :bool =&lt;br /&gt;  a.Contains(@"\Database\")||&lt;br /&gt;  a.Contains("Service References")||&lt;br /&gt;  a.Contains("Web References") ||&lt;br /&gt;  a.Contains("PackageTmp") ||&lt;br /&gt;  a.StartsWith(@"~\Web\Scripts\Mvc3")&lt;br /&gt;&lt;br /&gt;//record, class, struct, or discriminated union?  &lt;br /&gt;type  CountSettings = {&lt;br /&gt;  Path: string&lt;br /&gt;  Patterns: IEnumerable&amp;lt;string&amp;gt;&lt;br /&gt;  FileExclude: string -&amp;gt; bool&lt;br /&gt;  PathExclude: string-&amp;gt; bool&lt;br /&gt;  }&lt;br /&gt;//instance of above type&lt;br /&gt;let currentSettings:CountSettings=  {&lt;br /&gt;  Path=path&lt;br /&gt;  Patterns=["*.cs";"*.js"]&lt;br /&gt;  FileExclude=fileExclude&lt;br /&gt;  PathExclude=pathExclude&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;//demonstrating access modifier  &lt;br /&gt;let private testFileExclude() =&lt;br /&gt;  let testCases = ["test";"test.designer.cs";"test.Designer.cs"]&lt;br /&gt;  let mapped = testCases |&amp;gt;&lt;br /&gt;    List.map(fun (fn:string) -&amp;gt;&lt;br /&gt;      (fn,currentSettings.FileExclude(fn))&lt;br /&gt;    )&lt;br /&gt;  mapped.Dump("testFileExclude done")&lt;br /&gt;  &lt;br /&gt;if doTestFileExclude then&lt;br /&gt;  do testFileExclude()&lt;br /&gt;&lt;br /&gt;//set cwd (not a functional call, imperative?)&lt;br /&gt;System.Environment.CurrentDirectory=currentSettings.Path&lt;br /&gt;//public ~IEnumerable&amp;lt;T&amp;gt; visitDir(string dir,T1 dirFilter, T2 patterns, T3 fileFilter)&lt;br /&gt;let rec visitAll (dir:string) patterns=seq{&lt;br /&gt;  for pattern in patterns do&lt;br /&gt;    yield! Directory.EnumerateFiles(dir,pattern)&lt;br /&gt;  for subdir in Directory.EnumerateDirectories(dir) do&lt;br /&gt;    yield! visitAll subdir patterns&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;visitAll currentSettings.Path currentSettings.Patterns &lt;br /&gt;  |&amp;gt; Seq.length &lt;br /&gt;  |&amp;gt; fun x-&amp;gt;x.Dump("LengthAll")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;let rec visitDir (dir:string) dirFilter patterns fileFilter=&lt;br /&gt;  seq{&lt;br /&gt;  for pattern in patterns do&lt;br /&gt;    for file in Directory.EnumerateFiles(dir,pattern) do&lt;br /&gt;      if not(fileFilter(file)) then&lt;br /&gt;        yield file&lt;br /&gt;  for subdir in Directory.EnumerateDirectories(dir) do&lt;br /&gt;    if not(dirFilter(subdir)) then&lt;br /&gt;      yield! visitDir subdir dirFilter patterns fileFilter&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;let visitDirResult= &lt;br /&gt;  visitDir currentSettings.Path currentSettings.PathExclude&lt;br /&gt;    currentSettings.Patterns&lt;br /&gt;      currentSettings.FileExclude&lt;br /&gt;visitDirResult |&amp;gt; Seq.length |&amp;gt; fun x-&amp;gt;x.Dump("visitDirLength")&lt;br /&gt;visitDirResult |&amp;gt; fun x -&amp;gt;x.Dump("visitDirResult")&lt;br /&gt;&lt;br /&gt;//Extension method on string&lt;br /&gt;type System.String with&lt;br /&gt;  member x.Right(index) = x.Substring(x.Length - index)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-4999792765258815628?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/4999792765258815628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/09/some-f-early-learning-and-reference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4999792765258815628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4999792765258815628'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/09/some-f-early-learning-and-reference.html' title='Some F# early learning and reference'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-6243923759722768856</id><published>2011-09-06T14:31:00.000-04:00</published><updated>2011-09-06T14:31:26.086-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NuGet'/><category scheme='http://www.blogger.com/atom/ns#' term='Vs2010'/><title type='text'>Local NuGet Feed on network drive</title><content type='html'>This was so much simpler than I imagined. I followed &lt;a href="http://www.hanselman.com/blog/CreatingANuGetPackageIn7EasyStepsPlusUsingNuGetToIntegrateASPNETMVC3IntoExistingWebFormsApplications.aspx"&gt;this&lt;/a&gt; article from Hanselman.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Get the NuGet.exe command line &lt;a href="http://nuget.codeplex.com/releases/view/55760"&gt;here&lt;/a&gt;. Put it in the &lt;code class="dos"&gt;%path%&lt;/code&gt; or somewhere.&lt;/li&gt;&lt;li&gt;Create a directory for your package - I created mine on the network share directly&lt;/li&gt;&lt;li&gt;on the command line in your new folder &lt;code class="dos"&gt;nuget.exe spec&lt;/code&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Depends on your nuget.exe being in the &lt;code class="dos"&gt;%path%&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;edit any fields in the new &lt;code class="dos"&gt;Package.nuspec&lt;/code&gt; file.&lt;/li&gt;&lt;li&gt;If you have assemblies&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Add a lib folder&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Add assemblies inside&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;li&gt;If you have other content&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Add a content folder&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Add files inside&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;li&gt;If you have transforms&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Add &lt;code&gt;filename.transform&lt;/code&gt; inside the content folder&lt;/li&gt;&lt;ol&gt;&lt;li&gt;For example &lt;code&gt;web.config.transform&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;li&gt;&lt;code&gt;nuget.exe pack package.nuspec&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;Package created!&lt;br /&gt;&lt;br /&gt;Now add that location in your Vs2010 &amp;nbsp;Tools-&amp;gt;LibraryPackageManager-&amp;gt;PackageManagerSettings&lt;br /&gt;In Package sources add the source, and name it. TADA!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-6243923759722768856?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/6243923759722768856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/09/local-nuget-feed-on-network-drive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6243923759722768856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6243923759722768856'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/09/local-nuget-feed-on-network-drive.html' title='Local NuGet Feed on network drive'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-9080771161009499306</id><published>2011-06-24T16:26:00.000-04:00</published><updated>2011-06-24T16:26:04.797-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unitTesting'/><category scheme='http://www.blogger.com/atom/ns#' term='Xml'/><category scheme='http://www.blogger.com/atom/ns#' term='MsBuild'/><title type='text'>Database Unit Tests - Config Transforms</title><content type='html'>I wanted to have a configuration for the other environments to run the same tests.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;started out adding the sit configuration to the solution and the test project.&lt;/li&gt;&lt;li&gt;I added the following to my Db.Tests.csproj:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;top property group under projectguid:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;pre style="brush: xml"&gt;&amp;lt;ProjectConfigFileName&amp;gt;App.Config&amp;lt;/ProjectConfigFileName&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;and just below outputType:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;pre style="brush: xml;"&gt;&amp;lt;OutputExtension Condition="'$(OutputExtension)' == '' "&amp;gt;dll&amp;lt;/OutputExtension&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;then in the item group with app.config:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;pre style="brush: xml"&gt;&amp;lt;Content Include="App.Sit.config"&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;DependentUpon&amp;gt;app.Config&amp;lt;/DependentUpon&amp;gt;&amp;nbsp; &amp;nbsp; &amp;lt;/Content&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;finally just before /Project tag:&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="brush: xml"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Import Condition="'$(Configuration)' == 'Sit'" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Target Condition="'$(Configuration)' == 'Sit'" Name="PostTransformAppConfig" AfterTargets="TransformWebConfig"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Copy Condition="Exists('$(TransformWebConfigIntermediateLocation)\transformed\App.config')" SourceFiles="$(TransformWebConfigIntermediateLocation)\transformed\App.config" DestinationFiles="$(OutputPath)\$(AssemblyName).$(OutputExtension).config" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Copy Condition="Exists('$(TransformWebConfigIntermediateLocation)\transformed\App.config')" SourceFiles="$(TransformWebConfigIntermediateLocation)\transformed\App.config" DestinationFiles="$(OutputPath)\$(AssemblyName).vshost.$(OutputExtension).config" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Target Condition="'$(Configuration)' == 'Sit'" Name="PostTransformAppConfig" AfterTargets="Build"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;CallTarget Targets="TransformWebConfig" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Copy Condition="Exists('$(TransformWebConfigIntermediateLocation)\transformed\App.config')" SourceFiles="$(TransformWebConfigIntermediateLocation)\transformed\App.config" DestinationFiles="$(OutputPath)\$(AssemblyName).$(OutputExtension).config" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;Copy Condition="Exists('$(TransformWebConfigIntermediateLocation)\transformed\App.config')" SourceFiles="$(TransformWebConfigIntermediateLocation)\transformed\App.config" DestinationFiles="$(OutputPath)\$(AssemblyName).vshost.$(OutputExtension).config" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/Target&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here's my app.sit.config transform file:&lt;br /&gt;&lt;br /&gt;&lt;pre style="brush: xml"&gt;&lt;br /&gt;&amp;lt;ExecutionContext xdt:Transform="Replace" Provider="System.Data.SqlClient" ConnectionString="Data Source=SitServer;Initial Catalog=Init1_SIT;Integrated Security=True;Pooling=False"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CommandTimeout="30" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;PrivilegedContext xdt:Transform="Replace" Provider="System.Data.SqlClient" ConnectionString="Data Source=SitServer;Initial Catalog=Init1_SIT;Integrated Security=True;Pooling=False"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CommandTimeout="30" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Based on&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://vishaljoshi.blogspot.com/2010/05/applying-xdt-magic-to-appconfig.html"&gt;http://vishaljoshi.blogspot.com/2010/05/applying-xdt-magic-to-appconfig.html&lt;/a&gt;&amp;nbsp;and&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/3004210/app-config-transformation-for-projects-which-are-not-web-projects-in-visual-studi"&gt;http://stackoverflow.com/questions/3004210/app-config-transformation-for-projects-which-are-not-web-projects-in-visual-studi&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-9080771161009499306?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/9080771161009499306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/06/database-unit-tests-config-transforms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/9080771161009499306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/9080771161009499306'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/06/database-unit-tests-config-transforms.html' title='Database Unit Tests - Config Transforms'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-2589037486644119798</id><published>2011-06-01T13:22:00.002-04:00</published><updated>2011-06-01T13:24:59.152-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow-Foundation-4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Workflow quirk: cannot access this inline location reference</title><content type='html'>Activity '{0}' cannot access this inline location reference because it is only valid for activity '{1}'. Only the activity which obtained the inline location reference is allowed to use it.&lt;br /&gt;&lt;br /&gt;Inside my assign activity: &lt;br /&gt;&lt;pre class="brush: vb"&gt;' foundfiles is IEnumerable(of String)&lt;br /&gt;foundFiles.Where(Function(file As String) FileNameBlacklist.Any(Function(blacklistItem) System.IO.Path.GetFileName(file).StartsWith(blacklistItem)) = False)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Not sure if this or the subsequent access was failing, however changing it to this fixed it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vb"&gt;foundFiles.Where(Function(file As String) FileNameBlacklist.Any(Function(blacklistItem) System.IO.Path.GetFileName(file).StartsWith(blacklistItem)) = False).ToList().AsEnumerable&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-2589037486644119798?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/2589037486644119798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/06/workflow-quirk-cannot-access-this.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2589037486644119798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2589037486644119798'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/06/workflow-quirk-cannot-access-this.html' title='Workflow quirk: cannot access this inline location reference'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-309625993091287652</id><published>2011-05-31T16:55:00.002-04:00</published><updated>2011-05-31T16:58:16.800-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teamFoundationServer'/><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='ActiveDirectory'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><title type='text'>Mashup: Team Foundation Server's API and Microsoft Active Directory</title><content type='html'>I wanted to know the userID and name of anyone that checked out a file in the last 2 months for edit on a specific path inside Tfs. Some of this code was tested to work fine on Tfs2010, but no guarantees.&lt;br /&gt;&lt;br /&gt;So it's a nice little bit of code to connect to tfs, get the changes and then pull the names in from active directory with a max of 1 attempt per distinct userID.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp"&gt;//imports: &lt;br /&gt;//Microsoft.TeamFoundation.Client&lt;br /&gt;//Microsoft.TeamFoundation.VersionControl.Client&lt;br /&gt;//System.DirectoryServices&lt;br /&gt;void Main()&lt;br /&gt;{&lt;br /&gt; &lt;br /&gt;  Uri tfs08Uri= new Uri("http://tfs.yourtfs.com:8080"); //TODO:this will be specific to your query&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  using(var tfsPc=new TfsTeamProjectCollection(tfs08Uri))&lt;br /&gt;  &lt;br /&gt;  {&lt;br /&gt;  &lt;br /&gt;    var vcs=tfsPc.GetService&amp;lt;Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer&amp;gt;();&lt;br /&gt;   &lt;br /&gt;    var gtpm=vcs.GetItem("$/yourServerPath"); //TODO:this will be specific to your query&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    var pendings=vcs.QueryPendingSets(new[]{gtpm.ServerItem}, RecursionType.Full,null,null);&lt;br /&gt;    var pendingQuery=pendings.Where(p=&amp;gt;p.PendingChanges&lt;br /&gt;        .Any(pc=&amp;gt;pc.CreationDate&amp;gt;DateTime.Today.AddMonths(-2))) &lt;br /&gt;      .OrderByDescending(p=&amp;gt;p.PendingChanges.Max(d=&amp;gt;d.CreationDate));&lt;br /&gt;      &lt;br /&gt;    var q= from pq in pendingQuery&lt;br /&gt;        from pc in pq.PendingChanges&lt;br /&gt;        where pc.FileName.EndsWith(".refresh")==false&lt;br /&gt;        select new{pq.OwnerName,pq.Computer,pc.ServerItem,pc.CreationDate,pc.FileName};&lt;br /&gt;        var users=q.Select(u=&amp;gt;u.OwnerName).Distinct();&lt;br /&gt;        var joinedQuery= from pc in q&lt;br /&gt;          join l in lookup(users).ToList() on pc.OwnerName equals l.Key into luLeft&lt;br /&gt;          from lu in luLeft.DefaultIfEmpty()&lt;br /&gt;          select new {Name=lu.Value??pc.OwnerName,pc.FileName,pc.ServerItem,pc.CreationDate,pc.Computer,pc.OwnerName};&lt;br /&gt;          joinedQuery.Dump();&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;  &lt;br /&gt;    &lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static IEnumerable&amp;lt;KeyValuePair&amp;lt;string,string&amp;gt;&amp;gt; lookup(IEnumerable&amp;lt;string&amp;gt; ids)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;using(var de=new System.DirectoryServices.DirectoryEntry())&lt;br /&gt;{&lt;br /&gt;  var customPath="LDAP://DC=corp,DC=yourdomain,DC=com"; //TODO:this will be specific to your ActiveDirectory&lt;br /&gt;  de.Path=customPath;&lt;br /&gt;  de.AuthenticationType= System.DirectoryServices.AuthenticationTypes.Secure;&lt;br /&gt;  &lt;br /&gt;  using(var deSearch=new System.DirectoryServices.DirectorySearcher())&lt;br /&gt;  {&lt;br /&gt;    deSearch.SearchRoot=de;&lt;br /&gt;    var found=new Dictionary&amp;lt;string,string&amp;gt;( StringComparer.CurrentCultureIgnoreCase);&lt;br /&gt;    foreach(var ownerName in ids)&lt;br /&gt;      {&lt;br /&gt;      if(found.ContainsKey(ownerName))&lt;br /&gt;      yield return  found.First(k=&amp;gt;k.Key==ownerName);&lt;br /&gt;      deSearch.Filter="(&amp;amp;(objectClass=user)(SAMAccountName="+ownerName+"))";&lt;br /&gt;      string value;&lt;br /&gt;      try&lt;br /&gt;      {          &lt;br /&gt;        var me=deSearch.FindOne();  &lt;br /&gt;        value= me.Properties["name"][0].ToString();&lt;br /&gt;        //value.Dump();&lt;br /&gt;      }&lt;br /&gt;      catch(Exception)&lt;br /&gt;      {&lt;br /&gt;        value= null;&lt;br /&gt;      }&lt;br /&gt;       found.Add(ownerName,value);&lt;br /&gt;      yield return new KeyValuePair&amp;lt;string,string&amp;gt;(ownerName,value);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//references:&lt;br /&gt;//%windir%\Microsoft.Net\Framework\v4.0.30319\System.DirectoryServices.dll&lt;br /&gt;//%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Common.dll&lt;br /&gt;//%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Client.dll&lt;br /&gt;//%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.VersionControl.Common.dll&lt;br /&gt;//%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.VersionControl.Client.dll&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Done in &lt;a href="http://www.linqpad.net/"&gt;LinqPad&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Extra snippets/remnants leftover for anyone interested:&lt;br /&gt;&lt;pre class="brush: csharp"&gt;//var exclusionList=new [] {"*.suo","*.gpstate","svn","_svn",".svn","*Resharper*"};&lt;br /&gt;    //  vcs.GetItems("$/yourServerSpec/*.suo/", Microsoft.TeamFoundation.VersionControl.Client.RecursionType.Full).Items //TODO: this will be specific to your query&lt;br /&gt;    //    .Select(i=&amp;gt;i.ServerItem).Distinct().Dump();&lt;br /&gt;    //var workspaces=vcs.QueryWorkspaces(null,null,null).Where(w=&amp;gt;w.IsLocal==false &amp;amp; w.LastAccessDate&amp;gt;DateTime.Now.AddDays(-15)).Where(w=&amp;gt;w.Folders.Any(f=&amp;gt; f.ServerItem.StartsWith("$/PST")));&lt;br /&gt;    //workspaces.OrderByDescending(w=&amp;gt;w.LastAccessDate).Dump(1);&lt;br /&gt;//  var checkins=vcs.GetBranchHistory(new ItemSpec[]{new ItemSpec( gtpm.ServerItem, RecursionType.Full)},VersionSpec.Latest);&lt;br /&gt;  //  checkins.Count().Dump();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-309625993091287652?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/309625993091287652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/mashup-team-foundation-servers-api-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/309625993091287652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/309625993091287652'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/mashup-team-foundation-servers-api-and.html' title='Mashup: Team Foundation Server&apos;s API and Microsoft Active Directory'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-110907722564130226</id><published>2011-05-24T16:38:00.000-04:00</published><updated>2011-05-24T16:38:53.622-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebDeploymentProject'/><category scheme='http://www.blogger.com/atom/ns#' term='WebSiteProject'/><category scheme='http://www.blogger.com/atom/ns#' term='MsBuild'/><title type='text'>.wdproj fails to copy down .refresh binaries</title><content type='html'>So I have recently been put on a team that utilizes &lt;a href="http://stackoverflow.com/questions/808408/can-we-build-a-website-using-msbuild"&gt;web site projects&lt;/a&gt; and hooking up build automation.&lt;br /&gt;&lt;br /&gt;Apparently the default target for copying down .dll.refresh files does in &lt;br /&gt;C:\Program Files\MSBuild\Microsoft\WebDeployment\v10.0&lt;br /&gt; this for its copy inside the _ResolveReferences target:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code brush:xml"&gt; &amp;lt;Copy &lt;br /&gt;      SourceFiles=&amp;quot;@(References-&amp;gt;&amp;#39;%(FullPath)&amp;#39;)&amp;quot; &lt;br /&gt;      DestinationFolder=&amp;quot;$(_FullSourceWebDir)\Bin\&amp;quot; &lt;br /&gt;      Condition=&amp;quot;!Exists(&amp;#39;%(References.Identity)&amp;#39;)&amp;quot; &lt;br /&gt;      ContinueOnError=&amp;quot;true&amp;quot;&lt;br /&gt;      SkipUnchangedFiles=&amp;quot;true&amp;quot;&lt;br /&gt;      Retries=&amp;quot;$(CopyRetryCount)&amp;quot;&lt;br /&gt;      RetryDelayMilliseconds=&amp;quot;$(CopyRetryDelayMilliseconds)&amp;quot;/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and References.Identity resolves to the source identity, not the target identity. So if the source exists it will not copy.&lt;br /&gt;&lt;br /&gt;To work around it, and in case in some other usages for this target need this functionality I added a custom beforebuild override in my .wdproj file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code brush:xml"&gt;&amp;lt;Target Name=&amp;quot;BeforeBuild&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;Message Text=&amp;quot;Doing custom BeforeBuild&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;Copy &lt;br /&gt;      SourceFiles=&amp;quot;@(References-&amp;gt;&amp;#39;%(FullPath)&amp;#39;)&amp;quot; &lt;br /&gt;      DestinationFolder=&amp;quot;$(_FullSourceWebDir)\Bin\&amp;quot; &lt;br /&gt;      ContinueOnError=&amp;quot;true&amp;quot;&lt;br /&gt;      SkipUnchangedFiles=&amp;quot;true&amp;quot;&lt;br /&gt;      Retries=&amp;quot;$(CopyRetryCount)&amp;quot;&lt;br /&gt;      RetryDelayMilliseconds=&amp;quot;$(CopyRetryDelayMilliseconds)&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-110907722564130226?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/110907722564130226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/wdproj-fails-to-copy-down-refresh.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/110907722564130226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/110907722564130226'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/wdproj-fails-to-copy-down-refresh.html' title='.wdproj fails to copy down .refresh binaries'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-7495626302289293768</id><published>2011-05-12T13:57:00.000-04:00</published><updated>2011-05-13T16:39:26.727-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow-Foundation-4'/><title type='text'>Workflow 4 Default types to designer initialization</title><content type='html'>Dependency Injection way overboard?&lt;br /&gt;&lt;br /&gt;I've been reflectoring, googling, stackoverflowing for weeks and just now stumbled upon the attribute injector code that runs to give ForEachActivity&lt;t&gt; and SequenceActivity a designer.&lt;br /&gt;&lt;br /&gt;Why weren't these attributes placed on the classes themselves? I have no idea.&lt;br /&gt;&lt;br /&gt;Point your reflector at System.Activities.Core.Presentation in %windir%\Microsoft.NET\Framework\(4 something)&lt;/t&gt;&lt;br /&gt;&lt;t&gt;&lt;br /&gt;&lt;/t&gt;&lt;br /&gt;&lt;t&gt;It's in&amp;nbsp;&lt;/t&gt;&lt;br /&gt;&lt;t&gt;&lt;br /&gt;&lt;/t&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush :csharp"&gt;System.Activities.Core.Presentation.DesignerMetadata.Register();&lt;br /&gt;//Sneak peak&lt;br /&gt;{&lt;br /&gt;  AttributeTableBuilder builder = new AttributeTableBuilder();&lt;br /&gt;  builder.AddCustomAttributes(typeof(ActivityAction),&lt;br /&gt;    new Attribute[] { new EditorReuseAttribute(false) });&lt;br /&gt;  SequenceDesigner.RegisterMetadata(builder);&lt;br /&gt;  ForEachDesigner.RegisterMetadata(builder);&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-7495626302289293768?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/7495626302289293768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/workflow-4-default-types-to-designer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7495626302289293768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7495626302289293768'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/workflow-4-default-types-to-designer.html' title='Workflow 4 Default types to designer initialization'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-5958276526997825576</id><published>2011-05-10T14:16:00.004-04:00</published><updated>2011-05-10T14:47:55.365-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow-Foundation-4'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs2010'/><category scheme='http://www.blogger.com/atom/ns#' term='teamBuild'/><title type='text'>Tfs2010 string collection build argument snags</title><content type='html'>So it's great that you can use custom types, or more advanced types in Tfs 2010 workflow builds than you could in MSBuild tasks. However the editor/designer support is severely lacking.&amp;nbsp;If you want an editor or designer that everyone can open up and even see what's set there, a custom assembly or vsix package has to be run on &lt;b&gt;every&lt;/b&gt; machine that would need to be able to see or edit that argument. Even for something as basic as List&amp;lt;string&amp;gt;&lt;br /&gt;&lt;br /&gt;After weeks of posting, forums, research etc... And trying &lt;a href="http://www.edsquared.com/2010/06/17/Need+A+List+Of+Strings+As+A+TFS+2010+Build+Process+Parameter.aspx"&gt;this post&lt;/a&gt; it turns out that the legacy string array is what functions.&lt;br /&gt;&lt;br /&gt;I wanted to &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Provide defaults in the template, so that the consumer could just leave it if they didn't want anything more specific.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Allow for full customizations, adding, editing, removing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Visibility of what's set for anyone looking at the build definition, not just people with a special assembly loaded.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;But if you have tried the others they may have saved to the tfs database and cause your attempts to edit or view them to fail as if the type you are now trying isn't working. Here's a list of things I tried:  &lt;ul&gt;&lt;li&gt;Microsoft.TeamFoundation.Build.Workflow.Activities.StringList&lt;/li&gt;&lt;li&gt;System.Collections.Specialized.StringDictionary&lt;ul&gt;&lt;li&gt;creating my own custom editor and adding it to the metadata&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;System.Collections.Generic.IList&amp;lt;string&amp;gt;&lt;/li&gt;&lt;li&gt;System.Collections.Generic.List&amp;lt;string&amp;gt;&lt;/li&gt;&lt;/ul&gt;As it turned out, I have no idea how many of these may have worked had the edit attempts I made not saved into the tfs database.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once I finally changed the variable name and tried String[] Array. All of the sudden, everything worked just fine.   Alternatively, clicking refresh in team explorer -&amp;gt; Edit Build Definition -&amp;gt; Process tab -&amp;gt; Show details arrow -&amp;gt; click refresh is supposed to work. I wound up renaming the variable.&amp;nbsp;&lt;/div&gt;&lt;div&gt;So I went back to try all the types I listed and a few more... and the first 3 worked:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft.TeamFoundation.Build.Workflow.Activities.StringList&lt;ul&gt;&lt;li&gt;No custom editor specified&lt;/li&gt;&lt;li&gt;Microsoft.TeamFoundation.Build.Controls.WpfStringListEditor&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;String[] Array&lt;/li&gt;&lt;/ul&gt;Entirely or partially failed to function:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;System.Collections.Specialized.StringDictionary&lt;/li&gt;&lt;li&gt;IList&amp;lt;string&amp;gt;&lt;/li&gt;&lt;li&gt;List&amp;lt;string&amp;gt;&lt;/li&gt;&lt;li&gt;IDictionary&amp;lt;string&amp;gt;&lt;/li&gt;&lt;li&gt;Dictionary&amp;lt;string&amp;gt;&lt;/li&gt;&lt;li&gt;Microsoft.TeamFoundation.Client.KeyValueOfStringString&lt;/li&gt;&lt;li&gt;KeyValuePair&amp;lt;string,string&amp;gt;[]&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&amp;nbsp;What I want is a dictionary&amp;lt;string,string&amp;gt; but I'm getting pretty sure there's no support for it outside of a custom package deployed to all machines that want to view the arguments or edit them.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-5958276526997825576?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/5958276526997825576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/tfs2010-string-collection-build.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5958276526997825576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5958276526997825576'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/tfs2010-string-collection-build.html' title='Tfs2010 string collection build argument snags'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-7084689839383234986</id><published>2011-05-10T13:57:00.002-04:00</published><updated>2011-06-28T08:14:59.909-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow-Foundation-4'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs2010'/><category scheme='http://www.blogger.com/atom/ns#' term='teamBuild'/><title type='text'>Copying a Tfs2010 Build template into same project</title><content type='html'>So, if you want to have a project where you work on TFS 2010 workflow build templates, and decide you want to conceptually branch a template into 2 parts based on an existing. &amp;nbsp;Copy, Paste, done?&lt;br /&gt;&lt;br /&gt;Nope. If your project is set up as mine is with Build Action: XamlAppDef and Custom Tool MsBuild:Compile,&lt;br /&gt;now there's a namespace/class conflict.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Q0kRJSflCJ8/Tcl61-fn_HI/AAAAAAAAAzM/-Tka06IaO-Y/s1600/Tfs2010%2BBuild%2BProject%2BSetup.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-Q0kRJSflCJ8/Tcl61-fn_HI/AAAAAAAAAzM/-Tka06IaO-Y/s320/Tfs2010%2BBuild%2BProject%2BSetup.PNG" width="137" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You get something like this&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-VHIZ9epeMDI/Tcl7r8ow_4I/AAAAAAAAAzU/lH9jH0o07vc/s1600/CopyPasteErrors.PNG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="82" width="320" src="http://3.bp.blogspot.com/-VHIZ9epeMDI/Tcl7r8ow_4I/AAAAAAAAAzU/lH9jH0o07vc/s320/CopyPasteErrors.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;2 changes are needed. Right click the template and view code.&lt;br /&gt;The first line that looks like&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;activity mc:Ignorable="sap" x:Class="Tfs2008Template.Process" .. xmlns:this="clr-namespace:Tfs2008Template" /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Which are the two points that need to be renamed. a sample rename would be:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;activity mc:Ignorable="sap" x:Class="Tfs2008Template2.Process" .. xmlns:this="clr-namespace:Tfs2008Template2" /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now your template compiles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-7084689839383234986?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/7084689839383234986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/coping-tfs2010-build-template-into-same.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7084689839383234986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7084689839383234986'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/coping-tfs2010-build-template-into-same.html' title='Copying a Tfs2010 Build template into same project'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Q0kRJSflCJ8/Tcl61-fn_HI/AAAAAAAAAzM/-Tka06IaO-Y/s72-c/Tfs2010%2BBuild%2BProject%2BSetup.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-7239501728314031990</id><published>2011-05-05T13:13:00.004-04:00</published><updated>2011-05-05T13:24:47.811-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='Reactive'/><title type='text'>My first Rx Attempt revisited</title><content type='html'>I have recently rediscovered my custom code analysis rules which included &lt;a href="http://imaginarydevelopment.blogspot.com/2010/09/my-first-rx-attempt.html"&gt;one&lt;/a&gt; that no longer compiles. The Rx team has made sweeping and breaking changes to the structure and namespaces in Rx. How difficult was the code update? 2 references removed, 1 added, and a single MethodName changed.&lt;br /&gt;&lt;br /&gt;I cleaned up the code, and discovered many improvements along the way.&lt;br /&gt;I do wish I could find a cleaner way to do this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush :csharp"&gt;var whenMethodsFound = Observable.FromEventPattern&amp;lt;NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs&amp;gt;&lt;br /&gt; act =&amp;gt; foundMethods.CollectionChanged += act,&lt;br /&gt;  act =&amp;gt; foundMethods.CollectionChanged -= act);&lt;/pre&gt;&lt;br /&gt;Idea:&lt;br /&gt;Add a mapping extension in extension method class&lt;br /&gt;Great for simple on the go, but manual for every class you want to do this with.&lt;br /&gt;&lt;br /&gt;Which would look like this&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush :csharp"&gt;public static IObservable&amp;lt;IEvent&amp;lt;PageEventArgs&amp;gt;&amp;gt; GetPublishingPageEvent(this DataFactory dataFactory)&lt;br /&gt;   {&lt;br /&gt;       return Observable.FromEvent((EventHandler&amp;lt;PageEventArgs&amp;gt; h) =&amp;gt; new PageEventHandler(h), &lt;br /&gt;                                h =&amp;gt; dataFactory.PublishingPage += h, &lt;br /&gt;                                h =&amp;gt; dataFactory.PublishingPage -= h);&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush :csharp"&gt;public override ProblemCollection Check(TypeNode type)&lt;br /&gt;    {&lt;br /&gt;      Debug.WriteLine("Checking type:"+type.FullName);&lt;br /&gt;      var initializer = type.Members.OfType&amp;lt;Method&amp;gt;( ).FirstOrDefault(x =&amp;gt; x.FullName==type.FullName+".InitializeComponent");&lt;br /&gt;&lt;br /&gt;      if (initializer==null)&lt;br /&gt;        return null;&lt;br /&gt;      Debug.WriteLine(initializer.FullName);&lt;br /&gt;      var constructorsWithNoInitCall = type.Members.OfType&amp;lt;Method&amp;gt;( ).Where(m =&amp;gt; m.NodeType==NodeType.InstanceInitializer).ToList( );&lt;br /&gt;      var visitedMethods = new HashSet&amp;lt;string&amp;gt;( );&lt;br /&gt;      var foundMethods = new ObservableHashSet&amp;lt;Method&amp;gt;( );&lt;br /&gt;      var whenMethodsFound = Observable.FromEventPattern&amp;lt;NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs&amp;gt;(act =&amp;gt; foundMethods.CollectionChanged += act,act =&amp;gt; foundMethods.CollectionChanged -= act);&lt;br /&gt;      whenMethodsFound.Where(e=&amp;gt;e.EventArgs.Action==NotifyCollectionChangedAction.Add).Select(x=&amp;gt;x.EventArgs)&lt;br /&gt;      .Subscribe(&lt;br /&gt;        e =&amp;gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;br /&gt;              if (constructorsWithNoInitCall.Any( ))&lt;br /&gt;                Parallel.ForEach(e.NewItems.Cast&amp;lt;Method&amp;gt;( ).Where(m =&amp;gt; visitedMethods.Any(v =&amp;gt; v==m.FullName)==false),&lt;br /&gt;                  i =&amp;gt;&lt;br /&gt;                  {&lt;br /&gt;&lt;br /&gt;                    lock (visitedMethods)&lt;br /&gt;                    {&lt;br /&gt;                      if (visitedMethods.Contains(i.FullName))&lt;br /&gt;                        return;&lt;br /&gt;                      visitedMethods.Add(i.FullName);&lt;br /&gt;&lt;br /&gt;                    }&lt;br /&gt;                    Debug.WriteLine("Visiting:"+i.FullName);&lt;br /&gt;                    var callers = (CallGraph.CallersFor(i));&lt;br /&gt;                    constructorsWithNoInitCall.RemoveAll(x =&amp;gt; callers.Any(c =&amp;gt; x.FullName==c.FullName));&lt;br /&gt;                    if (constructorsWithNoInitCall.Any( ))&lt;br /&gt;                      foreach (var item in callers.Where(c =&amp;gt; visitedMethods.Any(v =&amp;gt; v==c.FullName)==false))&lt;br /&gt;                      {&lt;br /&gt;                        foundMethods.Add(item);&lt;br /&gt;                      }&lt;br /&gt;                  });&lt;br /&gt;             &lt;br /&gt;          &lt;br /&gt;        }&lt;br /&gt;        );&lt;br /&gt;      foundMethods.Add(initializer);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      ReportProblem(constructorsWithNoInitCall, type);&lt;br /&gt;&lt;br /&gt;      return Problems;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-7239501728314031990?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/7239501728314031990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/my-first-rx-attempt-revisited.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7239501728314031990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7239501728314031990'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/my-first-rx-attempt-revisited.html' title='My first Rx Attempt revisited'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8370982559925608359</id><published>2011-05-04T16:31:00.000-04:00</published><updated>2011-05-04T16:31:02.149-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>ObjectDumper extended</title><content type='html'>This should be functionally equivalent to Microsoft's version just my own refactorings to support extensibility: No behavior should be different.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp"&gt;using System;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Reflection;&lt;br /&gt;&lt;br /&gt;namespace Utilities&lt;br /&gt;{&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// From Microsoft's http://archive.msdn.microsoft.com/cs2008samples/&lt;br /&gt;/// modified for extensibility&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;public class ObjectDumper&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// StaticWrite&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="element" /&gt;public static void Write(object element)&lt;br /&gt;{&lt;br /&gt;Write(element, 0);&lt;br /&gt;}&lt;br /&gt;protected static TextWriter DefaultWriter=Console.Out;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Static Write&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="element" /&gt;/// &lt;param name="depth" /&gt;public static void Write(object element, int depth)&lt;br /&gt;{&lt;br /&gt;Write(element, depth, DefaultWriter);&lt;br /&gt;}&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Static Write&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="element" /&gt;/// &lt;param name="depth" /&gt;/// &lt;param name="log" /&gt;public static void Write(object element, int depth, TextWriter log)&lt;br /&gt;{&lt;br /&gt;var dumper = new ObjectDumper(depth) {_writer = log};&lt;br /&gt;dumper.WriteObject(null, element);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private TextWriter _writer;&lt;br /&gt;int _pos;&lt;br /&gt;int _level;&lt;br /&gt;readonly int _depth;&lt;br /&gt;&lt;br /&gt;protected ObjectDumper(int depth)&lt;br /&gt;{&lt;br /&gt;_depth = depth;&lt;br /&gt;}&lt;br /&gt;protected ObjectDumper(int depth, TextWriter log):this(depth)&lt;br /&gt;{&lt;br /&gt;_writer = log;&lt;br /&gt;}&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// MethodWrite&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="s" /&gt;protected void WriteString(string s)&lt;br /&gt;{&lt;br /&gt;if (s != null)&lt;br /&gt;{&lt;br /&gt;_writer.Write(s);&lt;br /&gt;_pos += s.Length;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected virtual void WriteIndent()&lt;br /&gt;{&lt;br /&gt;for (int i = 0; i &amp;lt; _level; i++) _writer.Write("  ");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected void WriteLine()&lt;br /&gt;        {&lt;br /&gt;            _writer.WriteLine();&lt;br /&gt;            _pos = 0;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        protected virtual void WriteTab()&lt;br /&gt;        {&lt;br /&gt;            WriteString("  ");&lt;br /&gt;            while (_pos % 8 != 0) WriteString(" ");&lt;br /&gt;        }&lt;br /&gt;        protected  void DescendIfDepthAllows(Action doIfDescend)&lt;br /&gt;        {&lt;br /&gt;            if (_level &amp;lt; _depth)&lt;br /&gt;            {&lt;br /&gt;                _level++;&lt;br /&gt;                doIfDescend();&lt;br /&gt;                _level--;&lt;br /&gt;               &lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected virtual  void WriteObject(string prefix, object element)&lt;br /&gt;        {&lt;br /&gt;            if (element == null || element is ValueType || element is string)&lt;br /&gt;            {&lt;br /&gt;                WriteIndent();&lt;br /&gt;                WriteString(prefix);&lt;br /&gt;                WriteValue(element);&lt;br /&gt;                WriteLine();&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                var enumerableElement = element as IEnumerable;&lt;br /&gt;                if (enumerableElement != null)&lt;br /&gt;                {&lt;br /&gt;                    WriteEnumerable(prefix, enumerableElement);&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    WriteWithReflection(element, prefix);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected virtual void WriteWithReflection(object element, string prefix)&lt;br /&gt;        {&lt;br /&gt;            MemberInfo[] members = element.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance);&lt;br /&gt;            WriteIndent();&lt;br /&gt;            WriteString(prefix);&lt;br /&gt;            bool propWritten = false;&lt;br /&gt;            foreach (MemberInfo m in members)&lt;br /&gt;            {&lt;br /&gt;                var f = m as FieldInfo;&lt;br /&gt;                var p = m as PropertyInfo;&lt;br /&gt;                if (f != null || p != null)&lt;br /&gt;                {&lt;br /&gt;                    if (propWritten)&lt;br /&gt;                    {&lt;br /&gt;                        WriteTab();&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        propWritten = true;&lt;br /&gt;                    }&lt;br /&gt;                    WriteString(m.Name);&lt;br /&gt;                    WriteString("=");&lt;br /&gt;                    Type t = f != null ? f.FieldType : p.PropertyType;&lt;br /&gt;                    &lt;br /&gt;                    if (t.IsValueType || t == typeof(string))&lt;br /&gt;                    {&lt;br /&gt;                         WriteValue(GetValue(element, m, f, p)); &lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        WriteString(typeof (IEnumerable).IsAssignableFrom(t) ? "..." : "{ }");&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            if (propWritten) WriteLine();&lt;br /&gt;            WriteReflectionChildren(element, members);&lt;br /&gt;        }&lt;br /&gt;        protected virtual object GetValue(object element, MemberInfo m, FieldInfo f, PropertyInfo p)&lt;br /&gt;        {&lt;br /&gt;           return f != null ? f.GetValue(element) : p.GetValue(element, null);&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;        protected void WriteReflectionChildren(object element, MemberInfo[] members)&lt;br /&gt;        {&lt;br /&gt;            if (_level &amp;lt; _depth)&lt;br /&gt;            {&lt;br /&gt;                foreach (MemberInfo m in members)&lt;br /&gt;                {&lt;br /&gt;                    var f = m as FieldInfo;&lt;br /&gt;                    var p = m as PropertyInfo;&lt;br /&gt;                    if (f != null || p != null)&lt;br /&gt;                    {&lt;br /&gt;                        Type t = f != null ? f.FieldType : p.PropertyType;&lt;br /&gt;                        if (!(t.IsValueType || t == typeof(string)))&lt;br /&gt;                        {&lt;br /&gt;                            &lt;br /&gt;                            object value =GetValue(element,m,f,p);&lt;br /&gt;                            if (value != null)&lt;br /&gt;                            {&lt;br /&gt;                                _level++;&lt;br /&gt;                                WriteObject(m.Name + ": ", value);&lt;br /&gt;                                _level--;&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected virtual void WriteEnumerable(string prefix, IEnumerable enumerableElement)&lt;br /&gt;        {&lt;br /&gt;            foreach (object item in enumerableElement)&lt;br /&gt;            {&lt;br /&gt;                if (item is IEnumerable &amp;amp;&amp;amp; !(item is string))&lt;br /&gt;                {&lt;br /&gt;                    WriteIndent();&lt;br /&gt;                    WriteString(prefix);&lt;br /&gt;                    WriteString("...");&lt;br /&gt;                    WriteLine();&lt;br /&gt;                    if (_level &amp;lt; _depth)&lt;br /&gt;                    {&lt;br /&gt;                        _level++;&lt;br /&gt;                        WriteObject(prefix, item);&lt;br /&gt;                        _level--;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    WriteObject(prefix, item);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        protected virtual void WriteValue(object o)&lt;br /&gt;        {&lt;br /&gt;            if (o == null)&lt;br /&gt;            {&lt;br /&gt;                WriteString("null");&lt;br /&gt;            }&lt;br /&gt;            else if (o is DateTime)&lt;br /&gt;            {&lt;br /&gt;                WriteString(((DateTime)o).ToShortDateString());&lt;br /&gt;            }&lt;br /&gt;            else if (o is ValueType || o is string)&lt;br /&gt;            {&lt;br /&gt;                WriteString(o.ToString());&lt;br /&gt;            }&lt;br /&gt;            else if (o is IEnumerable)&lt;br /&gt;            {&lt;br /&gt;                WriteString("...");&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                WriteString("{ }");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Note that this code currently throws an exception if the object passed into it is a Type, for example:  &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp"&gt;var type=typeof(string);&lt;br /&gt;ObjectDumper.Write(type);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Throws: TargetInvocationException: Exception has been thrown by the target of an invocation.  So... the refactoring commenced and the derived class that handles types, and also KeyValuePairs   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp"&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Reflection;&lt;br /&gt;&lt;br /&gt;namespace TechnicalDebtTaskLib.Utilities&lt;br /&gt;{&lt;br /&gt;    public class ObjectDumperExtended : ObjectDumper&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        public new static void Write(object element)&lt;br /&gt;        {&lt;br /&gt;            Write(element, 0);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public new static void Write(object element, int depth)&lt;br /&gt;        {&lt;br /&gt;            Write(element, depth, DefaultWriter);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public new static void Write(object element, int depth, TextWriter log)&lt;br /&gt;        {&lt;br /&gt;            var dumper = new ObjectDumperExtended(depth,log) ;&lt;br /&gt;            dumper.WriteObject(null, element);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static string ToDumpString(object element, int depth = 0)&lt;br /&gt;        {&lt;br /&gt;            using (var textWriter = new StringWriter())&lt;br /&gt;            {&lt;br /&gt;                Write(element, depth, textWriter);&lt;br /&gt;                return textWriter.ToString();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        protected override void WriteObject(string prefix, object element)&lt;br /&gt;        {&lt;br /&gt;            if (element != null &amp;amp;&amp;amp; element is Type )&lt;br /&gt;            {&lt;br /&gt;                WriteType(prefix, element as Type);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;                base.WriteObject(prefix, element);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void WriteType(string prefix, Type type)&lt;br /&gt;        {&lt;br /&gt;            switch (_typeStrategy)&lt;br /&gt;            {&lt;br /&gt;                case TypeStrategy.Custom:&lt;br /&gt;                    WriteString(_writeTypeStrategy(prefix,type));&lt;br /&gt;                    break;&lt;br /&gt;                case TypeStrategy.Extended:&lt;br /&gt;                    base.WriteObject(prefix,type);&lt;br /&gt;                    break;&lt;br /&gt;                default:&lt;br /&gt;                    WriteString(prefix + type.ToString());&lt;br /&gt;                    break;&lt;br /&gt;            }&lt;br /&gt;          &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        protected override object GetValue(object element, MemberInfo m, FieldInfo f, PropertyInfo p)&lt;br /&gt;        {&lt;br /&gt;            var blackList = new[] { "DeclaringMethod", "GenericParameterAttributes", "GenericParameterPosition" };&lt;br /&gt;            if (element is Type &amp;amp;&amp;amp; blackList.Contains(m.Name))&lt;br /&gt;            {&lt;br /&gt;                return "[UnsafeToReflect]";&lt;br /&gt;            }&lt;br /&gt;            return base.GetValue(element, m, f, p);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static TypeStrategy _typeStrategy = TypeStrategy.Basic;&lt;br /&gt;        &lt;br /&gt;        public enum TypeStrategy&lt;br /&gt;        {&lt;br /&gt;            Basic=1,&lt;br /&gt;            Custom=2,&lt;br /&gt;            Extended=3&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static Func&amp;lt;string, Type, string&amp;gt; _writeTypeStrategy;&lt;br /&gt;        public static void SetTypeStrategy(Func&amp;lt;string,Type ,string&amp;gt; formatter)&lt;br /&gt;        {&lt;br /&gt;            if (formatter == null)&lt;br /&gt;                _typeStrategy = TypeStrategy.Basic;&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                _writeTypeStrategy = formatter;&lt;br /&gt;                _typeStrategy = TypeStrategy.Custom;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;      public static void SetTypeStrategyBasic()&lt;br /&gt;      {&lt;br /&gt;          _typeStrategy = TypeStrategy.Basic;&lt;br /&gt;          _writeTypeStrategy = null;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;        public static void SetTypeStrategyExtended()&lt;br /&gt;        {&lt;br /&gt;            _typeStrategy = TypeStrategy.Extended;&lt;br /&gt;            _writeTypeStrategy = null;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static Func&amp;lt;string&amp;gt; WriteIndentStrategy { get; set; }&lt;br /&gt;        protected override void WriteIndent()&lt;br /&gt;        {&lt;br /&gt;            if (WriteIndentStrategy != null)&lt;br /&gt;                WriteString(WriteIndentStrategy());&lt;br /&gt;            else&lt;br /&gt;                base.WriteIndent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static Func&amp;lt;string&amp;gt; WriteTabStrategy { get; set; }&lt;br /&gt;        protected override void WriteTab()&lt;br /&gt;        {&lt;br /&gt;            if (WriteTabStrategy != null)&lt;br /&gt;                WriteString(WriteTabStrategy());&lt;br /&gt;            else&lt;br /&gt;                base.WriteTab();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private ObjectDumperExtended(int depth,TextWriter log) : base(depth,log){}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        protected override void WriteValue(object o)&lt;br /&gt;        {&lt;br /&gt;            if (o == null)&lt;br /&gt;            {&lt;br /&gt;                WriteString("null");&lt;br /&gt;            }&lt;br /&gt;            else if (o is DateTime)&lt;br /&gt;            {&lt;br /&gt;                WriteString(((DateTime)o).ToShortDateString());&lt;br /&gt;            }&lt;br /&gt;            else if (o.GetType().IsGenericType)&lt;br /&gt;            {&lt;br /&gt;                var baseType = o.GetType().GetGenericTypeDefinition();&lt;br /&gt;                if (baseType == typeof(KeyValuePair&amp;lt;,&amp;gt;))&lt;br /&gt;                {&lt;br /&gt;                    var argTypes = baseType.GetGenericArguments();&lt;br /&gt;                    WriteKeyValuePair(o, argTypes[0], argTypes[1]);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;            else if (o is ValueType || o is string)&lt;br /&gt;            {&lt;br /&gt;                WriteString(o.ToString());&lt;br /&gt;            }&lt;br /&gt;            else if (o is IEnumerable)&lt;br /&gt;            {&lt;br /&gt;                WriteString("...");&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                WriteString("{ }");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void WriteKeyValuePair(object o, Type keyType, Type valueType)&lt;br /&gt;        {&lt;br /&gt;            var key = o.GetType().GetProperty("Key").GetValue(o, null);&lt;br /&gt;            var value = o.GetType().GetProperty("Value").GetValue(o, null);&lt;br /&gt;            WriteObject(keyType.Name + ":", key);&lt;br /&gt;            WriteIndent();&lt;br /&gt;            WriteObject(valueType.Name + ":", value);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8370982559925608359?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8370982559925608359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/objectdumper-extended.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8370982559925608359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8370982559925608359'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/objectdumper-extended.html' title='ObjectDumper extended'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8671916763288731373</id><published>2011-05-02T17:17:00.003-04:00</published><updated>2011-05-04T16:18:39.473-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow-Foundation-4'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>An ActivityDesigner for InvokeAction</title><content type='html'>Building off of An &lt;a href="http://blogs.msdn.com/b/tilovell/archive/2010/02/26/an-activity-designer-for-invokeaction-t.aspx"&gt;ActivityDesigner for InvokeAction&lt;t&gt;&lt;/t&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The only changes needed to make it work for InvokeAction was in the Xaml&lt;br /&gt;&lt;br /&gt;&lt;pre class='brush: xml'&gt;&amp;lt; WrapPanel name="ArgumentWrapPanel"&amp;gt;&lt;br /&gt;&lt;/pre&gt;and the OnModelItemChanged override:&lt;br /&gt;&lt;br /&gt;&lt;pre class='brush: csharp'&gt;&amp;nbsp;//set ETB expression type&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var generics = invokeActionObj.GetType().GetGenericArguments();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (generics.Length &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.ArgumentETB.ExpressionType = generics[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.ArgumentETB.IsEnabled = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.ArgumentETB.Expression = null;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.ArgumentWrapPanel.Visibility = System.Windows.Visibility.Collapsed;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-iYklV8eRdgo/Tb8eVR8xtOI/AAAAAAAAAy8/8EDVvwgL_BM/s1600/InvokeAction.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://4.bp.blogspot.com/-iYklV8eRdgo/Tb8eVR8xtOI/AAAAAAAAAy8/8EDVvwgL_BM/s640/InvokeAction.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8671916763288731373?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8671916763288731373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/activitydesigner-for-invokeaction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8671916763288731373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8671916763288731373'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/05/activitydesigner-for-invokeaction.html' title='An ActivityDesigner for InvokeAction'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-iYklV8eRdgo/Tb8eVR8xtOI/AAAAAAAAAy8/8EDVvwgL_BM/s72-c/InvokeAction.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8519343404509718123</id><published>2011-04-21T14:44:00.000-04:00</published><updated>2011-04-21T14:44:42.876-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WindowsXP'/><title type='text'>Command line shortcuts</title><content type='html'>for service starting stopping or even remote event viewing...shortcuts&lt;br /&gt;&lt;br /&gt;I made a batch file that does this&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee;"&gt;set /p compname=Enter the computer name:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee;"&gt;start mmc compmgmt.msc /computer:\\%compname%&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #eeeeee;"&gt;set compname=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The original had &lt;span class="Apple-style-span" style="background-color: #eeeeee;"&gt;c:\windows\system32\compmgmt.msc&lt;/span&gt;&amp;nbsp;but on my system it doesn't appear to be needed&lt;br /&gt;you can replace compmgmt.msc with services.msc or eventvwr.msc&lt;br /&gt;&lt;br /&gt;Also to pipe into notepad:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;set /p compname=Enter the computer name:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;sc \\%compname% query type= service | find "SERVICE_" &amp;gt; %temp%\tmpsvc.txt&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;start notepad %temp%\tmpsvc.txt&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;ping -n 2 127.0.0.1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;del %temp%\tmpsvc.txt&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #f3f3f3;"&gt;set compname=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;the ping is there because the delete would fire much faster than the notepad starting up, so it's a sleep hack.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8519343404509718123?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8519343404509718123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/04/command-line-shortcuts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8519343404509718123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8519343404509718123'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/04/command-line-shortcuts.html' title='Command line shortcuts'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-976469317763510299</id><published>2011-03-21T21:09:00.001-04:00</published><updated>2011-03-21T21:15:22.113-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EntityFramework'/><title type='text'>EF4 + ESQL for not supported options</title><content type='html'>So say you want to support wildcard searches against a SQL db. Yes this is probably horrible performance wise, but... useful or as an example how to do ESQL against an EF4 context.&lt;br /&gt;&lt;br /&gt;Linqpad against my EF4 context:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;internal&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IPlayerFull&lt;/span&gt;&amp;gt;&amp;nbsp;SearchForPlayer(&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;playerNameLike,&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;?&amp;nbsp;universeId)&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;q=&amp;nbsp;&lt;/span&gt;from&lt;/span&gt;&amp;nbsp;p&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;q.Players.Where(p&amp;nbsp;=&amp;gt;&amp;nbsp;p.UniverseId&amp;nbsp;==&amp;nbsp;universeId)&amp;nbsp;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;.Where(&lt;span style="color: #a31515;"&gt;"it.Name&amp;nbsp;like&amp;nbsp;@Name"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;ObjectParameter[]&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;ObjectParameter(&lt;span style="color: #a31515;"&gt;"Name"&lt;/span&gt;,&amp;nbsp;playerNameLike)&amp;nbsp;})&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;.Where(p&amp;nbsp;=&amp;gt;&amp;nbsp;p.UniverseId&amp;nbsp;==&amp;nbsp;universeId)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;orderby&lt;/span&gt;&amp;nbsp;p.Name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;select&lt;/span&gt;&amp;nbsp;p;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;q;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: consolas;"&gt;bizarre eh? EF4 note, not related to ESQL:&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: consolas;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: consolas;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: consolas;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: consolas;"&gt;Also note it does not automatically deal with null properly... for instance if the query was supposed to match exactly with the value in the universeId and that value was null... to get the proper handling you'd have to write out...&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: consolas;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;.Where(p=&amp;gt;p.UniverseId==universeId&amp;nbsp;||&amp;nbsp;(universeId.HasValue==&lt;span style="color: blue;"&gt;false&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;p.UniverseId==&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&amp;nbsp;)&lt;/pre&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;or&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;.Where(p=&amp;gt;p.UniverseId==universeId&amp;nbsp;||&amp;nbsp;(universeId==&lt;span style="color: blue;"&gt;null&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;p.UniverseId==&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&amp;nbsp;)&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;but what I actually needed for this situation was more like: &lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;.Where(p&amp;nbsp;=&amp;gt;&amp;nbsp;p.UniverseId&amp;nbsp;==&amp;nbsp;universeId&amp;nbsp;||&amp;nbsp;(universeId&amp;nbsp;==&amp;nbsp;1&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;p.UniverseId&amp;nbsp;==&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;))&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;because... the data and code were never properly and cleanly converted in the event of a legacy app connecting and trying to query. universeId should not be nullable on either side.&lt;/pre&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-976469317763510299?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/976469317763510299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/03/ef4-esql-for-not-supported-options.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/976469317763510299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/976469317763510299'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/03/ef4-esql-for-not-supported-options.html' title='EF4 + ESQL for not supported options'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-5098969396857537950</id><published>2011-03-14T11:57:00.000-04:00</published><updated>2011-03-14T11:57:42.486-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code standards'/><title type='text'>Class organization</title><content type='html'>I am putting together a theory of &amp;nbsp;class code readability organization with the assertions that&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Classes consistently organized are easier to read and understand&lt;/li&gt;&lt;li&gt;Fields should be private&lt;/li&gt;&lt;li&gt;Consistent internal state is preferable to passing around invalid objects that can communicate they are invalid (immutability vs &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo.aspx"&gt;IDataErrorInfo&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;This layout is my hypothesis of what a good consistent layout would be:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;private fields&lt;/li&gt;&lt;li&gt;constructor(s)&lt;/li&gt;&lt;li&gt;Initializers and wiring&lt;/li&gt;&lt;ol&gt;&lt;li&gt;for example event wiring&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;non-public properties&lt;/li&gt;&lt;li&gt;public operations&lt;/li&gt;&lt;li&gt;public properties&lt;/li&gt;&lt;li&gt;explicit event plumbing&lt;/li&gt;&lt;ol&gt;&lt;li&gt;For example designer auto-generated event handlers&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Other plumbing or utilities&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;As with any theory or concept, the main ways to learn from it are&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;to communicate it out for feedback&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;other people's viewpoints can help you find your blind spots&lt;/li&gt;&lt;li&gt;you can become aware of situations where the idea or solution doesn't fit and why&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;apply it&lt;/li&gt;&lt;li&gt;look at it with a critical eye for places or reasons that it works well and places it doesn't&lt;/li&gt;&lt;ul&gt;&lt;li&gt;keep an open mind that one size does not fit all&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;solicit feedback for applications of the idea&lt;/li&gt;&lt;ul&gt;&lt;li&gt;other people can better see past your blind spots&lt;/li&gt;&lt;li&gt;explaining it helps keep or find perspective&lt;/li&gt;&lt;li&gt;any critical thinking or discussion is likely to be&amp;nbsp;beneficial&amp;nbsp;to all involved parties&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-5098969396857537950?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/5098969396857537950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/03/class-organization.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5098969396857537950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5098969396857537950'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/03/class-organization.html' title='Class organization'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-3335305301575792223</id><published>2011-01-31T11:16:00.000-05:00</published><updated>2011-01-31T11:16:19.669-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Long pages no more named anchors... link someone to a specific part?</title><content type='html'>I've wanted to do this so many times.... Link someone to a specific part or section of a long web page and had no idea it was possible. It's become a hidden feature since in the old days people used named anchors (&amp;lt; a href="#anchorname"&amp;gt;Browser anchor link text. This was easy to right click and select copy location or copy shortcut, etc..&lt;br /&gt;&lt;br /&gt;I don't think there's a UI based shorthand any longer but apparently:&lt;br /&gt;&lt;br /&gt;example showing usage (with the source I found this information)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://w3fools.com/#html_links"&gt;http://w3fools.com/#html_links&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-3335305301575792223?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/3335305301575792223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/01/long-pages-no-more-named-anchors-link.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3335305301575792223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3335305301575792223'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2011/01/long-pages-no-more-named-anchors-link.html' title='Long pages no more named anchors... link someone to a specific part?'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-5344982216671542544</id><published>2010-11-30T11:15:00.000-05:00</published><updated>2010-11-30T11:15:40.285-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><title type='text'>Project Ideas Numbers - Fibonacci Sequence</title><content type='html'>Tackling the Fibonacci project was far easier but still yielded new knowledge.&lt;br /&gt;&lt;br /&gt;Recursion is &lt;a href="http://shiman.wordpress.com/2008/05/28/recursion-vs-iteration/"&gt;horrible&lt;/a&gt; on performance compared to iterative or tail-recursion (assuming the compiler supports tail optimization).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;FibonacciSequence&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;long&lt;/span&gt;&amp;nbsp;CalculateRecurse(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;term)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(term&amp;lt;1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ArgumentOutOfRangeException&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"term"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"must&amp;nbsp;be&amp;nbsp;&amp;gt;0"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;&amp;nbsp;f0&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;byte&lt;/span&gt;&amp;nbsp;f1&amp;nbsp;=&amp;nbsp;1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(term&amp;lt;2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;term;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;CalculateRecurse(term-1)+CalculateRecurse(term-2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;long&lt;/span&gt;&amp;nbsp;CalculateWhile(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;term)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;1,&amp;nbsp;k&amp;nbsp;=&amp;nbsp;0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;while&lt;/span&gt;&amp;nbsp;(i&amp;lt;=term)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;k+=i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;++i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;k;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;long&lt;/span&gt;&amp;nbsp;CalculateTail(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;term)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(term&amp;lt;1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ArgumentOutOfRangeException&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"term"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"must&amp;nbsp;be&amp;nbsp;&amp;gt;0"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;CalculateTail(term,&amp;nbsp;1,&amp;nbsp;1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;long&lt;/span&gt;&amp;nbsp;CalculateTail(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;term,&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;iter,&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;acc)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(iter==term)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;acc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;CalculateTail(term,&amp;nbsp;++iter,&amp;nbsp;acc+iter);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-5344982216671542544?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/5344982216671542544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/project-ideas-numbers-fibonacci.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5344982216671542544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5344982216671542544'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/project-ideas-numbers-fibonacci.html' title='Project Ideas Numbers - Fibonacci Sequence'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-632358304578298403</id><published>2010-11-30T10:43:00.000-05:00</published><updated>2010-11-30T10:43:19.622-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><title type='text'>Project Ideas</title><content type='html'>I've stumbled on an interesting coder's project ideas &lt;a href="http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/"&gt;list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then tackled the first one in my own way. The goal is to&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;strong class="bbc" style="font-weight: bold !important; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Find PI to the Nth Digit&lt;/strong&gt;&amp;nbsp;– Enter a number and have the program generate PI up to that many decimal places. Keep a limit to how far the program will go.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;Rather than do exactly that, I wanted to start small, and work through some of the existing formulas I could find and put them into C#. That would be a step in the right direction towards the goal. I think the actual project idea is currently out of my range, with little to gain from going farther than I did. I learned much more about floating point math, decimal vs. double, and binary vs. decimal vs. hexadecimal math.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;Code Follows:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &lt;a href="http://en.wikipedia.org/wiki/Pi"&gt;http://en.wikipedia.org/wiki/Pi&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;seealso cref="&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems"&gt;http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems&lt;/a&gt;"/&amp;gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PiCalculator&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &lt;a href="http://en.wikipedia.org/wiki/Numerical_approximations_of_%CF%80"&gt;http://en.wikipedia.org/wiki/Numerical_approximations_of_%CF%80&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Euler( )&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; 20*Math.Atan((&lt;span class="kwrd"&gt;double&lt;/span&gt;)1/7)+8*Math.Atan((&lt;span class="kwrd"&gt;double&lt;/span&gt;)3/79);&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; MachinLike( )&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; 4*(4*Math.Atan((&lt;span class="kwrd"&gt;double&lt;/span&gt;)1/5)-Math.Atan((&lt;span class="kwrd"&gt;double&lt;/span&gt;)1/239));&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Archimedes1( )&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="kwrd"&gt;double&lt;/span&gt; archimedes1=0;&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;//most accurate number this formula can give on a computer&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; magicNumber = 16;&lt;br /&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;double&lt;/span&gt; previousT=1.0/Math.Sqrt(3.0);&lt;br /&gt;      &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;double&lt;/span&gt; i = 0; i&amp;lt;magicNumber+1; i++)&lt;br /&gt;      {&lt;br /&gt;        archimedes1=6.0*Math.Pow(2.0, i)*previousT;&lt;br /&gt;        previousT=(Math.Sqrt(Math.Pow(previousT, 2.0)+1.0)-1.0)/previousT;&lt;br /&gt;      }&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; archimedes1; &lt;span class="rem"&gt;//gives the expected 8 digits of precision &lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// 3.1415926 wrong digits - 7174155&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Archimedes2( )&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="rem"&gt;//most accurate number this formula can give on a computer&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; magicNumber = 23;&lt;br /&gt;      &lt;span class="kwrd"&gt;double&lt;/span&gt; archimedes2 = 0;&lt;br /&gt;      &lt;span class="kwrd"&gt;double&lt;/span&gt; previousT=1.0/Math.Sqrt(3.0);&lt;br /&gt;      &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;double&lt;/span&gt; i = 0; i&amp;lt;magicNumber+1; i++)&lt;br /&gt;      {&lt;br /&gt;        archimedes2=6.0*Math.Pow(2.0, i)*previousT;&lt;br /&gt;        previousT=previousT/(Math.Sqrt(Math.Pow(previousT, 2)+1)+1.0);&lt;br /&gt;      }&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; archimedes2; &lt;span class="rem"&gt;//returns 13 digits of precision instead of the expected 15&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;// returns 3.1415926535898 instead of 3.14159265358979&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &lt;a href="http://pi.lacim.uqam.ca/eng/approximations_en.html"&gt;http://pi.lacim.uqam.ca/eng/approximations_en.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Plouffe()&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; Math.Log10((&lt;span class="kwrd"&gt;double&lt;/span&gt;) 28102/1277)*(&lt;span class="kwrd"&gt;double&lt;/span&gt;) 125/123;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Plouffe2()&lt;br /&gt;    {&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; Math.Pow(276694819753963.0/226588, 1.0/158.0)+2.0;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-632358304578298403?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/632358304578298403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/project-ideas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/632358304578298403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/632358304578298403'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/project-ideas.html' title='Project Ideas'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-3501214117855775954</id><published>2010-11-29T20:46:00.000-05:00</published><updated>2010-11-29T20:46:41.001-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EF4'/><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='EntityFramework'/><title type='text'>EF4 ToTraceString Method</title><content type='html'>So if your &lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns"&gt;SoC&lt;/a&gt;&amp;nbsp;is just a little muddy on the db-code to query-code like mine appears to be currently you might find yourself wanting to access the ToTraceString() method cleanly on the query side without bringing in EF4 using statements or references.&lt;br /&gt;&lt;br /&gt;I accomplished this using the partial class feature.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Configuration;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Linq;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Data.EntityClient;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;StarfleetCommanderSecure.EF4&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;partial&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SfeEntities&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;ToTraceString&lt;t&gt;(&lt;span style="color: #2b91af;"&gt;IQueryable&lt;/span&gt;&lt;t&gt;&amp;nbsp;query)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;objectQuery&amp;nbsp;=&amp;nbsp;(System.Data.Objects.&lt;span style="color: #2b91af;"&gt;ObjectQuery&lt;/span&gt;)&amp;nbsp;query;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;objectQuery.ToTraceString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/t&gt;&lt;/t&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-3501214117855775954?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/3501214117855775954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/ef4-totracestring-method.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3501214117855775954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3501214117855775954'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/ef4-totracestring-method.html' title='EF4 ToTraceString Method'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-389110368144212432</id><published>2010-11-10T16:04:00.001-05:00</published><updated>2010-11-10T16:05:30.714-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Generation'/><category scheme='http://www.blogger.com/atom/ns#' term='T4'/><category scheme='http://www.blogger.com/atom/ns#' term='EnvDte'/><title type='text'>Static reflection... or T4 with EnvDte?</title><content type='html'>So I like static reflection for getting Class, Property or Method names for databinding, but a lot of people aren't comfortable with the possible performance implications, or for whatever reason (usually &lt;a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt"&gt;FUD&lt;/a&gt;). &amp;nbsp;I've found an alternative using T4+EnvDte.&lt;br /&gt;&lt;br /&gt;Code is included in the link...&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ template language=&lt;span class="str"&gt;"C#"&lt;/span&gt; hostspecific=&lt;span class="str"&gt;"True"&lt;/span&gt; debug=&lt;span class="str"&gt;"True"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ output extension=&lt;span class="str"&gt;"cs"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ assembly name=&lt;span class="str"&gt;"System.Core"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ assembly name=&lt;span class="str"&gt;"System.Xml"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ assembly name=&lt;span class="str"&gt;"Microsoft.VisualStudio.Shell.Interop.8.0"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ assembly name=&lt;span class="str"&gt;"EnvDTE"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ assembly name=&lt;span class="str"&gt;"EnvDTE80"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"System.Collections.Generic"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"System.IO"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"System.Linq"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"System.Text"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"System.Text.RegularExpressions"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"Microsoft.VisualStudio.Shell.Interop"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"EnvDTE"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;#@ import &lt;span class="kwrd"&gt;namespace&lt;/span&gt;=&lt;span class="str"&gt;"EnvDTE80"&lt;/span&gt; #&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;#&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;var serviceProvider = Host &lt;span class="kwrd"&gt;as&lt;/span&gt; IServiceProvider;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (serviceProvider != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dte = serviceProvider.GetService(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(SDTE)) &lt;span class="kwrd"&gt;as&lt;/span&gt; DTE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;// Fail if we couldn't get the DTE. This can happen when trying to run in TextTransform.exe&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (Dte == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;"T4Generator can only execute through the Visual Studio host"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var project &lt;span class="kwrd"&gt;in&lt;/span&gt; Dte.Solution.Projects.Cast&amp;lt;Project&amp;gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.Where(p=&amp;gt; p.CodeModel!=&lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; p.Name!=&lt;span class="str"&gt;"Solution Items"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//var appRoot= Path.GetDirectoryName(project.FullName) + '\\';&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var rootNamespace = project.Properties.Item(&lt;span class="str"&gt;"RootNamespace"&lt;/span&gt;).Value.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"//Project:"&lt;/span&gt;+project.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;gt;&amp;lt;#&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);#&amp;gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; &amp;lt;#= rootNamespace #&amp;gt;.T4Helper{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;#&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"#region "&lt;/span&gt;+project.Name+ &lt;span class="str"&gt;" properties"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var prop &lt;span class="kwrd"&gt;in&lt;/span&gt; project.Properties.Cast&amp;lt;EnvDTE.Property&amp;gt;())&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Write(&lt;span class="str"&gt;"//"&lt;/span&gt;+prop.Name+&lt;span class="str"&gt;" : "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(prop.Value.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"Exception : "&lt;/span&gt;+ex.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"#endregion"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ProcessFileCodeModel(project);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"}"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;#&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;#+&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//const string Kind_PhysicalFolder = "{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}";&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;bool&lt;/span&gt; AlwaysKeepTemplateDirty = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;static&lt;/span&gt; DTE Dte;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessFileCodeModel(Project project)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var item &lt;span class="kwrd"&gt;in&lt;/span&gt; project.ProjectItems.Cast&amp;lt;ProjectItem&amp;gt;())&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"//Found item:"&lt;/span&gt;+item.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt;(item.FileCodeModel!=&lt;span class="kwrd"&gt;null&lt;/span&gt; )&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"//Found CodeModel:"&lt;/span&gt;+item.FileCodeModel.GetType().FullName);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RecurseFindElements(item.FileCodeModel.CodeElements);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;void&lt;/span&gt; WriteMapping(CodeClass codeClass)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"///"&lt;/span&gt;+codeClass.FullName);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"public static class "&lt;/span&gt;+MakeIntoValidIdentifier(codeClass.Name)+&lt;span class="str"&gt;"{"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PushIndent(&lt;span class="str"&gt;"\t"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"public static string MetaName{get{return \""&lt;/span&gt;+codeClass.Name+&lt;span class="str"&gt;"\";}}"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RecurseFindElements(codeClass.Children); &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"}"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;void&lt;/span&gt; WriteMapping(CodeProperty codeProperty)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"///"&lt;/span&gt;+codeProperty.FullName);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"public static string Meta"&lt;/span&gt;+MakeIntoValidIdentifier(codeProperty.Name)+&lt;span class="str"&gt;"{ get{ return \""&lt;/span&gt;+&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;codeProperty.Name+&lt;span class="str"&gt;"\";}}"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//WriteLine("public static string MetaBinding"+MakeIntoValidIdentifier(codeProperty.Name)+"{ get{ return \""&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//+codeProperty.Parent.Name+"."+codeProperty.Name+"\";}}");&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;void&lt;/span&gt; WriteMapping(CodeFunction codeFunction)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"///"&lt;/span&gt;+codeFunction.FullName);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"public static string Meta"&lt;/span&gt;+codeFunction.Name+&lt;span class="str"&gt;"{ get{ return \""&lt;/span&gt;+&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;codeFunction.Name+&lt;span class="str"&gt;"\";}}"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RecurseFindElements(CodeElements codeElements)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;var q=codeElements.Cast&amp;lt;CodeElement&amp;gt;( )&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//.Where(x =&amp;gt;x is CodeInterface||x is CodeClass || x is CodeNamespace) //&amp;amp;&amp;amp; ((CodeInterface)x).Attributes.Count&amp;gt;0)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//.Where(x =&amp;gt; x.Name.StartsWith("System")==false)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//.Where(x =&amp;gt; x.Name.StartsWith("Infragistics")==false)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//.Where(x =&amp;gt; x.Name.StartsWith("Microsoft")==false)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//.Where(x =&amp;gt; x.Name.StartsWith("ICSharpCode")==false)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var functions=&lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var element &lt;span class="kwrd"&gt;in&lt;/span&gt; q)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (element &lt;span class="kwrd"&gt;is&lt;/span&gt; CodeFunction &amp;amp;&amp;amp; functions.Contains(element.Name)==&lt;span class="kwrd"&gt;false&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteMapping(element &lt;span class="kwrd"&gt;as&lt;/span&gt; CodeFunction);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;functions.Add(element.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt;(element &lt;span class="kwrd"&gt;is&lt;/span&gt; CodeProperty)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteMapping(element &lt;span class="kwrd"&gt;as&lt;/span&gt; CodeProperty);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (element &lt;span class="kwrd"&gt;is&lt;/span&gt; CodeInterface)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var c = (CodeInterface)element;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RecurseFindElements(c.Members);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (element &lt;span class="kwrd"&gt;is&lt;/span&gt; CodeClass)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var c = (CodeClass)element;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;//verify element is a project element not an external&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (c.InfoLocation==vsCMInfoLocation.vsCMInfoLocationProject)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteMapping(c);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (element &lt;span class="kwrd"&gt;is&lt;/span&gt; CodeNamespace)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;var ns=(CodeNamespace)element;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RecurseFindElements(ns.Members);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; MakeIntoValidIdentifier(&lt;span class="kwrd"&gt;string&lt;/span&gt; arbitraryString)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;var validIdentifier = Regex.Replace(arbitraryString, &lt;span class="str"&gt;@"[^A-Za-z0-9-._]"&lt;/span&gt;, &lt;span class="str"&gt;" "&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;validIdentifier = ConvertToPascalCase(validIdentifier);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (Regex.IsMatch(validIdentifier, &lt;span class="str"&gt;@"^\d"&lt;/span&gt;)) validIdentifier = &lt;span class="str"&gt;"_"&lt;/span&gt; + validIdentifier;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;return&lt;/span&gt; validIdentifier;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; ConvertToPascalCase(&lt;span class="kwrd"&gt;string&lt;/span&gt; phrase)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;string&lt;/span&gt;[] splittedPhrase = phrase.Split(&lt;span class="str"&gt;' '&lt;/span&gt;, &lt;span class="str"&gt;'-'&lt;/span&gt;, &lt;span class="str"&gt;'.'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;var sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (String s &lt;span class="kwrd"&gt;in&lt;/span&gt; splittedPhrase)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;char&lt;/span&gt;[] splittedPhraseChars = s.ToCharArray();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (splittedPhraseChars.Length &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;splittedPhraseChars[0] = ((&lt;span class="kwrd"&gt;new&lt;/span&gt; String(splittedPhraseChars[0], 1)).ToUpper().ToCharArray())[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sb.Append(&lt;span class="kwrd"&gt;new&lt;/span&gt; String(splittedPhraseChars));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;return&lt;/span&gt; sb.ToString();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; EmitNamesInnerClass(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; names)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt;(names.Any())&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"\r\n\t\tpublic static class Names"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"\t\t{"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var name &lt;span class="kwrd"&gt;in&lt;/span&gt; names)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"\t\t\tpublic const string {0} = \"{0}\";"&lt;/span&gt;, name));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WriteLine(&lt;span class="str"&gt;"\t\t}"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;names.Clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Project GetProjectContainingT4File(DTE dte) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;// Find the .tt file's ProjectItem&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ProjectItem projectItem = dte.Solution.FindProjectItem(Host.TemplateFile);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;// If the .tt file is not opened, open it&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (projectItem.Document == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;projectItem.Open(Constants.vsViewKindCode);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;if&lt;/span&gt; (AlwaysKeepTemplateDirty) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;// Mark the .tt file as unsaved. This way it will be saved and update itself next time the&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;// project is built. Basically, it keeps marking itself as unsaved to make the next build work.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="rem"&gt;// Note: this is certainly hacky, but is the best I could come up with so far.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;projectItem.Document.Saved = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span class="kwrd"&gt;return&lt;/span&gt; projectItem.ContainingProject;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-389110368144212432?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/389110368144212432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/static-reflection-or-t4-with-envdte.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/389110368144212432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/389110368144212432'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/static-reflection-or-t4-with-envdte.html' title='Static reflection... or T4 with EnvDte?'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-3593192074688286059</id><published>2010-11-09T11:39:00.001-05:00</published><updated>2010-11-09T11:39:45.726-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MsBuild'/><title type='text'>Quick custom build task</title><content type='html'>We needed something to delete all but the last 3 *.zip files for a particular app &amp;nbsp;in a directory during a build. This was particularly simple because of 1 assumption the files would properly sort by filename alone. This is often not the case when Dates or times are involved unless you are using fixed width, padded, or formatted date/time strings.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Linq;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;Microsoft.Build.Framework;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;Microsoft.Build.Utilities;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;BMsBuildTasks&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RollingVersionCleaner&lt;/span&gt;:&lt;span style="color: #2b91af;"&gt;Task&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Required&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;Path&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Required&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;AppName&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Output&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ITaskItem&lt;/span&gt;[&amp;nbsp;]&amp;nbsp;Deleted&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;Execute(&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(System.IO.&lt;span style="color: #2b91af;"&gt;Directory&lt;/span&gt;.Exists(Path)==&lt;span style="color: blue;"&gt;false&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.LogError(&lt;span style="color: #a31515;"&gt;"Directory&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist:"&lt;/span&gt;+Path);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;files&amp;nbsp;=&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;Directory&lt;/span&gt;.GetFiles(Path,&amp;nbsp;AppName+&lt;span style="color: #a31515;"&gt;"*.zip"&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;q=&amp;nbsp;&lt;span style="color: blue;"&gt;from&lt;/span&gt;&amp;nbsp;f&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;files&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;let&lt;/span&gt;&amp;nbsp;fileName=System.IO.&lt;span style="color: #2b91af;"&gt;Path&lt;/span&gt;.GetFileName(f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;orderby&lt;/span&gt;&amp;nbsp;fileName&amp;nbsp;&lt;span style="color: blue;"&gt;descending&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&amp;nbsp;fileName.Contains(&lt;span style="color: #a31515;"&gt;"."&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;select&lt;/span&gt;&amp;nbsp;f;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(q.Any(&amp;nbsp;)==&lt;span style="color: blue;"&gt;false&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.LogMessage(&lt;span style="color: #a31515;"&gt;"No&amp;nbsp;files&amp;nbsp;found&amp;nbsp;"&lt;/span&gt;+System.IO.&lt;span style="color: #2b91af;"&gt;Path&lt;/span&gt;.Combine(Path,&amp;nbsp;AppName));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;toDelete=q.Skip(3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(toDelete.Any(&amp;nbsp;)==&lt;span style="color: blue;"&gt;false&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.LogMessage(&lt;span style="color: #a31515;"&gt;"No&amp;nbsp;files&amp;nbsp;to&amp;nbsp;delete&amp;nbsp;"&lt;/span&gt;+System.IO.&lt;span style="color: #2b91af;"&gt;Path&lt;/span&gt;.Combine(Path,&amp;nbsp;AppName));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;deleted&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;item&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;toDelete)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;File&lt;/span&gt;.Delete(item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;deleted.Add(item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Deleted=deleted.Select(x&amp;nbsp;=&amp;gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TaskItem&lt;/span&gt;(x)).ToArray(&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.LogMessage(&lt;span style="color: #a31515;"&gt;"Deleted&amp;nbsp;"&lt;/span&gt;+deleted.Count+&lt;span style="color: #a31515;"&gt;"&amp;nbsp;file(s)"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-3593192074688286059?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/3593192074688286059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/quick-custom-build-task.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3593192074688286059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3593192074688286059'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/quick-custom-build-task.html' title='Quick custom build task'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-9140031371506304662</id><published>2010-11-03T19:43:00.000-04:00</published><updated>2010-11-03T19:43:57.283-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='fxCop'/><category scheme='http://www.blogger.com/atom/ns#' term='dependency injection'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Experimental Technologies</title><content type='html'>Before I lose track of all the things I've been touching in the last 6 months, I wanted to say something on the matter of each and keep track of where I've been and where I might want to go.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Managed_Extensibility_Framework"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Mef&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt; - twice (both plug-in UI projects)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en/vsx"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Vs2010 Add-ins&lt;/span&gt;&lt;/a&gt; -&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&amp;nbsp;checks all project reference to ensure none are absolute paths, one that d&lt;/li&gt;&lt;li&gt;&amp;nbsp;ExtensionsProject for my team&lt;/li&gt;&lt;ol&gt;&lt;li&gt;parses all project files&amp;nbsp;&lt;/li&gt;&lt;li&gt;locates .config files&lt;/li&gt;&lt;li&gt;checks for config values to be in compliance with team standards&lt;/li&gt;&lt;li&gt;checks your projects' FileCodeModel to confirm the code meets other team standards&lt;/li&gt;&lt;li&gt;will remove some project file customizations temporarily, confirm it builds in release mode, then brings up the svn commit dialog&lt;/li&gt;&lt;li&gt;allows you to store compliance information on your modules/projects on the team for easy access.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;used a pluggable UI by importing an Action&lt;item&gt; or using the default built-in messagebox if no extension is found.&lt;/item&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.msdn.microsoft.com/codeanalysis/"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;FxCop&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;/&lt;a href="http://msdn.microsoft.com/en-us/library/ms182075.aspx"&gt;Code-check-in-policies&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Team policy reminder/enforcers&lt;/li&gt;&lt;ol&gt;&lt;li&gt;warn on calls to forbidden methods&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&amp;nbsp;GC.Collect&lt;/li&gt;&lt;li&gt;GC.AddMemoryPressure&lt;/li&gt;&lt;li&gt;Messagebox.Show&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;warn if inheriting directly from Windows.Forms or Windows.Control&lt;/li&gt;&lt;li&gt;warn if a control or form subclass constructor does not call InitializeComponent()&lt;/li&gt;&lt;li&gt;warn if a control property is not set per team standards&lt;/li&gt;&lt;ol&gt;&lt;li&gt;DialogBorderStyle must be fixed&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;error if you do not override certain virtual properties (legacy need from vs2005 designer bug)&lt;/li&gt;&lt;li&gt;error if you have code that raises a NotImplementedException&lt;/li&gt;&lt;li&gt;warn if you don't have hungarian notation to name controls&lt;/li&gt;&lt;li&gt;warn if fields are not private&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Policy to ensure a project does not call a Config value or index that does not exist.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://windowsclient.net/default.aspx"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Wpf&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Mef extension &amp;nbsp;UI&lt;/li&gt;&lt;li&gt;Web data scraper/exporter&lt;/li&gt;&lt;li&gt;datagrid context menu&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Mvc&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Mvc 2&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Lots of projects 2 at work, many more at home&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.asp.net/mvc/mvc3"&gt;Mvc 3&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Got 2/3 through a project and had to go back to MVC2 due to changing requirements, transfer went very well.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Dependency Injection&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://unity.codeplex.com/"&gt;Unity&lt;/a&gt; - Nice DI framework from Microsoft.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ninject.org/"&gt;Ninject&lt;/a&gt; - Very nice lightweight DI framework&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/chad_myers/archive/2009/07/14/the-usual-result-of-poor-man-s-dependency-injection.aspx"&gt;Poor Man's&lt;/a&gt; - Did manual DI for the longest time, so happy to have finally switched to learning Ninject and Unity&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/t9883dzc.aspx"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;MSBuild Custom tasks&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Wrote a task that walks all found project files under a path and determines safe build &lt;a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph"&gt;DirectedAcylicGraphs&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Detects Circular dependencies/references&lt;/li&gt;&lt;li&gt;walks project files in parallel&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Wrote a task on the ordering task that will generate a properly parallelizing and multi-threading MsBuild project file.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Parallelization/threading/async&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/1217345/what-is-linq-to-events-a-k-a-rx-framework"&gt;Rx&lt;/a&gt; - wrote a producer consumer where a consumer can produce additional items to be consumed&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/1663022/whats-exactly-plinq"&gt;PLinq&lt;/a&gt; - used in Rx producer consumer to parallelize the Rx search&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/async.aspx"&gt;Async CTP&lt;/a&gt; - have not used it quite yet, but did attend the 2010 PDC broadcast&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;ORMs&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt; -&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Language_Integrated_Query#LINQ_to_SQL"&gt;Linq-2-Sql&lt;/a&gt; - lots of personal projects&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework"&gt;EF4&lt;/a&gt; - now that I've used it, I actually like it much better than linq to sql&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Javascript cross site script without Preflight / &lt;a href="http://www.w3.org/TR/cors/"&gt;Cross Origin Resource Sharing&lt;/a&gt;&amp;nbsp;- also &lt;a href="https://developer.mozilla.org/En/HTTP_Access_Control"&gt;Http Access Control&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Wrote javascript that uses jQuery in a bookmarklet to allow users to save data from a page on one site cross-domain into a private secured store in a db, with group sharing options, aka Cross Origin Sharing requests&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Unit Testing -&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.typemock.com/"&gt;TypeMock&lt;/a&gt;&amp;nbsp;- excellent for &lt;a href="http://www.manning.com/baley/"&gt;brownfield&lt;/a&gt;&amp;nbsp;applications&amp;nbsp;and no design for &lt;a href="http://en.wikipedia.org/wiki/Testability"&gt;testability&lt;/a&gt;&amp;nbsp;compromises&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm sure I've forgotten some and did not get to looking at the future of where I want to go, but it's quite a nice start.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-9140031371506304662?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/9140031371506304662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/experimental-technologies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/9140031371506304662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/9140031371506304662'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/11/experimental-technologies.html' title='Experimental Technologies'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-1424429698536156784</id><published>2010-10-21T11:50:00.000-04:00</published><updated>2010-10-21T11:50:37.538-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lambda'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel'/><title type='text'>Run synchronous process with a timeout</title><content type='html'>I have run into situations where the blocking call I'm making isn't guaranteed to terminate itself ever. I want control over how long I wait before giving up.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;RunSync(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;timeout,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;nbsp;toDo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;&amp;nbsp;threadException=&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;nbsp;wait&amp;nbsp;=&amp;nbsp;(&amp;nbsp;)&amp;nbsp;=&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toDo(&amp;nbsp;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;&amp;nbsp;ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;threadException=ex;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;thread&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Thread&lt;/span&gt;((&amp;nbsp;)&amp;nbsp;=&amp;gt;&amp;nbsp;wait(&amp;nbsp;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;thread.Start(&amp;nbsp;);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(!thread.Join(timeout))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;thread.Abort(&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TimeoutException&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"No&amp;nbsp;connection&amp;nbsp;found&amp;nbsp;within&amp;nbsp;timeout:"&lt;/span&gt;+timeout/100+&lt;span style="color: #a31515;"&gt;"&amp;nbsp;seconds"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(threadException!=&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&amp;nbsp;threadException;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;This function is set up to wait for another multi-threaded class to try to find a connection and use it. If the timeouts on that class are set improperly or the threading code is bad and just never does a timeout or return, this gives me the option to stop waiting.&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-1424429698536156784?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/1424429698536156784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/10/run-synchronous-process-with-timeout.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/1424429698536156784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/1424429698536156784'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/10/run-synchronous-process-with-timeout.html' title='Run synchronous process with a timeout'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-472311775152421140</id><published>2010-10-21T11:05:00.000-04:00</published><updated>2010-10-21T11:05:16.262-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MsBuild'/><title type='text'>Simple MsBuild Custom Task</title><content type='html'>Here's a very simple custom task that reads in the number in a text file (which only contains a number) increments, passes it back out to the calling MsBuild, and then writes the new value to the text file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;Microsoft.Build.Framework;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;Microsoft.Build.Utilities;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&amp;nbsp;BMsBuildTasks&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IncrementerTask&lt;/span&gt;:&lt;span style="color: #2b91af;"&gt;Task&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Output&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ITaskItem&lt;/span&gt;&amp;nbsp;OutputFullPath&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Output&lt;/span&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;Value&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;Execute(&amp;nbsp;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;path&amp;nbsp;=OutputFullPath==&lt;span style="color: blue;"&gt;null&lt;/span&gt;?OutputFullPath.GetWellKnownMetaData(&lt;span style="color: #2b91af;"&gt;WellKnownMetaData35&lt;/span&gt;.FullPath&amp;nbsp;):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;@"c:\temp\version.txt"&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;file=&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;StreamReader&lt;/span&gt;(path))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span style="color: blue;"&gt;int&lt;/span&gt;.TryParse(file.ReadToEnd(&amp;nbsp;),&amp;nbsp;&lt;span style="color: blue;"&gt;out&lt;/span&gt;&amp;nbsp;value))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Value=value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;file=&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;StreamWriter&lt;/span&gt;(path,&lt;span style="color: blue;"&gt;false&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file.Write(value);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputFullPath&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TaskItem&lt;/span&gt;(path);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;GetWellKnownMetaData(&lt;span style="color: blue;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ITaskItem&lt;/span&gt;&amp;nbsp;item,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;WellKnownMetaData35&lt;/span&gt;&amp;nbsp;value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;item.GetMetadata(value.ToString(&amp;nbsp;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;WellKnownMetaData35&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FullPath,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RootDir,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Filename,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Extension,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RelativeDir,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Directory,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RecursiveDir,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Identity,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ModifiedTime,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CreatedTime,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AccessedTime&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-472311775152421140?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/472311775152421140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/10/simple-msbuild-custom-task.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/472311775152421140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/472311775152421140'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/10/simple-msbuild-custom-task.html' title='Simple MsBuild Custom Task'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8339776091454881615</id><published>2010-10-20T23:28:00.002-04:00</published><updated>2010-11-29T20:47:24.622-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linq2Sql'/><category scheme='http://www.blogger.com/atom/ns#' term='EF4'/><category scheme='http://www.blogger.com/atom/ns#' term='EntityFramework'/><title type='text'>EF4 whitelist/explicit eager loading</title><content type='html'>In linq to sql it was very simple:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;var loadOptions = new System.Data.Linq.DataLoadOptions();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;loadOptions.LoadWith&amp;lt;alliance&amp;gt;(a =&amp;gt; a.Players);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;dc.LoadOptions = loadOptions;&lt;br /&gt;&lt;br /&gt;where dc was the datacontext.&lt;br /&gt;&lt;br /&gt;This specifies that any queries that are submitted to this DataContext that return an Alliance object/entity would also go ahead on the same db trip and fetch it's related Players.&lt;br /&gt;&lt;br /&gt;In EF4.0 so far it looks like you have to resort to magic strings. Magic strings are a pet peeve of mine. Your compile time type safety goes out the window in this type of magic string use.&lt;br /&gt;&lt;br /&gt;Here are 2 solutions I've found on my googling that can get rid of the magic strings for EF4.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gurustop.net/blog/2009/04/02/typed-eager-loading-using-entity-framework-amp-what-is-eager-loading-vs-deferred-loading/"&gt;http://j.mp/bub2FW&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;&lt;a href="http://j.mp/bKX7X6"&gt;http://j.mp/bKX7X6&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8339776091454881615?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8339776091454881615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/10/ef4-whitelistexplicit-eager-loading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8339776091454881615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8339776091454881615'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/10/ef4-whitelistexplicit-eager-loading.html' title='EF4 whitelist/explicit eager loading'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-5893141984739317650</id><published>2010-09-15T14:06:00.003-04:00</published><updated>2010-09-15T14:42:55.177-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MsBuild'/><title type='text'>MSBuild: Copy a list of files to a list of directories</title><content type='html'>I have config files in a master directory (team does not allow &lt;a href="http://svnbook.red-bean.com/en/1.0/ch07s03.html"&gt;svn:externals&lt;/a&gt;, which I believed was designed for this task, perhaps I did not set it up correctly) that I need to svn update and copy to my modules.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;LocalBranchPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;C:\branches\November&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;\&lt;/span&gt;&lt;span style="color: #a31515;"&gt;LocalBranchPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;LocalSourcePath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;$(LocalBranchPath)\Source&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;\&lt;/span&gt;&lt;span style="color: #a31515;"&gt;LocalSourcePath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TortoisePath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;C:\Program&amp;nbsp;Files\TortoiseSVN\bin\TortoiseProc.exe&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;\&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TortoisePath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ClientConfigPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;$(LocalSourcePath)\MasterDirectory&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;\&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ClientConfigPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TortoiseUpdate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal;"&gt;&amp;amp;&lt;/span&gt;quot;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;$(TortoisePath)&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal;"&gt;&amp;amp;&lt;/span&gt;quot;&lt;/span&gt;&amp;nbsp;/closeonend:1&amp;nbsp;/command:update&amp;nbsp;/path:&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;\&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TortoiseUpdate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ReferencedAssembliesPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;$(LocalSourcePath)\ReferencedAssemblies&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;\&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ReferencedAssembliesPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DbProjLocalPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;$(LocalBranchPath)\Database\DBProjects&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;\&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DbProjLocalPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt; &amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;PropertyGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MyModules&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(LocalSourcePath)\CommonControls\LimitsInformation;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  $(LocalSourcePath)\CommonControls\BalanceInquiry;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  $(LocalSourcePath)\CommonControls\AuditTrail;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  $(LocalSourcePath)\Administration\Reassignment;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  $(LocalSourcePath)\IndividualControls\Configuration\ActivityList&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt; /&amp;gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; white-space: normal;"&gt;&amp;nbsp;I need the config files in &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;ClientConfigPath&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; white-space: normal;"&gt;to be copied to the subfolder of &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;MyModules&lt;/span&gt; called &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;ModuleName.UnitTest&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; white-space: normal;"&gt;let's get the svn update out of the way&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Target&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;SvnUpdateClientConfigs&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Exec&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;Command&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(TortoiseUpdate)&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal;"&gt;&amp;amp;&lt;/span&gt;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: blue;"&gt;$(ClientConfigPath)&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal;"&gt;&amp;amp;&lt;/span&gt;quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Target&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;Very short and sweet, now the hard part, copying multiple files to multiple subdirectories. I had no idea &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;FileName&lt;/span&gt; was a shortcut in this case for the final directory name only, it came in handy.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Target&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;CopyClientConfigsBatched&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;Outputs&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;%(MyModules.FullPath)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Message&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(MyModules&amp;nbsp;-&amp;gt;&amp;nbsp;'%(FullPath)\%(FileName).UnitTest')&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ClientConfigs&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;Include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(ClientConfigPath)\*.config&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;Exclude&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$(ClientConfigPath)\P*.config&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ClientConfigs&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Copy&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;SourceFiles&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(ClientConfigs)&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;DestinationFolder&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@(MyModules&amp;nbsp;-&amp;gt;&amp;nbsp;'%(FullPath)\%(FileName).UnitTest')&lt;/span&gt;"&lt;br /&gt;&lt;span style="color: blue;"&gt;  &amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;SkipUnchangedFiles&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;true&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;&lt;/span&gt;Target&lt;span class="Apple-style-span" style="color: blue;"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;The Outputs was necessary because &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;Copy.DestinationFolder&lt;/span&gt; will not accept multiple items.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;So first I build the list of files, which could have been done at the project level but this was the only target that needed it, and those files may not be present until the svn update was run. &amp;nbsp;The Exclude prevents PolicyCache.config from being part of the copy. &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;SkipUnchangedFiles&lt;/span&gt; makes sure files that haven't changed aren't copied wasting time.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-5893141984739317650?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/5893141984739317650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/09/msbuild-copy-list-of-files-to-list-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5893141984739317650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/5893141984739317650'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/09/msbuild-copy-list-of-files-to-list-of.html' title='MSBuild: Copy a list of files to a list of directories'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-3490513658482268736</id><published>2010-09-09T15:48:00.000-04:00</published><updated>2010-09-09T15:48:45.351-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='Parallel'/><category scheme='http://www.blogger.com/atom/ns#' term='Reactive'/><title type='text'>My first Rx attempt</title><content type='html'>I think I overshot for a first attempt by far and I'm not sure how to validate the efficiency/concurrency of the code. However, here is Rx that so far as I've used it appears to correctly do recursive producer-consumer iteration of a call graph.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: consolas; white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: consolas; white-space: pre;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ProblemCollection&lt;/span&gt;&amp;nbsp;Check(&lt;span style="color: #2b91af;"&gt;TypeNode&lt;/span&gt;&amp;nbsp;type)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"Checking&amp;nbsp;type:"&lt;/span&gt;+type.FullName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;initializer&amp;nbsp;=&amp;nbsp;type.Members.OfType&amp;lt;&lt;span style="color: #2b91af;"&gt;Method&lt;/span&gt;&amp;gt;(&amp;nbsp;).FirstOrDefault(x&amp;nbsp;=&amp;gt;&amp;nbsp;x.FullName==type.FullName+&lt;span style="color: #a31515;"&gt;".InitializeComponent"&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(initializer==&lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(initializer.FullName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;constructorsWithNoInitCall&amp;nbsp;=&amp;nbsp;type.Members.OfType&amp;lt;&lt;span style="color: #2b91af;"&gt;Method&lt;/span&gt;&amp;gt;(&amp;nbsp;).Where(m&amp;nbsp;=&amp;gt;&amp;nbsp;m.NodeType==&lt;span style="color: #2b91af;"&gt;NodeType&lt;/span&gt;.InstanceInitializer).ToList(&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;visitedMethods&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;HashSet&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;foundMethods&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ObservableHashSet&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;Method&lt;/span&gt;&amp;gt;(&amp;nbsp;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;whenMethodsFound&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Observable&lt;/span&gt;.FromEvent&amp;lt;&lt;span style="color: #2b91af;"&gt;NotifyCollectionChangedEventArgs&lt;/span&gt;&amp;gt;(foundMethods,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"CollectionChanged"&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;whenMethodsFound.Subscribe(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e&amp;nbsp;=&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;switch&lt;/span&gt;&amp;nbsp;(e.EventArgs.Action)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;NotifyCollectionChangedAction&lt;/span&gt;.Add:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(constructorsWithNoInitCall.Any(&amp;nbsp;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Parallel&lt;/span&gt;.ForEach(e.EventArgs.NewItems.Cast&amp;lt;&lt;span style="color: #2b91af;"&gt;Method&lt;/span&gt;&amp;gt;(&amp;nbsp;).Where(m&amp;nbsp;=&amp;gt;&amp;nbsp;visitedMethods.Any(v&amp;nbsp;=&amp;gt;&amp;nbsp;v==m.FullName)==&lt;span style="color: blue;"&gt;false&lt;/span&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i&amp;nbsp;=&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;lock&lt;/span&gt;&amp;nbsp;(visitedMethods)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(visitedMethods.Contains(i.FullName))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;visitedMethods.Add(i.FullName);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515;"&gt;"Visiting:"&lt;/span&gt;+i.FullName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;callers&amp;nbsp;=&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;CallGraph&lt;/span&gt;.CallersFor(i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;constructorsWithNoInitCall.RemoveAll(x&amp;nbsp;=&amp;gt;&amp;nbsp;callers.Any(c&amp;nbsp;=&amp;gt;&amp;nbsp;x.FullName==c.FullName));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(constructorsWithNoInitCall.Any(&amp;nbsp;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;item&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;callers.Where(c&amp;nbsp;=&amp;gt;&amp;nbsp;visitedMethods.Any(v&amp;nbsp;=&amp;gt;&amp;nbsp;v==c.FullName)==&lt;span style="color: blue;"&gt;false&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foundMethods.Add(item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;default&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foundMethods.Add(initializer);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ReportProblem(constructorsWithNoInitCall,&amp;nbsp;type);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;Problems;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-3490513658482268736?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/3490513658482268736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/09/my-first-rx-attempt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3490513658482268736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3490513658482268736'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/09/my-first-rx-attempt.html' title='My first Rx attempt'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-6622079869758100178</id><published>2010-09-09T15:42:00.000-04:00</published><updated>2010-09-09T15:42:24.210-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code standards'/><category scheme='http://www.blogger.com/atom/ns#' term='fxCop'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Vs2010 Code Analysis Custom Rules</title><content type='html'>I've written my first custom rules for visual studio to help me on my team with the written and unwritten rules. It was a long journey but I have the hang of it. These rules are set to run on every debug build I do and take about 8 seconds to run all.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;As I understand it custom rules ( Inherited from Microsoft.FxCop.Sdk) can also be used as code check in policies on TFS or in the build process to produce a nice xml report.&lt;br /&gt;&lt;br /&gt;Here's the base class (.net 4.0 class library project type)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&amp;nbsp;Microsoft.FxCop.Sdk;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;abstract&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;BaseRule&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;:&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;BaseIntrospectionRule&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;br /&gt;{&lt;br /&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&amp;nbsp;BaseRule(&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&amp;nbsp;ruleName)&lt;br /&gt;  :&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;base&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;(&lt;br /&gt;   ruleName,&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: green;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;//typeof(BaseRule).Assembly.GetName().Name+".Rules"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;"ProjectNamespace.RuleMetadata"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;,&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;typeof&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;BaseRule&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;).Assembly&lt;br /&gt;   )&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This class was defined without a namespace, I believe it did not work while it was in one. It's also quite important to note that the string literal Must match your project namespace+xml filename without the .xml on it. The commented method may work as well if your xml file is called Rules.xml. This file must be set to Embedded Resource.&lt;br /&gt;&lt;br /&gt;Rules can be set as Messages, Warnings, or Errors and show up in the standard Error List control if code analysis is turned on in your project.&lt;br /&gt;&lt;br /&gt;The general classes of rules I have written so far include:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do not use method - Things like &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;GC.AddMemoryPressure&lt;/span&gt;, &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;MessageBox.Show&lt;/span&gt; (we use a custom dialog with styling)&lt;/li&gt;&lt;li&gt;Do not inherit - We don't want anyone inheriting from Windows.Forms.Form&lt;/li&gt;&lt;li&gt;Do not raise- We don't want code that has &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;NotImplementedExceptions&lt;/span&gt; still present.&lt;/li&gt;&lt;li&gt;UseHungarian for controls&lt;/li&gt;&lt;ul&gt;&lt;li&gt;uses a dictionary to determine if the control has a preferred name we use on the team.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Fields should be private&lt;/li&gt;&lt;li&gt;Control Property must be set to x&lt;/li&gt;&lt;ul&gt;&lt;li&gt;For example, in most cases we want all dialog border styles to be fixed - I check the Initialize Component method of anything that inherits from Form for the property to be set there.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;MustOverride - For legacy reasons (old Visual Studio bug they tell me) we have methods/properties that are virtual instead of abstract, and if they aren't&amp;nbsp;overridden&amp;nbsp;will throw a runtime exception.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-6622079869758100178?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/6622079869758100178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/09/vs2010-code-analysis-custom-rules.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6622079869758100178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6622079869758100178'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/09/vs2010-code-analysis-custom-rules.html' title='Vs2010 Code Analysis Custom Rules'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8990228051705228249</id><published>2010-08-20T10:25:00.000-04:00</published><updated>2010-08-20T10:25:47.974-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='razor'/><title type='text'>Visual Studio find and replace with regular expressions totally sucks.</title><content type='html'>The syntax for regular expressions in Visual studio's find and replace option are incredibly&amp;nbsp;convoluted.&lt;br /&gt;&lt;br /&gt;I wanted to replace all instances of width in a style sheet with something that was variable based.&lt;br /&gt;&lt;br /&gt;so &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;width:75px;&lt;/span&gt; would become &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;width:&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #0b5394;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;@(width=75)&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;px;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This syntax is using the new &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx"&gt;Razor view engine&lt;/a&gt; and the result is we set a local variable and render it to the page in a nice terse expression. Combined with:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;left:@(leftStart+width)px;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;we now have the beginning of a nice sliced row of images. Where all the things on a particular row would incrementally build, and then on the next row, I can reset &lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;leftStart&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;This was the syntax for finding all lines of an html document and capturing the width:&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;width\:{[0-9]+}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And the syntax for the replacement?&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;width\:\@(width=\1)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I understand that c# syntax uses a ton of the same conflicting symbols, but... could you guys make something like &lt;a href="http://regexpal.com/"&gt;rexexpal&lt;/a&gt; so that we can iteratively solve for the expressions we need?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8990228051705228249?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8990228051705228249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/08/visual-studio-find-and-replace-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8990228051705228249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8990228051705228249'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/08/visual-studio-find-and-replace-with.html' title='Visual Studio find and replace with regular expressions totally sucks.'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-3520527091399608958</id><published>2010-08-18T11:17:00.000-04:00</published><updated>2010-08-18T11:17:42.790-04:00</updated><title type='text'>WPF DataGrid Row-level styling</title><content type='html'>It took me a very long time to figure out how to do this. The following code takes a WPF (and probably silverlight) datagrid and changes the row foreground color based on a single property in that row.&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"True"&lt;/span&gt;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"dgProjects"&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid.RowStyle&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Style&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;TargetType&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"DataGridRow"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Style.Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;Binding&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;HasProblems&lt;/span&gt;&lt;span style="color: blue;"&gt;}&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"True"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Setter&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;Property&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"Foreground"&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: blue;"&gt;"Red"&lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTrigger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Style.Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Style&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid.RowStyle&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-3520527091399608958?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/3520527091399608958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/08/wpf-datagrid-row-level-styling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3520527091399608958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3520527091399608958'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/08/wpf-datagrid-row-level-styling.html' title='WPF DataGrid Row-level styling'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8902318830011766370</id><published>2010-08-16T17:59:00.001-04:00</published><updated>2011-05-17T16:45:22.911-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MEF'/><title type='text'>Vs Add-in solution explorer context menus with a little MEF</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;My first MEF success. I wrote a visual studio add-in context menu for solution explorer where you can right click a project (or solution file for all projects) so that it:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;reads the project file checking several problem areas&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;hint paths&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;copy local&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;pre/post build events&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;target framework version&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;then makes a backup copy&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;cleans those local customizations&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;invokes msbuild to make sure it still builds&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;brings up the Source control commit dialog&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;restores your local customizations that we don't want in the source.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;I used MEF so that the UI was not hard coded into the add-in. It&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;was amazingly simple. While I was developing a solution someone was nice enough to post on &lt;a href="http://stackoverflow.com/questions/3495902/can-you-hydrate-a-static-property-using-mef"&gt;stackoverflow&lt;/a&gt;&amp;nbsp;telling me you can't hydrate static properties. Which I did.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;The composition code is longer than it needed to be, because I wanted a local default to run in case there was no extension available. I had long wondered how you could do preference/priority ordering of components. This isn't exactly the mental model I had for how it would work, but it works.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;I compose my MEF parts in the static constructor for the class because I need to set static properties before anything else in the class happens:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;Connect(&amp;nbsp;)&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;batch&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;CompositionBatch&lt;/span&gt;(&amp;nbsp;);&lt;br /&gt;   &lt;span style="color: #2b91af;"&gt;CompositionContainer&lt;/span&gt;&amp;nbsp;container;&lt;br /&gt;   &lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;reflectionCatalog&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;AssemblyCatalog&lt;/span&gt;(System.Reflection.&lt;span style="color: #2b91af;"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly(&amp;nbsp;));&lt;br /&gt; &lt;br /&gt;   &lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;extensionPath&amp;nbsp;=&amp;nbsp;System.IO.&lt;span style="color: #2b91af;"&gt;Path&lt;/span&gt;.Combine(&lt;span style="color: #2b91af;"&gt;Environment&lt;/span&gt;.CurrentDirectory,&amp;nbsp;&lt;span style="color: #a31515;"&gt;"extensions"&lt;/span&gt;);&lt;br /&gt;   &lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(System.IO.&lt;span style="color: #2b91af;"&gt;Directory&lt;/span&gt;.Exists(extensionPath))&lt;br /&gt;   {&lt;br /&gt;    &lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;directoryCatalog&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;DirectoryCatalog&lt;/span&gt;(extensionPath);&lt;br /&gt;    &lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;defaultCatalogEp&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;CatalogExportProvider&lt;/span&gt;(reflectionCatalog);&lt;br /&gt;    container=&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;CompositionContainer&lt;/span&gt;(directoryCatalog,&amp;nbsp;defaultCatalogEp);&lt;br /&gt;    defaultCatalogEp.SourceProvider=container;&lt;br /&gt;   }&lt;br /&gt;   &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;br /&gt;    container=&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;CompositionContainer&lt;/span&gt;(reflectionCatalog);&lt;br /&gt; &lt;br /&gt;   container.Compose(batch);&lt;br /&gt; &lt;br /&gt;   Display=container.GetExportedValue&amp;lt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ProjectLogicChecks&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;(&amp;nbsp;);&lt;br /&gt;  }&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: consolas; font-size: 13px; white-space: pre;"&gt;[&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: consolas; font-size: 13px; white-space: pre;"&gt;&lt;span style="color: #2b91af;"&gt;Import&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: consolas; font-size: 13px; white-space: pre;"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ProjectLogicChecks&lt;/span&gt;&amp;gt;&amp;gt;&amp;nbsp;Display&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;/summary&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;Local&amp;nbsp;default&amp;nbsp;in&amp;nbsp;case&amp;nbsp;an&amp;nbsp;MEF&amp;nbsp;extension&amp;nbsp;is&amp;nbsp;not&amp;nbsp;found&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;param&amp;nbsp;name=&gt;&lt;/param&amp;nbsp;name=&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;"_checkResults"&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  [&lt;span style="color: #2b91af;"&gt;Export&lt;/span&gt;(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ProjectLogicChecks&lt;/span&gt;&amp;gt;&amp;gt;))]&lt;br /&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;DisplayResults(&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ProjectLogicChecks&lt;/span&gt;&amp;gt;&amp;nbsp;_checkResults)&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;   &lt;span style="color: blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;projectLogicCheck&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;_checkResults)&lt;br /&gt;   {&lt;br /&gt;    result+=projectLogicCheck.AssemblyName;&lt;br /&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(projectLogicCheck.HasProblems)&lt;br /&gt;     result+=&lt;span style="color: #a31515;"&gt;"*"&lt;/span&gt;;&lt;br /&gt;    result+=&lt;span style="color: #a31515;"&gt;"."&lt;/span&gt;;&lt;br /&gt;   }&lt;br /&gt;   &lt;span style="color: #2b91af;"&gt;MessageBox&lt;/span&gt;.Show(result);&lt;br /&gt;  }&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;i&gt;Note: the static part is not related to MEF, it's static for unrelated reasons.&lt;/i&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;MEF lives in System.ComponentModel.Composition, but this project also made use of System.ComponentModel.Composition.Hosting&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;My MEF Export (in a completely separate project) uses WPF to create a nice dialog to show the results of the add-in checks:&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;DisplayHooks&lt;/span&gt;&lt;br /&gt; {&lt;br /&gt; [&lt;span style="color: #2b91af;"&gt;Export&lt;/span&gt;(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ProjectLogicChecks&lt;/span&gt;&amp;gt;&amp;gt;))]&lt;br /&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Display(&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;ProjectLogicChecks&lt;/span&gt;&amp;gt;&amp;nbsp;projectStatusList)&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;projectLogicChecksDisplay&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ProjectLogicChecksDisplay&lt;/span&gt;(projectStatusList);&lt;br /&gt;  &lt;br /&gt;  projectLogicChecksDisplay.ShowDialog();&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; }&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;i&gt;Note: Both the add-in and the display project have a reference to the 3rd project that contains&lt;/i&gt; &lt;span class="Apple-style-span" style="color: #2b91af;"&gt;ProjectLogicChecks&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;That's ALL the MEF code there was, 2 attributes, and some composition logic in the one class. In an app where you use MEF for more than just the one property you would likely put it in Global.Asax (or Application.cs, etc...) but for this the local few lines of code was all I wanted to Proof of Concept the Add-in.&lt;/pre&gt;&lt;pre style="font-family: consolas;"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8902318830011766370?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8902318830011766370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/08/vs-add-in-solution-explorer-context.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8902318830011766370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8902318830011766370'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/08/vs-add-in-solution-explorer-context.html' title='Vs Add-in solution explorer context menus with a little MEF'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8410224421706105449</id><published>2010-07-15T11:43:00.001-04:00</published><updated>2010-07-15T11:45:25.442-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmarklet'/><title type='text'>Bookmarklet: Change the page title</title><content type='html'>So on some sites, when you get a new ajax message (think facebook, gmail, or maybe meebo) the new message indicator never goes away in the page title on your tabs. Also some titles aren't nearly as clear on your tabs as to what they are, so you can use this to set the title on your tabs to the domain of the page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So this is what I've come up with as a nice &lt;a href="http://en.wikipedia.org/wiki/Bookmarklet"&gt;bookmarklet&lt;/a&gt;&amp;nbsp;to clear the title without having to reload the page.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;javascript:void(function(){document.title=document.domain;}())&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or if you like you can set it to document.location&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;a href="javascript:void(function(){document.title=document.domain;}())"&gt;FixTitle&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8410224421706105449?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8410224421706105449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/07/bookmarklet-change-page-title.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8410224421706105449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8410224421706105449'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/07/bookmarklet-change-page-title.html' title='Bookmarklet: Change the page title'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-2980813555652897077</id><published>2010-06-29T09:14:00.000-04:00</published><updated>2010-06-29T09:14:38.806-04:00</updated><title type='text'>Recent POC experiments</title><content type='html'>What's a POC? -&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Proof_of_concept"&gt;POC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I don't learn details very well, I learn why or why not. So I keep a base of code to refer back to the details and how to repeat something that I haven't done enough times to memorize. I also try to keep a thorough history of sites which helped me reach the conclusion in case I forget some of the why, or miss a few hows on things I didn't need at the time.&lt;br /&gt;&lt;br /&gt;Progress:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Asp.net &lt;a href="http://msdn.microsoft.com/en-us/library/Aa479035"&gt;Profile provider&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I've successfully configured and used the default functionality here in asp.net Mvc2&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I would love to figure out how to enable some items to be for even anonymous visitors and the rest for authenticated users only.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;VSTO - outlook&amp;nbsp;add in&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Outlook 2007 for whatever reason does not allow you to add rules involving distribution groups&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I wrote an add-on (far from release quality) that gets around that and has a WPF window with a WPF&amp;nbsp;data-grid&amp;nbsp;to sort mail involving distribution groups into proper folders.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;WPF - this leads me of course to the fact I've now done my first WPF window&lt;/li&gt;&lt;li&gt;VS2010 Add-in&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The process of unloading the project, then editing the project file to look at what hint path a reference has was a pain. In my position I need to check for the presence of bad paths. I wrote an add-in that will open the project file without unloading it, and report back if there are any of these bad paths present.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;VS2010 - Guidance Package migrated from vs2008 to a &lt;a href="http://blogs.msdn.com/b/quanto/archive/2009/05/26/what-is-a-vsix.aspx"&gt;.vsix &lt;/a&gt;extension.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;We have a guidance package that just barely qualifies as such to help developers create new components for our incredibly huge (443 projects, not counting testing projects) application. It generates 4 projects for every component (common, control(s), service, test).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I converted it to a .vsix and made many improvements such as adding a default form instead of just the existing user control for components that have a full form pop or dialog.&lt;/li&gt;&lt;li&gt;I added class file template projects (both the .cs and the designer.cs) for adding another user control or dialog&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;MsBuild tasks- We do not have a solution file for our 443 project application! We build the projects individually then assemble them together. Our build process involves CC.net, 2 huge build scripts, no custom logger, a .net app to generate/build locally, &amp;nbsp;and a lot of spaghetti&amp;nbsp;Msbuild&amp;nbsp;code.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I wrote a build task that takes the app's logic and my own Linq to&amp;nbsp;XML&amp;nbsp;to generate a proper build order on the fly by reading in the ITaskItem[] for all the project files, and comparing the list of assembly names against project references (intra-component references in our project depend on all dependencies going to 1 of 2 special folders instead of direct project references)&lt;/li&gt;&lt;li&gt;The next step was generating a project file that has the items in the right order already, with additional&amp;nbsp;convenient&amp;nbsp;message output.&lt;/li&gt;&lt;li&gt;I've been thinking of trying to generate a solution file or making the projects reference each other for MSBuild auto-dependency-detection and build ordering, but I've not hit enough dead-ends the way I'm currently going.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Entity Framework - I've made 2 poor attempts or perhaps good attempts that failed to use EF4.0 in the same way I'm used to with Linq to SQL.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-2980813555652897077?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/2980813555652897077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/06/recent-poc-experiments.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2980813555652897077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2980813555652897077'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/06/recent-poc-experiments.html' title='Recent POC experiments'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-7486067562299296278</id><published>2010-05-19T10:50:00.000-04:00</published><updated>2010-05-19T10:50:17.464-04:00</updated><title type='text'>Call chain that could be null at any step. Enter IfNotNull or Maybe.</title><content type='html'>It could be called IfNotNull or Maybe, currently i'm going with Maybe.&lt;br /&gt;&lt;br /&gt;Project available at &lt;a href="http://maybe.codeplex.com/"&gt;http://Maybe.codeplex.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So we've all had to write code like&lt;br /&gt;&lt;br /&gt;if(one==null) return null;&lt;br /&gt;if(one.two==null) return null;&lt;br /&gt;if(one.two.three==null) return null;&lt;br /&gt;return one.two.three.four;&lt;br /&gt;&lt;br /&gt;Now there's code to do it all in one fell swoop.&lt;br /&gt;&lt;br /&gt;return one.Maybe(o=&amp;gt;o.two.three.four);&lt;br /&gt;&lt;br /&gt;It also handles primitives not just classes:&lt;br /&gt;&lt;br /&gt;return one.MaybeNullable(o=&amp;gt;o.two.three, t=&amp;gt;t.four);&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maybe.codeplex.com/SourceControl/changeset/view/50648#1345288"&gt;Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Inspired by:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/alexj/archive/2008/03/03/maybe-there-is-more.aspx"&gt;http://blogs.msdn.com/alexj/archive/2008/03/03/maybe-there-is-more.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.developpeur.org/miiitch/archive/2008/02/29/vendredi-c-est-expression-tree.aspx"&gt;http://blogs.developpeur.org/miiitch/archive/2008/02/29/vendredi-c-est-expression-tree.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some reading on the subject:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://abdullin.com/journal/2009/10/6/zen-development-practices-c-maybe-monad.html"&gt;http://abdullin.com/journal/2009/10/6/zen-development-practices-c-maybe-monad.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/1196031/evil-use-of-maybe-monad-and-extension-methods-in-c"&gt;http://stackoverflow.com/questions/1196031/evil-use-of-maybe-monad-and-extension-methods-in-c&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note to self: Answer this once posted:&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/854591/how-to-check-for-nulls-in-a-deep-lambda-expression/854619#854619"&gt;http://stackoverflow.com/questions/854591/how-to-check-for-nulls-in-a-deep-lambda-expression/854619#854619&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-7486067562299296278?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/7486067562299296278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/05/call-chain-that-could-be-null-at-any.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7486067562299296278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/7486067562299296278'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/05/call-chain-that-could-be-null-at-any.html' title='Call chain that could be null at any step. Enter IfNotNull or Maybe.'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8337983831036394643</id><published>2010-04-20T21:14:00.001-04:00</published><updated>2010-04-20T21:15:21.321-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Javascript tooling</title><content type='html'>So I've been working with Javascript for a week or two now. I still loathe it. However I would not probably touch it at all were it not for &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt;&amp;nbsp;- Feels like a .net framework for javascript&lt;/li&gt;&lt;li&gt;&lt;a href="http://jqueryui.com/"&gt;JQueryUi&lt;/a&gt;&amp;nbsp;- Ah a (ightweight custom control library&lt;/li&gt;&lt;li&gt;&lt;a href="http://jqueryui.com/"&gt;&lt;/a&gt;&lt;a href="http://www.learningjquery.com/2008/06/updated-jquery-bookmarklet"&gt;JQuerify&lt;/a&gt;&amp;nbsp;- Inject jQuery onto pages that don't have it for making &lt;a href="http://www.marklets.com/"&gt;bookmarklets&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I've used &lt;a href="http://www.microsoft.com/visualstudio/en-us/visual-studio-events"&gt;Visual Studio&lt;/a&gt; 2010 &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/ultimate"&gt;Ultimate&lt;/a&gt; primarily for the script writing because of the code/syntax coloring and &amp;nbsp;built in (poor but still built in) {} () [] matching capabilities. Those aren't specific to Ultimate, or 2010 for all I know.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For debugging scripts I've used&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://getfirebug.com/"&gt;FireBug&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Google Chrome's built-in developer tool bar (alot)&lt;/li&gt;&lt;li&gt;&lt;a href="http://jsbin.com/"&gt;JsBin &lt;/a&gt;- online javascript collaborative debugger (seemed slightly buggy, but still worth it)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javascriptlint.com/online_lint.php"&gt;Javascript Lint&lt;/a&gt; - nice online static analyzer for syntax and other problems.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;On top of those as base scripts to help with life&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://craigsworks.com/projects/qtip/"&gt;qTip &lt;/a&gt;- Nice jQuery plugin &amp;nbsp;tool tip script for web pages&lt;/li&gt;&lt;li&gt;Google's lovely api hosting content delivery network for jQuery, and jQueryUi.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Sidenote: apparently resizable, and who knows what else required I also reference "http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css"&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8337983831036394643?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8337983831036394643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/04/javascript-tooling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8337983831036394643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8337983831036394643'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/04/javascript-tooling.html' title='Javascript tooling'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-4192692956061177724</id><published>2010-04-10T10:58:00.000-04:00</published><updated>2010-04-10T10:58:36.015-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='CORS'/><category scheme='http://www.blogger.com/atom/ns#' term='Click Once'/><category scheme='http://www.blogger.com/atom/ns#' term='cross-site'/><title type='text'>ClickOnce Bookmarklets...maybe click twice</title><content type='html'>I have a set of bookmarklets that go to my website, and actually use the current version of the bookmarklet. So the bookmarklet on the bar is just a pointer to a script out on my site. So I can update the bookmarklets to my heart's content without the end user having to do anything at all. Unless I move where the bookmarklets live on my site. So if your bookmarklet living space can be more permanent here's the cross domain bookmarklet injection code:&lt;br /&gt;&lt;br /&gt;&lt;div style='font-family:Monospace; font-size: 10pt; background-color: white;'&gt;&lt;span style='color:Blue'&gt;var&lt;/span&gt;&lt;span style='color:Black'&gt; e=document.createElement(&lt;/span&gt;&lt;span style='color:#a31515'&gt;'script'&lt;/span&gt;&lt;span style='color:Black'&gt;);&lt;br/&gt;&lt;br /&gt;e.setAttribute(&lt;/span&gt;&lt;span style='color:#a31515'&gt;'language'&lt;/span&gt;&lt;span style='color:Black'&gt;, &lt;/span&gt;&lt;span style='color:#a31515'&gt;'javascript'&lt;/span&gt;&lt;span style='color:Black'&gt;);&lt;br/&gt;&lt;br /&gt;e.setAttribute(&lt;/span&gt;&lt;span style='color:#a31515'&gt;'token'&lt;/span&gt;&lt;span style='color:Black'&gt;, &lt;/span&gt;&lt;span style='color:#a31515'&gt;'@testToken'&lt;/span&gt;&lt;span style='color:Black'&gt;);&lt;br/&gt;&lt;br /&gt;e.setAttribute(&lt;/span&gt;&lt;span style='color:#a31515'&gt;'src'&lt;/span&gt;&lt;span style='color:Black'&gt;, &lt;/span&gt;&lt;span style='color:#a31515'&gt;'http://imaginarydevelopment.com/Sfc/Scripts/ClientScripts/AjaxXmlHttp.js'&lt;/span&gt;&lt;span style='color:Black'&gt;);&lt;br/&gt;&lt;br /&gt;document.body.appendChild(e);&lt;/span&gt;&lt;span style='color:Blue'&gt;void&lt;/span&gt;&lt;span style='color:Black'&gt;(0);&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notice the token code. That makes it so that in the child script I can pull in which user it is, and make posts to that user's account directly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-4192692956061177724?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/4192692956061177724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/04/clickonce-bookmarkletsmaybe-click-twice.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4192692956061177724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4192692956061177724'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/04/clickonce-bookmarkletsmaybe-click-twice.html' title='ClickOnce Bookmarklets...maybe click twice'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-192195490934940084</id><published>2010-04-02T13:52:00.000-04:00</published><updated>2010-04-02T13:52:47.352-04:00</updated><title type='text'>Macro Resources</title><content type='html'>So for any that live primarily never paying any attention to the fact that Visual Studio supports macros like me.&amp;nbsp; I thought in the spirit of my last post it would help to have some resources around other useful macros.&lt;br /&gt;&lt;br /&gt;Additionally apparently macros can be auto triggered by 'Environment' Events such as solution open or close&lt;br /&gt;Here's a nice list from the Stackoverflow community&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/523220/awesome-visual-studio-macros"&gt;Awesome Visual Studio Macros&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Selected Text browser macros (whatever you have highlighted/selected in your code file)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;google it &lt;/li&gt;&lt;li&gt;spellcheck the word&lt;/li&gt;&lt;li&gt;MSDN search&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;InsertNewGuidLiteral&lt;/li&gt;&lt;li&gt;AutoClose the start page when you open a solution&lt;/li&gt;&lt;li&gt;AutoOpen the start page when you close a solution&lt;/li&gt;&lt;li&gt;Automatic Build timer with every build to the output window&lt;/li&gt;&lt;li&gt;Dual monitor / Single monitor macro for switching back and forth on the fly&lt;/li&gt;&lt;li&gt;Outlining: Collapse to definitions but expand regions&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-192195490934940084?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/192195490934940084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/04/macro-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/192195490934940084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/192195490934940084'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/04/macro-resources.html' title='Macro Resources'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-3417058195294453417</id><published>2010-03-31T23:38:00.000-04:00</published><updated>2010-03-31T23:38:09.558-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vs2008'/><category scheme='http://www.blogger.com/atom/ns#' term='macro'/><title type='text'>VS2008 Macro problem</title><content type='html'>Maybe I'm slipping in my VB skills since I've been using C# exclusively for around 2 years now, but this seems like a major user unfriendly 'feature' in Visual Studio.&lt;br /&gt;&lt;br /&gt;Macros do not work, nor expand into macro explorer if the module in the file doesn't have the same name as the file it is in.&lt;br /&gt;&lt;br /&gt;So when I pasted &lt;a href="http://www.codinghorror.com/"&gt;Jeff Atwood&lt;/a&gt;'s wonderful &lt;a href="http://www.codinghorror.com/blog/archives/000429.html"&gt;FormatCodeToHtml Macro&lt;/a&gt; into a macro file in the macro editor called FormatToHtml, nothing happened. The macro file was added to the MyMacros project, but none of the actual macros expanded under it. Google was not helpful since the terms "Visual Studio 2008 macro not expanding" didn't turn anything helpful up. Apparently my &lt;a href="http://www.codekeep.net/VBNET/code/snippets/17734/FormatCodeToHtml/view.aspx"&gt;code snippet&lt;/a&gt; on code keep is the 2nd google result for "jeff atwood rtf to html" sweet!&lt;br /&gt;&lt;br /&gt;And the real kicker is... Visual studio doesn't complain, it doesn't show an error. It does not show any output when you click build on the macro project. It gives you no hints whatsoever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-3417058195294453417?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/3417058195294453417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/03/vs2008-macro-problem.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3417058195294453417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/3417058195294453417'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/03/vs2008-macro-problem.html' title='VS2008 Macro problem'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-2091057585470722636</id><published>2010-02-17T13:07:00.000-05:00</published><updated>2010-02-17T13:07:58.305-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='enum'/><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><title type='text'>Enum Extensions</title><content type='html'>&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;If you're a fan of Enums for readability in an application here are some resources for making them more usable.&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt; &lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;The first item is used for places where you'd like some enum values to have a space in the name when displayed somewhere. You can use System.ComponentModel.&lt;span style="color: #2b91af;"&gt;DescriptionAttribute&lt;/span&gt; like so:&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;Flags&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;enum&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;PermissionType&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select = 1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Insert = 2,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Update = 4,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delete = 8,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Alter = 16,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Execute = 32,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Description&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"View Definition"&lt;/span&gt;&lt;span style="color: black;"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewDefinition = 64&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;and here's the extension method to make it easily usable: &lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System.ComponentModel;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; from: http://www.moggoly.me.uk/blog/post/Enum-description-values.asp&lt;/span&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; DescriptionOrToString&lt;t&gt;(&lt;/t&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt; T value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; da = (&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;DescriptionAttribute&lt;/span&gt;&lt;span style="color: black;"&gt;[])(&lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;&lt;span style="color: black;"&gt;(T).GetField(value.ToString()).GetCustomAttributes(&lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;DescriptionAttribute&lt;/span&gt;&lt;span style="color: black;"&gt;), &lt;/span&gt;&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;span style="color: black;"&gt;));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; da.Length &amp;gt; 0 ? da[0].Description : value.ToString();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;if you don't like the possible clutter of having every object have a DescriptionOrToString in your intellisense, change the signature to&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; DescriptionOrToString&lt;t&gt;(&lt;/t&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt; T value) &lt;/span&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;span style="color: black;"&gt; T:&lt;/span&gt;&lt;span style="color: blue;"&gt;struct&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;span style="color: black;"&gt; This method is for enumerating enum values that are used as &lt;/span&gt;[&lt;span style="color: #2b91af;"&gt;Flags&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt;&lt;span style="color: black;"&gt; (where a single value can contain many different values in the same enum)&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets all combined items from an enum value.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; from: http://stackoverflow.com/questions/105372/c-how-to-enumerate-an-enum&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;typeparam name="T"&gt;&lt;/typeparam&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;param name="value" /&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The value.&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t&gt; GetAllSelectedItems&lt;t&gt;(&lt;/t&gt;&lt;/t&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Enum&lt;/span&gt;&lt;span style="color: black;"&gt; value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt; valueAsInt = &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;&lt;span style="color: black;"&gt;.ToInt32(value, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: black;"&gt;.InvariantCulture);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&lt;span style="color: black;"&gt; item &lt;/span&gt;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Enum&lt;/span&gt;&lt;span style="color: black;"&gt;.GetValues(&lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;&lt;span style="color: black;"&gt;(T)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt; itemAsInt = &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;&lt;span style="color: black;"&gt;.ToInt32(item, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: black;"&gt;.InvariantCulture);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&lt;span style="color: black;"&gt; (itemAsInt == (valueAsInt &amp;amp; itemAsInt))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;yield&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; (T)item;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;The next post will contain a usage example for GetAllSelectedItems.&lt;br /&gt;&lt;/span&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-2091057585470722636?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/2091057585470722636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/02/enum-extensions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2091057585470722636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2091057585470722636'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/02/enum-extensions.html' title='Enum Extensions'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-2583362970652130467</id><published>2010-02-04T08:56:00.001-05:00</published><updated>2010-02-04T08:58:25.074-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reuse'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>MVC 2 reusable content options</title><content type='html'>There are 2 main sources of reusable or dynamic page content in Asp.net MVC. Partial Views(using Html.RenderPartial), and HtmlHelpers. Other options include Html.RenderAction, and Ajax calls (for adding content after the page is loaded).&amp;nbsp; Here's my understanding of them thus far.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Partial views&lt;/b&gt; can be strongly typed, but if the type is different from your hosting page(s) you lose the ability to do Html.DisplayFor, Html.TextBoxFor, and have it utilize that type's names. This can all be overcome by designing a custom DTO or ViewModel for the partial view, but that's more steps. Partial views internally work very similar to if they were inside a regular view, however the &amp;lt;%= %&amp;gt; does not seem to come up by default in intellisense. Instead, you get&amp;lt;%&lt;span style="color: blue;"&gt;@&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Assembly&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt; %&amp;gt;&lt;/span&gt;. It's nice if you prefer to model your code in a similar way to how a view would look.&lt;br /&gt;&lt;br /&gt;Another option is &lt;b&gt;HtmlHelper&lt;/b&gt;, which is what you are using when you type Html.TextBox, or Html.TextBoxFor, etc... You write one of these by putting a static class in your project for extension methods. Then writing an Extension method that extends HtmlHelper like so&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System.Web.Mvc;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; BReusable; &lt;/span&gt;&lt;span style="color: green;"&gt;//For the Member class&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt; &lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;const&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; JavaScript = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;" &amp;lt; script type=\"text/javascript\" language=\"javascript\"&amp;gt;\n"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt; &lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; JqueryLoadForId&lt;t&gt;(&lt;/t&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;HtmlHelper&lt;/span&gt;&lt;span style="color: black;"&gt; helper, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Expression&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t,&gt;&lt;/t,&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;object&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&amp;gt; memberName,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; function)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; JavaScript + &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"$(function() {\n$('#' + '"&lt;/span&gt;&lt;span style="color: black;"&gt; + &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name(memberName) + &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"')\n."&lt;/span&gt;&lt;span style="color: black;"&gt; + function +&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #a31515;"&gt;";\n});\n\n"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;}&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;As you can see this code can start to look messy and probably suffers from pre-mature optimization. String.Format suffers a performance penalty, but using that would allow most of this code to sit in a .js or resource file instead of the poor formatting options that string literals leave us.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;RenderAction&lt;/b&gt; is useful for returning one of the normal &lt;a href="http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/mvc/tutorial-03-cs.aspx"&gt;controller result types&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ViewResult – Represents    HTML and markup.&lt;/li&gt;&lt;li&gt;EmptyResult – Represents    no result.&lt;/li&gt;&lt;li&gt;RedirectResult – Represents    a redirection to a new URL.&lt;/li&gt;&lt;li&gt;JsonResult – Represents    a JavaScript Object Notation result that can be used in an AJAX application.&lt;/li&gt;&lt;li&gt;JavaScriptResult – Represents    a JavaScript script.&lt;/li&gt;&lt;li&gt;ContentResult – Represents    a text result.&lt;/li&gt;&lt;li&gt;FileContentResult – Represents    a downloadable file (with the binary content).&lt;/li&gt;&lt;li&gt;FilePathResult – Represents    a downloadable file (with a path).&lt;/li&gt;&lt;li&gt;FileStreamResult – Represents    a downloadable file (with a file stream).&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Ajax&lt;/b&gt; options&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ajax class&lt;/li&gt;&lt;ul&gt;&lt;li&gt;use AjaxOptions parameter to specify many options&lt;/li&gt;&lt;ul&gt;&lt;li&gt; Example: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="coloredcode"&gt;new AjaxOptions { &lt;br /&gt;        Confirm="Are you sure?",&lt;br /&gt;        HttpMethod="POST",&lt;br /&gt;        UpdateTargetId="divResultText",&lt;br /&gt;        LoadingElementId="divLoading",&lt;br /&gt;        OnSuccess = "myCallback"&lt;br /&gt;    }&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Ajax.ActionLink&lt;/li&gt;&lt;li&gt;using(Ajax.BeginForm()){}&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;javascript or jQuery Ajax calls to web methods&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/"&gt;Jquery Article&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-2583362970652130467?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/2583362970652130467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/02/mvc-2-reusable-content-options.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2583362970652130467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2583362970652130467'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/02/mvc-2-reusable-content-options.html' title='MVC 2 reusable content options'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-6363149413523655230</id><published>2010-01-28T15:56:00.003-05:00</published><updated>2010-08-03T14:34:05.961-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unitTesting'/><category scheme='http://www.blogger.com/atom/ns#' term='TypeMock'/><title type='text'>UnitTesting made easy with the power of TypeMock</title><content type='html'>I want to test the persistence layer of my code. One of the recently added requirements for the persistence layer is that it accepts a domain class that wraps around the user name to ensure consistent handling throughout the application of a username. This is because currently the decision is to strip the Windows Domain name off of a userName before using it or storing it. Should the decision be reversed, there's a central configuration alteration to make, without having to recompile the application. How nice are changes that require a simple text file to be changed?&lt;br /&gt;&lt;br /&gt;So the call would be:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; result=repository.GetAssociate(&lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;UserName&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;DependencyContainer.&lt;/span&gt;&lt;span style="color: black;"&gt;GetAssociate&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;()&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;))&lt;/span&gt;;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;Which you can't call from the persistence layer because&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;ul&gt;&lt;li&gt; The Dependency container is defined in an assembly not referenced by the persistence layer&amp;nbsp;&lt;/li&gt;&lt;li&gt;The UserName constructor is internal to the domain assembly&lt;/li&gt;&lt;/ul&gt;So to make the method repository.GetAssociate testable, we would have to alter the OOP design of the code to make it testable in most frameworks( because there is no public constructor for &lt;span style="color: #2b91af;"&gt;UserName)&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;You could of course messy up your code by using dependency injection on everything that needs testing. This concern does partly fall down if you centralize the coupling between your domain and external dependencies, but remains when you try to test individual methods inside a class, or anything internal, private, or that accesses static methods(most testing frameworks can not handle mocking out static methods, constructors, or factories, as I understand it TypeMock can)&lt;br /&gt;&lt;br /&gt;You could make your code messier and more prone to issues in dependent code by changing username to a public interface and changing the persistence layer to accept that interface, but then automatic business logic enforcement goes out the window. If an object outside of the domain assembly can not create a copy of a domain object it has no reason to create, then it's tougher to accidentally not pass things through the proper domain classes/methods.&lt;br /&gt;&lt;br /&gt;So how do I test this method?&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;Enter TypeMock.&lt;br /&gt;&lt;br /&gt;I have the following code in the persistence assembly's test project which does not compile:&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt; GetAssociate_InvalidUser_IsNull()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; repository = &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;AssociateRepository&lt;/span&gt;&lt;span style="color: black;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; result=repository.GetAssociate(&lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;UserName&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"badUser"&lt;/span&gt;&lt;span style="color: black;"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.IsNull(result);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;Notice I said the persistence assembly, which makes the possibility of &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;[&lt;span style="color: #2b91af;"&gt;IInternalsVisibleTo&lt;/span&gt;&lt;span style="color: black;"&gt;] a poor choice.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;I delete the `&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;UserName&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"badUser"&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;` call&lt;/span&gt; and TypeMock springs up with a tooltip that says Alt+/ to Fake UserName.&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;Which immediately produces the following:&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Isolated&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt; GetAssociate_InvalidUser_IsNull()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;UserName&lt;/span&gt;&lt;span style="color: black;"&gt; fakeUserName = &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Isolate&lt;/span&gt;&lt;span style="color: black;"&gt;.Fake.Instance&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;UserName&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; repository = &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;AssociateRepository&lt;/span&gt;&lt;span style="color: black;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; result=repository.GetAssociate(fakeUserName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.IsNull(result);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;and my cursor is sitting at the fakeUserName parameter with a new tooltip Set Object Behavior Alt+/&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;I hit that keysequence and it reflectively I assume shows me options for what this object could do, and what methods I might want to produce a value for. Since this is my first time, I don't know if it's automatically pulling in only the methods that the method I'm testing will make use of. I had only the method I wanted to fake in a drop down menu, going into that produced 3 options: Ignore Call, Return Value, Throw Exception. I enter return value and this is produced:&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;Isolated&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt; GetAssociate_InvalidUser_IsNull()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;UserName&lt;/span&gt;&lt;span style="color: black;"&gt; fakeUserName = &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Isolate&lt;/span&gt;&lt;span style="color: black;"&gt;.Fake.Instance&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;UserName&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; repository = &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;AssociateRepository&lt;/span&gt;&lt;span style="color: black;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Isolate&lt;/span&gt;&lt;span style="color: black;"&gt;.WhenCalled(() =&amp;gt; fakeUserName.ToString()).WillReturn();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; result=repository.GetAssociate(fakeUserName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.IsNull(result);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;My cursor is already sitting in the WillReturn waiting for me to type in the parameter. I type in&lt;/span&gt;&lt;span style="color: #a31515;"&gt; "badUser"&lt;/span&gt;&lt;span style="color: black;"&gt;, run the test, and it passes. that's terrific.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;I did not have to alter my code to fit the tests. I did not have to think about testability when writing the code. I did not need any special assembly attributes. I want TypeMock. It makes life so much better.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-6363149413523655230?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/6363149413523655230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/unittesting-made-easy-with-power-of.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6363149413523655230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6363149413523655230'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/unittesting-made-easy-with-power-of.html' title='UnitTesting made easy with the power of TypeMock'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-2670536783976856610</id><published>2010-01-14T09:23:00.000-05:00</published><updated>2010-01-14T09:23:32.601-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='webapp'/><title type='text'>Tools for the mobile developer</title><content type='html'>I like to have the freedom to be have access to pretty much any application/functionality wherever I happen to be. In light of that here are several useful free websites, webapps, and small downloads that make that possible:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Project Management/bug tracking - &lt;a href="http://www.pivotaltracker.com/"&gt;PivotalTracker&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Collaborative native&lt;/li&gt;&lt;li&gt;automatic emailing&lt;/li&gt;&lt;li&gt;allows you to use the same login to manage work vs personal projects&lt;/li&gt;&lt;li&gt;API so that you could write a webapp that reported bugs straight into your project tracker.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&amp;nbsp;Version control&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.projectlocker.com/"&gt;ProjectLocker &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Subversion/Git&lt;/li&gt;&lt;li&gt;Also project management via wiki, trac, build locker, document management&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;I had some speed issues uploading via their web interface through the corporate firewalls&lt;/li&gt;&lt;li&gt;Have not tried it with a client app&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;ToDo list - &lt;a href="http://toodledo.com/"&gt;toodledo.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.linqpad.net/"&gt;LinqPad&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;linq to sql test bench &lt;br /&gt;&lt;/li&gt;&lt;li&gt;speedy code testing bench&lt;/li&gt;&lt;li&gt;free for all features except intellisense &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Purchase license to enable intellisense (even for sql server 2005!)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Developer forums - &lt;a href="http://stackoverflow.com/"&gt;stackoverflow.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Regular expressions&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://gskinner.com/RegExr/"&gt;RegExr&lt;/a&gt; - Online expression testing tool&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;UML/flowcharting&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://creately.com/"&gt;Creately.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Mind mapping&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://creaza.com/"&gt;Creaza.com&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.creaza.com/members/imaginarydevelopment/mindomo/4040623"&gt;My .net mind map &lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;OCR&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://newocr.com/"&gt;Newocr.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Collaborative&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Scribblar.com&lt;/li&gt;&lt;ul&gt;&lt;li&gt;White board&lt;/li&gt;&lt;li&gt;live audio&lt;/li&gt;&lt;li&gt;text chat&lt;/li&gt;&lt;li&gt;image collaboration&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Personal music library webapp&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tunesbag.com/"&gt;Tunesbag.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-2670536783976856610?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/2670536783976856610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/tools-for-mobile-developer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2670536783976856610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2670536783976856610'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/tools-for-mobile-developer.html' title='Tools for the mobile developer'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-2035418232816369087</id><published>2010-01-13T16:47:00.002-05:00</published><updated>2011-07-22T08:28:40.149-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T4'/><title type='text'>T4 Generates my business objects for me</title><content type='html'>I have finally started understanding/applying Oleg Synch's &lt;a href="http://www.olegsych.com/2008/09/t4-tutorial-creatating-your-first-code-generator/"&gt;T4 code generation tutorials&lt;/a&gt;. I'm at least to the point where I've made something useful. My goal was to design a business object generator that would be reusable between persistence and ui changes (actual code changes, or swapping out to a completely different layer) without recompiling, or making any changes what-so-ever in the business module. It consists of a Template that defines what a business object class should look like, and related scripts for particular business object details.&lt;br /&gt;&lt;br /&gt;The main difficulties were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;validation&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;centralized validation model &lt;/li&gt;&lt;li&gt;being capable of providing multiple field specific error messages, instead of just the first one that is discovered&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;mapping objects&lt;/li&gt;&lt;ul&gt;&lt;li&gt;looking for a way to cope with Linq-To-Sql's entities, while maintaining persistance indepdendence&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;What remains:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Validation&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Investigate ways to push validation logic out to the client-side&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Decide on an extensibility option&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Partial classes&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Would this allow someone to implement additional functionality in another assembly? That would be against the design. &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Inheritance&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Everyone nowadays is avoiding inheritance in favor of interfaces &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Direct Script (not the generic template, the script specific to a business object type) modification&amp;nbsp;&lt;/li&gt;&lt;li&gt;Make the class generic so it can hold another object for additional functionality&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;The template and script are included. &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;The template BusinessObjectTemplate.tt:&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;lt;#@&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;assembly&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; name=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;System.Core&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;import&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; namespace=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;System.Collections.Generic&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;Import&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; Namespace=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;System.Linq&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&amp;lt;#+&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public class BusinessPropertyT4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private readonly string _typeString;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public string TypeString { get { return _typeString; } }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public BusinessPropertyT4(string type )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_typeString = type;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public string BoolValidation { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public string RuleViolationMessage { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public bool CopyExclude {get; set;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;public class BusinessObjectTemplate : Template&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public string BusinessName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public IDictionary&lt;string,businesspropertyt4&gt; PropertyList;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public override string TransformText()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;/string,businesspropertyt4&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;using&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;System;&lt;br /&gt;using&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;System.Collections.Generic;&lt;br /&gt;using&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;BReusable;&lt;br /&gt;namespace&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;DefectSeverityAssessmentBusiness.&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;public&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;class&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Model&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;:I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;#region&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Members&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#+&lt;/span&gt;&lt;span style="color: midnightblue;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (string item in PropertyList.Keys)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteLine("public "+PropertyList[item].TypeString +" "+ item+" { get; set; }");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;#endregion&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;public&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;IEnumerable&lt;ruleviolation&gt;&lt;/ruleviolation&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;GetRuleViolations()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#+&lt;/span&gt;&lt;span style="color: midnightblue;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (string item in PropertyList.Keys)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(string.IsNullOrEmpty(PropertyList[item].BoolValidation)==false &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;&amp;amp; string.IsNullOrEmpty(PropertyList[item].RuleViolationMessage)==false)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteLine("\tif ("+PropertyList[item].BoolValidation+")");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteLine("\t&lt;/span&gt;&lt;span style="color: black;"&gt;\&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;t yield return new RuleViolation(\""+PropertyList[item].RuleViolationMessage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+"\",Member.Name&lt;model"+businessname+"&gt;(x=&amp;gt;x."+item+"));");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/model"+businessname+"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;//if&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;(Latitude&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;==&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;0&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;||&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Longitude&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;==&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;0)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;//&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;yield&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;return&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;new&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;RuleViolation("Make&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;sure&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;to&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;enter&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;a&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;valid&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;address!",&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;"Address");&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;yield&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;break;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;This&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;is&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;validated&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;in&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;a&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;unit&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;test&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;to&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;ensure&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;accuracy&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;and&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;that&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;it&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;is&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;not&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;out&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;of&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;sync&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;with&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;the&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;number&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;of&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;members&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;the&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;interface&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;has&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;typeparam&gt;&lt;/typeparam&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="T"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="dest"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="source"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="includeIdentifier"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;public&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;static&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Dictionary&lt;string,&gt;&lt;/string,&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Action&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;GenerateActionDictionary&lt;t&gt;(T&lt;/t&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;dest,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;source,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;bool&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;includeIdentifier)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;where&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;T&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;var&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;result&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;=&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;new&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Dictionary&lt;string,&gt;&lt;/string,&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Action&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#+&lt;/span&gt;&lt;span style="color: midnightblue;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (string item in PropertyList.Keys)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(PropertyList[item].CopyExclude==false)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteLine("\t{Member.Name&lt;i"+businessname+"&gt;(x=&amp;gt;x."+item+"),");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteLine("\t&lt;/i"+businessname+"&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;\&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;t()=&amp;gt;dest."+item+"=source."+item+"},");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;return&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;result;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Designed&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;for&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;copying&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;the&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;model&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;to&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;the&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;db&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;persistence&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;object&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;or&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;ui&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;display&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;object&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;typeparam&gt;&lt;/typeparam&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="T"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="creator"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="source"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="includeIdentifier"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="excludeList"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;public&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;static&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;T&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;CopyData&lt;t&gt;(Func&lt;t&gt;&lt;/t&gt;&lt;/t&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;creator,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;source,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;bool&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;includeIdentifier,&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;ICollection&lt;string&gt;&lt;/string&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;excludeList)&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;where&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;T&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;return&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;CopyDictionary&lt;t,&gt;&lt;/t,&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;.CopyData(&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;GenerateActionDictionary,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;creator,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;source,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;includeIdentifier,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;excludeList);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Designed&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;for&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;copying&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;the&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;ui&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;to&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;the&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;model&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;typeparam&gt;&lt;/typeparam&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="T"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="validation"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="creator"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="source"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="includeIdentifier"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;name="excludeList"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;public&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;static&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;T&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;CopyData&lt;t&gt;(IValidationDictionary&lt;/t&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;validation,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;Func&lt;t&gt;&lt;/t&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;creator,&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;source,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;bool&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;includeIdentifier,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;ICollection&lt;string&gt;&lt;/string&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;excludeList)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;where&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;T&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;return&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;CopyDictionary&lt;t,&gt;&lt;/t,&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;.CopyData(&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;GenerateActionDictionary,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;validation,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;creator,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;source,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;includeIdentifier,&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;excludeList);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;}&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;//&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;end&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;class&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;public&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;interface&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;I&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;BusinessName &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;{&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#+&lt;/span&gt;&lt;span style="color: midnightblue;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PushIndent("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (string item in PropertyList.Keys)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WriteLine(PropertyList[item].TypeString+" "+item+" { get; set; }");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;}&lt;br /&gt;}//end&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;namespace&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;#+&lt;/span&gt;&lt;span style="color: midnightblue;"&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PopIndent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return this.GenerationEnvironment.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;The first script ModelRegistrationTemplate.tt&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;lt;#@&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;template&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; language=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;C#v3.5&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; hostspecific=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;True&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; debug=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;True&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;output&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; extension=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;cs&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;include&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; file=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;T4Toolbox.tt&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;include&lt;/b&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; file=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;../BusinessObjectTemplate.tt&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&amp;lt;#&lt;/span&gt;&lt;span style="color: midnightblue;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BusinessObjectTemplate template = new BusinessObjectTemplate();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template.BusinessName="Registration";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template.PropertyList=new Dictionary&lt;string,businesspropertyt4&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{"UserName",new BusinessPropertyT4("string"){BoolValidation="String.IsNullOrEmpty(UserName)",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RuleViolationMessage="UserName is required"/*,CopyExclude=true */}},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{"Name",new BusinessPropertyT4("string")},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{"Email",new BusinessPropertyT4("string")},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{"MailCode",new BusinessPropertyT4("string")},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{"TelephoneNumber",new BusinessPropertyT4("string")},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{"OrganizationId",new BusinessPropertyT4("int?")},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{"OrganizationSponsorId",new BusinessPropertyT4("int?")},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template.Render();&lt;br /&gt;&lt;/string,businesspropertyt4&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;#&amp;gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;And the final output:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System.Collections.Generic;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; BReusable;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&lt;span style="color: black;"&gt; DefectSeverityAssessmentBusiness.Registration&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ModelRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region&lt;/span&gt;&lt;span style="color: black;"&gt; IRegistration Members&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; UserName { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; Name { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; Email { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; MailCode { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; TelephoneNumber { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt;? OrganizationId { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt;? OrganizationSponsorId { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;RuleViolation&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt; GetRuleViolations()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&lt;span style="color: black;"&gt;.IsNullOrEmpty(UserName))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;yield&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;RuleViolation&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"UserName is required"&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ModelRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.UserName));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;//if (Latitude == 0 || Longitude == 0)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yield return new RuleViolation("Make sure to enter a valid address!", "Address");&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;yield&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;break&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; This is validated in a unit test to ensure accuracy and that it is not out of sync with &lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the number of members the interface has&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;typeparam name="T"&gt;&lt;/typeparam&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="dest" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="source" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="includeIdentifier" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt; GenerateActionDictionary&lt;t&gt;(T dest, &lt;/t&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt; source, &lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt; includeIdentifier)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;span style="color: black;"&gt; T : &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; result = &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.UserName),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()=&amp;gt;dest.UserName=source.UserName},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.Name),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()=&amp;gt;dest.Name=source.Name},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.Email),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()=&amp;gt;dest.Email=source.Email},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.MailCode),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()=&amp;gt;dest.MailCode=source.MailCode},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.TelephoneNumber),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()=&amp;gt;dest.TelephoneNumber=source.TelephoneNumber},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.OrganizationId),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()=&amp;gt;dest.OrganizationId=source.OrganizationId},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Member&lt;/span&gt;&lt;span style="color: black;"&gt;.Name&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;(x=&amp;gt;x.OrganizationSponsorId),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()=&amp;gt;dest.OrganizationSponsorId=source.OrganizationSponsorId},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; result;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Designed for copying the model to the db persistence object or ui display object&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;typeparam name="T"&gt;&lt;/typeparam&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="creator" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="source" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="includeIdentifier" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="excludeList" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; T CopyData&lt;t&gt;(&lt;/t&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t&gt; creator, &lt;/t&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt; source, &lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt; includeIdentifier,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt; excludeList) &lt;/span&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;span style="color: black;"&gt; T : &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;CopyDictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t,&gt;&lt;/t,&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;.CopyData(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GenerateActionDictionary, creator, source, includeIdentifier, excludeList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Designed for copying the ui to the model &lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;typeparam name="T"&gt;&lt;/typeparam&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="validation" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="creator" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="source" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="includeIdentifier" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="excludeList" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; T CopyData&lt;t&gt;(&lt;/t&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IValidationDictionary&lt;/span&gt;&lt;span style="color: black;"&gt; validation, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t&gt; creator,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/t&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt; source, &lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt; includeIdentifier, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt; excludeList)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;span style="color: black;"&gt; T : &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;CopyDictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t,&gt;&lt;/t,&gt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;.CopyData(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GenerateActionDictionary, validation, creator, source, includeIdentifier, excludeList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;/span&gt;&lt;span style="color: green;"&gt;// end class&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;interface&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IRegistration&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; UserName { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; Name { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; Email { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; MailCode { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt; TelephoneNumber { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt;? OrganizationId { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt;? OrganizationSponsorId { &lt;/span&gt;&lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;span style="color: black;"&gt;; &lt;/span&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;span style="color: black;"&gt;; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: green;"&gt;//end namespace&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;The CopyDictionary class is as follows:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System.Collections.Generic;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System.ComponentModel.DataAnnotations;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System.Linq;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: black;"&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt;&lt;span style="color: black;"&gt; DefectSeverityAssessmentBusiness&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;internal&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;CopyDictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t,tu&gt; &lt;/t,tu&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&lt;span style="color: black;"&gt; T:TU&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="actionDictionaryFunc" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="creator" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="source" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="includeIdentifier" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="excludeList" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;null for no exclusions&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; T CopyData(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t,tu,&gt;&lt;/t,tu,&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&amp;gt; actionDictionaryFunc,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t&gt; creator, TU source, &lt;/t&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt; includeIdentifier,&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;excludeList)&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; CopyDataMaster(actionDictionaryFunc, creator, source, includeIdentifier,excludeList, kvp =&amp;gt; kvp.Value());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;summary&gt;&lt;br /&gt;&lt;/summary&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Attempts to copy data, stops on first error, adds to validation dictionary, throws the exception&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="actionDictionaryFunc" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="validation" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="creator" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="source" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="includeIdentifier" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;param name="excludeList" /&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;null for no exclusions&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: grey;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; T CopyData(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t, tu,=""&gt;&lt;/t,&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&amp;gt; actionDictionaryFunc,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IValidationDictionary&lt;/span&gt;&lt;span style="color: black;"&gt; validation, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t&gt; creator,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TU source, &lt;/t&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt; includeIdentifier,&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt; excludeList)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; result= CopyDataMaster(actionDictionaryFunc, creator, source, includeIdentifier,excludeList,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kvp =&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kvp.Value();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Exception&lt;/span&gt;&lt;span style="color: black;"&gt; exception)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;validation.AddError(kvp.Key,exception.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;//TODO: log error?&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&lt;span style="color: black;"&gt;(validation.IsValid==&lt;/span&gt;&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;throw&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ValidationException&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"Validation contains errors"&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; result;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&lt;span style="color: black;"&gt; T CopyDataMaster(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t, tu,=""&gt;&lt;/t,&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&amp;gt; actionDictionaryFunc,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;t&gt; creator,TU source, &lt;/t&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: black;"&gt; includeIdentifier,&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ICollection&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt; excludeList,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;KeyValuePair&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Action&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;&amp;gt; action)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; result = creator();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; kvp &lt;/span&gt;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&lt;span style="color: black;"&gt; actionDictionaryFunc(result,source,includeIdentifier))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&lt;span style="color: black;"&gt;(excludeList==&lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt; || excludeList.Contains(kvp.Key)==&lt;/span&gt;&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;action(kvp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt; result;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;span style="color: black;"&gt; &lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-2035418232816369087?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/2035418232816369087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/t4-generates-my-business-objects-for-me.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2035418232816369087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/2035418232816369087'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/t4-generates-my-business-objects-for-me.html' title='T4 Generates my business objects for me'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-41766525029376226</id><published>2010-01-07T16:58:00.000-05:00</published><updated>2010-01-07T16:58:37.726-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reuse'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='DRY'/><title type='text'>The Fallacy of ReUse</title><content type='html'>I've read &lt;a href="http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/"&gt;The Fallacy of ReUse&lt;/a&gt; and while it presents very good arguments against reusing things. Clearly there is a path to reusable code, otherwise why would we have frameworks or .net? Why would we have so many code snippet web sites and webapps? Microsoft wrote a &lt;a href="http://www.shelfari.com/books/9416672/Framework-Design-Guidelines-Conventions-Idioms-and-Patterns-for-"&gt;book&lt;/a&gt; on this type of reusable code and I'm in the process of reading it. Design patterns are some of the best examples of reusable code that shines or perhaps has been through it's lifecycle and was retired for a better pattern. I'd hardly call a 3-5 yr life cycle something that wasn't reusable.&lt;br /&gt;&lt;br /&gt;I think, like most concepts in programming, there is a time and a place for code reuse, designing for reuse, and refactoring/reworking code for the purpose of reuse.&lt;br /&gt;&lt;br /&gt;Most businesses, concepts, inventions and products don't happen magically, they are born of failure after failure. Look at how many times Thomas Edison failed to invent various things.&lt;br /&gt;&lt;br /&gt;If your position/team/manager leaves you no time for experimentation on tools, concepts, add-ins, macros, frameworks architectures that might improve your overall work speed or team productivity, then reuse attempts/ideas/experimentation is probably not appropriate. However, I don't imagine there's a team out there that couldn't benefit from allocating time for trying alternate ways of doing things, reviewing each others' ways of doing things, or brainstorming for reusable solutions to common problems.&lt;br /&gt;&lt;br /&gt;I also don't imagine it's something everyone can do or excel at. Most people give up on most challenges in life, that's what leaves room to strive for excellence and get there (or enjoy the time spent chasing that elusive goal).&lt;br /&gt;&lt;br /&gt;There's code that's valuable merely because it's called in 2 places in a class. Isn't this the heart of &lt;a href="http://en.wikipedia.org/wiki/Code_refactoring"&gt;refactoring&lt;/a&gt; and Don't Repeat Yourself? Code reuse to me is shooting for &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt; on a slightly higher level than simple class method refactoring, although I work hard at that as well.&lt;br /&gt;&lt;br /&gt;It's to see how far out can this reusable code scale?&lt;br /&gt;Many methods in a class can make use of this code? Nice. Many classes in a project can make use of this class? Cool. Many projects in a solution can make use of this code? Sweet. Some of my reusable code is useful in projects outside of my company? Awesome.&lt;br /&gt;&lt;br /&gt;Or perhaps I'm just passing along code I found on the web that I believe to be useful. I enjoy that too. I enjoy being someone that might have a corner or edge-case solution that other developers seek me out for.&lt;br /&gt;&lt;br /&gt;I enjoy pretty much anything I can do to lure developers into talking code with me and I think this is a valuable niche. So maybe I'm too biased. Either way I enjoy the pursuit, your mileage may vary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-41766525029376226?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/41766525029376226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/fallacy-of-reuse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/41766525029376226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/41766525029376226'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/fallacy-of-reuse.html' title='The Fallacy of ReUse'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-6600707928953213241</id><published>2010-01-07T16:33:00.000-05:00</published><updated>2010-01-07T16:33:22.565-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reuse'/><title type='text'>The Most reusable code in my libraries</title><content type='html'>&lt;ul&gt;&lt;li&gt;First and foremost I think is the &lt;a href="http://imaginarydevelopment.blogspot.com/2009/10/compile-time-safe-databinding.html"&gt;Member class&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;No more binding using brittle string literals.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Compile time member access name safety.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;BDictionary&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Allows for reference of a an item by key or by the index&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;String Transformations&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Can take comma separated values,CR/LF, excel copied, SSMS results column copied&amp;nbsp; and transform them into&lt;/li&gt;&lt;ul&gt;&lt;li&gt;a SQL in clause&lt;/li&gt;&lt;li&gt;an array initializer&lt;/li&gt;&lt;li&gt;a string array initializer&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;bThread(of T)&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Threading implementation with strongly typed result value&lt;/li&gt;&lt;li&gt;Wraps processing in try/catch so the thread doesn't throw an exception&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;bMacros - originally named bVbMacros but the snippet section does C# now&lt;/li&gt;&lt;ul&gt;&lt;li&gt;takes a partially formatted string and creates a code snippet for use in Visual Studio&lt;/li&gt;&lt;li&gt;Takes a VB object constructor and automatically generates backing fields and public readonly properties to expose those values&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;DebuggerWriter:System.IO.TextWriter&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Wrapper to allow you to stream output to the Debugger&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;XmlFont&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Makes serializing a System.Drawing.Font simple&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Windows Forms specific:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kasperbirch.wordpress.com/2007/12/12/redirecting-datacontextlog-to-textbox/"&gt;TextBoxWriter&lt;/a&gt;:System.IO.TextWriter&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Wrapper to allow you to stream output to a WinForms Textbox&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Control Extensions&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Extension methods for thread safe operations on the UI&lt;/li&gt;&lt;li&gt;Extension methods for nullable value binding&lt;/li&gt;&lt;li&gt;An extension for populating a comboBox with an enum Type's values&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;ErrorProviderManager&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Wrapper for the ErrorProvider class &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Centralized repository that takes a control, a Func&lt;bool&gt; delegate and the associated error message.&lt;/bool&gt;&lt;/li&gt;&lt;li&gt;hooks into the control's validating event to run all the Func&lt;bool&gt; associated error conditions, if it fails validation, the ErrorProvider is updated accordingly, and vice versa&lt;/bool&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;That's a fairly small amount of really reusable code. To me, whether or not the reusable code I wrote gets reused much is important, but so is what I learned from aiming for framework-worthy code and learning from the failures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-6600707928953213241?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/6600707928953213241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/most-reusable-code-in-my-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6600707928953213241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6600707928953213241'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/most-reusable-code-in-my-libraries.html' title='The Most reusable code in my libraries'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-4398268018444406079</id><published>2010-01-06T12:05:00.000-05:00</published><updated>2010-01-06T12:05:11.700-05:00</updated><title type='text'>Good reading</title><content type='html'>&lt;ul&gt;&lt;li&gt;Tech Republic's&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.techrepublic.com.com/programming-and-development/?p=2065&amp;amp;tag=rightCol;topRated"&gt;&lt;i&gt;Programming and Development: Best of 2009&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;10 tips to go from a beginner to an intermediate developer &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;/strong&gt;Strategies for learning programming languages - what works and what doesn’t&lt;/li&gt;&lt;li&gt;Frustrated by a coworker’s use of old-school programming techniques&lt;/li&gt;&lt;li&gt;The current state and future of C++&lt;/li&gt;&lt;li&gt;Why did you try programming?&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://blogs.techrepublic.com.com/programming-and-development/?p=2119"&gt;Development trends to watch in 2010&lt;/a&gt; &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Oleg Synch's - &lt;a href="http://www.olegsych.com/2007/12/text-template-transformation-toolkit/"&gt;&lt;span&gt;T4: Text Template Transformation Toolkit&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;A complete overview and 10 incremental tutorials&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span&gt;&lt;/span&gt;&lt;a href="http://stackoverflow.com/"&gt;Stackoverflow.com&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/users/57883?tab=favorites#sort-top"&gt;My favorite posts&lt;/a&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/58640/great-programming-quotes-closed"&gt;Hidden Features of C#?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/58640/great-programming-quotes-closed"&gt;Great programming quotes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Jeff Atwood's&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/archives/001313.html"&gt;Version 1 Sucks, But Ship It Anyway&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Visual studio 2010 - &lt;a href="http://blogs.msdn.com/bclteam/archive/2008/11/11/introduction-to-code-contracts-melitta-andersen.aspx"&gt;Introduction to Code Contracts [Melitta Andersen]&amp;nbsp;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://stackoverflow.com/questions/9033/hidden-features-of-c"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-4398268018444406079?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/4398268018444406079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/good-reading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4398268018444406079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4398268018444406079'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/good-reading.html' title='Good reading'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-1994366520736590406</id><published>2010-01-06T10:13:00.000-05:00</published><updated>2010-01-06T10:13:00.274-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='webapp'/><title type='text'>Another web app based IDE</title><content type='html'>&lt;a href="http://www.ideone.com/"&gt;http://www.ideone.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It runs code as somewhat like a console app and doesn't appear to allow command line style arguments.&lt;br /&gt;Input can be fed in via Console.ReadLine, etc...&lt;br /&gt;&lt;br /&gt;A sample including input is here where I reflect on the current or calling method name:&lt;br /&gt;&lt;a href="http://www.ideone.com/NLQgVKfl"&gt;Sample reflection&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It supports C#, Vb,&amp;nbsp; 3 different types of Javascript, Ruby, Python, Perl, Lua, and many more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-1994366520736590406?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/1994366520736590406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/another-web-app-based-ide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/1994366520736590406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/1994366520736590406'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/another-web-app-based-ide.html' title='Another web app based IDE'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-4206474078493967911</id><published>2010-01-06T09:59:00.000-05:00</published><updated>2010-01-06T09:59:19.624-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unitTesting'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Unit testing reference</title><content type='html'>The parts of unit testing I'm trying to commit to memory but keep referring back to are as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Good unit test properties&lt;/li&gt;&lt;ul&gt;&lt;li&gt;automated and repeatable&lt;/li&gt;&lt;li&gt;easy to implement&lt;/li&gt;&lt;li&gt;once written, should remain for future use&lt;/li&gt;&lt;li&gt;anyone should be able to run it&lt;/li&gt;&lt;li&gt;should run at the push of a button&lt;/li&gt;&lt;li&gt;should run quickly&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Is it a good unit test?&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Can I run and get results from a unit test written weeks,months, years ago?&lt;/li&gt;&lt;li&gt;Can any member of the team run and get results from unit tests written weeks,months, years ago?&lt;/li&gt;&lt;li&gt;Can I run all the unit tests I've written in no more than a few minutes?&lt;/li&gt;&lt;li&gt;Can I run all the unit tests at the push of a button?&lt;/li&gt;&lt;li&gt;Can I write a basic unit test in no more than a few minutes?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;TDD overview:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Write a failing test to prove code or functionality is missing&lt;/li&gt;&lt;li&gt;Make the test pass by writing production code that meets the expectations of the test&lt;/li&gt;&lt;li&gt;Refactor your code&lt;/li&gt;&lt;li&gt;&lt;i&gt;[blogger's note: I would run the tests again after the refactoring]&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Definitions&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Integration test&lt;/li&gt;&lt;ul&gt;&lt;li&gt;testing two or more dependent software modules as a group&lt;/li&gt;&lt;li&gt;If the method you are testing has external dependencies (filesystem, sql server, OS, etc..) that you are not able to provide fakes for then it is an integration test&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Unit test&lt;/li&gt;&lt;ul&gt;&lt;li&gt;a piece of code (usually a method) that runs another piece of code (usually a single method/function in isolation) and checks the correctness of some assumptions afterward. If the assumptions are wrong, the unit test is failed.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;SUT - system under test (sometimes CUT - class under test)&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;when we test something, we refer to the thing we are testing as the SUT.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Regression&lt;/li&gt;&lt;ul&gt;&lt;li&gt;a feature that used to work and now doesn't&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Naming conventions&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Project&lt;/li&gt;&lt;ul&gt;&lt;li&gt;[ProjectUnderTest].Tests&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Classes&lt;/li&gt;&lt;ul&gt;&lt;li&gt;For each class, create at least one class with the name [ClassName]Tests&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Method&lt;/li&gt;&lt;ul&gt;&lt;li&gt;For each method, create at least one test method with the following name:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;[MethodName]_[StateUnderTest]_[ExpectedBehavior]&lt;/li&gt;&lt;ul&gt;&lt;li&gt;StateUnderTest&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The conditions used to produce the behavior&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;ExpectedBehavior&lt;/li&gt;&lt;ul&gt;&lt;li&gt;What you expect the tested method to do under the specified conditions&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;example: IsValidFileName_validFile_ReturnsTrue&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Typical test method body&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Arrange objects, creating and setting them up as necessary&lt;/li&gt;&lt;li&gt;Act on an object&lt;/li&gt;&lt;li&gt;Assert the expected results&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Types of unit tests&lt;/li&gt;&lt;ul&gt;&lt;li&gt;State based testing/state verification&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;you act on something, assert the state after acting on that something or its collaborators(dependencies)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Interaction testing&lt;/li&gt;&lt;ul&gt;&lt;li&gt;tests how an object sends input to or recieves input from other objects&lt;/li&gt;&lt;li&gt;how that object interacts with other objects&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Stub&lt;/li&gt;&lt;ul&gt;&lt;li&gt;a controllable replacement for an existing dependency(or collaborator) in the system.&lt;/li&gt;&lt;li&gt;By using a stub, you can test your code without dealing with the dependency directly.&lt;/li&gt;&lt;li&gt;Can not fail a test - not asserted against&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Mock&lt;/li&gt;&lt;ul&gt;&lt;li&gt;a fake object in the system that decides whether the unit test has passed or failed. It does so by verifying whether the object under test interacted as expected with the fake object. There's usually no more than one mock per test.&lt;/li&gt;&lt;li&gt;Asserted against &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Fake&lt;/li&gt;&lt;ul&gt;&lt;li&gt;generic term for mock or stub&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Things to look out for&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Why are we doing multiple asserts in a single test? How hard would it be to separate them into separate tests&lt;/li&gt;&lt;li&gt;Complicated hand-written stubs or mocks should be overcome with a Isolation (Mock) framework&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-4206474078493967911?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/4206474078493967911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/unit-testing-reference.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4206474078493967911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4206474078493967911'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/unit-testing-reference.html' title='Unit testing reference'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-8703766086250202211</id><published>2010-01-05T17:11:00.001-05:00</published><updated>2010-01-06T09:59:43.193-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='unitTesting'/><title type='text'>My first go at Unit Testing</title><content type='html'>I've picked up "The Art of Unit Testing&amp;nbsp; with examples in .net" and I'm almost halfway done reading it. It has provided a very good walkthrough of unit testing and based on what I understand from straight reading, I've implemented some tests using Visual Studio 2008 professional's built in test functionality and RhinoMocks.&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt; IsValidCopyDictionary_IncludingIdentifier_EqualsReflectionCount()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; source = Rhino.Mocks.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;&lt;span style="color: black;"&gt;.GenerateStub&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IAmAnAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; destination=Rhino.Mocks.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;&lt;span style="color: black;"&gt;.GenerateStub&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IAmAnAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; dictionary = &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ModelAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;.ActionDictionary(destination, source, &lt;/span&gt;&lt;span style="color: blue;"&gt;true&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; modelProperties=&lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ModelAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;).GetProperties();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.AreEqual(dictionary.Count, modelProperties.Count(), &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"CopyDictionary:include is invalid"&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt; IsValidCopyDictionary_ExcludingIdentifier_EqualsReflectionCount()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; source = Rhino.Mocks.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;&lt;span style="color: black;"&gt;.GenerateStub&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IAmAnAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; destination = Rhino.Mocks.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;&lt;span style="color: black;"&gt;.GenerateStub&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IAmAnAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; dictionary = &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ModelAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;.ActionDictionary(destination, source, &lt;/span&gt;&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; modelProperties = &lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ModelAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;).GetProperties();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.AreEqual(dictionary.Count, modelProperties.Count()-1,&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"CopyDictionary:exclude is invalid"&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; font-family: Monospace; font-size: 10pt;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&lt;span style="color: black;"&gt; IsValidCopyDictionary_FullCopy_EqualsReflectionCopy()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; source = Rhino.Mocks.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;&lt;span style="color: black;"&gt;.GenerateStub&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IAmAnAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.AssessmentIdentifier = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.AssociateSeverity = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"1"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.ShareholderSeverity = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"3"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.CustomerSeverity = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"9"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.DefectCode = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"ABC"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.InvestorRequirementsIds = &lt;/span&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;() {1, 2, 3};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.Nbk = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"NBK1234"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.RegulatorySeverity = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"9"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.RootCauseIdentifier = 4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;source.ShareholderSeverity = &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"1"&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; destination = Rhino.Mocks.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;&lt;span style="color: black;"&gt;.GenerateStub&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IAmAnAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; dictionary = &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ModelAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;.ActionDictionary(destination, source, &lt;/span&gt;&lt;span style="color: blue;"&gt;true&lt;/span&gt;&lt;span style="color: black;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; modelProperties = &lt;/span&gt;&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IAmAnAssessment&lt;/span&gt;&lt;span style="color: black;"&gt;).GetProperties();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt;&lt;span style="color: black;"&gt; (&lt;/span&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt;&lt;span style="color: black;"&gt; info &lt;/span&gt;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&lt;span style="color: black;"&gt; modelProperties)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dictionary[info.Name].Invoke();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.IsNotNull(info.GetValue(destination,&lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt;),&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"Property value is null:"&lt;/span&gt;&lt;span style="color: black;"&gt;+info.Name);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&lt;span style="color: black;"&gt; (info.PropertyType.IsValueType == &lt;/span&gt;&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.AreSame(info.GetValue(destination, &lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt;), info.GetValue(source, &lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"Reference type did not copy reference:"&lt;/span&gt;&lt;span style="color: black;"&gt; + info.Name);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&lt;span style="color: black;"&gt;(info.GetIndexParameters().Length==0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.AreEqual(info.GetValue(source, &lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt;), info.GetValue(destination, &lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt;), &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"PropertyValue is not equal:"&lt;/span&gt;&lt;span style="color: black;"&gt;+info.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="color: black;"&gt;.AreSame(info.GetValue(destination,&lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt;),info.GetValue(source,&lt;/span&gt;&lt;span style="color: blue;"&gt;null&lt;/span&gt;&lt;span style="color: black;"&gt;),&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"indexed property is not the same:"&lt;/span&gt;&lt;span style="color: black;"&gt;+info.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-8703766086250202211?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/8703766086250202211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/my-first-go-at-unit-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8703766086250202211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/8703766086250202211'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2010/01/my-first-go-at-unit-testing.html' title='My first go at Unit Testing'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-6320444143157872366</id><published>2009-12-01T08:19:00.002-05:00</published><updated>2009-12-16T13:30:39.927-05:00</updated><title type='text'>A C# IDE that runs in your browser?</title><content type='html'>I'm not sure how well done it is as I just found it and haven't played with it. But it does C#, Asp.net, Asp.net MVC, php, javascript, jQuery, and jQueryUI. all in a browser. Sounds amazing. Hopefully it's fleshed out and mature enough to function.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.coderun.com/ide/"&gt;Coderun.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-6320444143157872366?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/6320444143157872366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2009/12/c-ide-that-runs-in-your-browser.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6320444143157872366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/6320444143157872366'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2009/12/c-ide-that-runs-in-your-browser.html' title='A C# IDE that runs in your browser?'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-4546416890287063061</id><published>2009-11-04T14:04:00.001-05:00</published><updated>2009-11-04T14:05:13.327-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WindowsXP'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Configuring IIS on XP to use Asp.net 3.5, and MVC</title><content type='html'>Installing IIS (may require the XP cd or XP installer files to be available):&lt;br /&gt;&lt;br /&gt;First Control Panel -&amp;gt; Add/Remove programs -&amp;gt; Add/Remove Windows Components&lt;br /&gt;Select Internet Information Services (IIS), click Details. - &lt;a href="http://www.petri.co.il/install_iis_on_windows_xp.htm"&gt;Instructional site with screenshots&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Out of the box Asp.net appears configured for .net 2.0 (at least it was on my machine where .net 2.0,3.5, and 4.0 were installed). So anything higher may not function. If your .net stuff isn't working try this next fix:&lt;br /&gt;&lt;br /&gt;So to get it to run on my machine at work and at home I had to do the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&amp;gt;aspnet_regiis.exe -ua&lt;/li&gt;&lt;li&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&amp;gt;aspnet_regiis.exe -I&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.blogger.com/%20%20%20%20*%20C:%5CWINDOWS%5CMicrosoft.NET%5CFramework%5Cv2.0.50727%3Easpnet_regiis.exe%20-U%20%20%20%20%20*%20C:%5CWINDOWS%5CMicrosoft.NET%5CFramework%5Cv2.0.50727%3Easpnet_regiis.exe%20-I"&gt;Here&lt;/a&gt;'s a complete rundown on that part of the solution&lt;br /&gt;&lt;br /&gt;Also in some cases your application folder may not be set up as an application:&lt;br /&gt;&lt;br /&gt;control panel -&amp;gt;Administrative Tool-&amp;gt; Internet Information Services&lt;br /&gt;&lt;br /&gt;select your application folder and on the directory or virtual directory tab in the Application Settings section, Application name would be greyed out, and a button on the right will say Create. Click this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally to get MVC to function properly (this is a security risk in some respects I hear, but should be fine for private personal network testing:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;It's safer to do this to the specific MVC directory, but you can do it for the entire website&lt;br /&gt;&lt;br /&gt;control panel -&amp;gt;Administrative Tool-&amp;gt; Internet Information Services&lt;br /&gt;&lt;br /&gt;select your application folder ( Entire website if you prefer, which is less secure) , right click and go to properties. On the directory or virtual directory folder click Configuration.&lt;br /&gt;&lt;br /&gt;Click Add. Click Browse on the new dialog that opened. Change the drop down type to dll files. Navigate to C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll and click open. then in the extension section type .*&lt;br /&gt;&lt;br /&gt;I had to click in the Executable path textbox to have it expand the path into the textbox. &lt;br /&gt;&lt;br /&gt;Take OFF the checkmark for Check that file exists.&lt;br /&gt;&lt;br /&gt;Click ok on this dialog, and the remaining 2 that are open. - &lt;a href="http://blogs.microsoft.co.il/blogs/dorony/archive/2007/12/15/using-asp-net-mvc-on-iis-5.aspx"&gt;Source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7386105208394107344-4546416890287063061?l=imaginarydevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://imaginarydevelopment.blogspot.com/feeds/4546416890287063061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://imaginarydevelopment.blogspot.com/2009/11/configuring-iis-on-xp-to-use-aspnet-35.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4546416890287063061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7386105208394107344/posts/default/4546416890287063061'/><link rel='alternate' type='text/html' href='http://imaginarydevelopment.blogspot.com/2009/11/configuring-iis-on-xp-to-use-aspnet-35.html' title='Configuring IIS on XP to use Asp.net 3.5, and MVC'/><author><name>ImaginaryDevelopment</name><uri>http://www.blogger.com/profile/09089938342974440835</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_OMr6DugwysY/S_P79gR2YKI/AAAAAAAAAxE/D8URb8mpdjQ/s1600-R/9f4a12b955cb61fcf67b031040f7da51.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7386105208394107344.post-2885337270461182800</id><published>2009-10-30T09:49:00.003-04:00</published><updated>2009-10-30T10:07:03.231-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><category scheme='http://www.blogger.com/atom/ns#' term='teamEmail'/><title type='text'>Just how frequently is 'refactor frequently'?</title><content type='html'>&lt;style&gt;&lt;!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;}@font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman";}a:link, span.MsoHyperlink {mso-style-noshow:yes; mso-style-priority:99; color:blue; text-decoration:underline; text-underline:single;}a:visited, span.MsoHyperlinkFollowed {mso-style-noshow:yes; mso-style-priority:99; color:purple; mso-themecolor:followedhyperlink; text-dec
