<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8749672</atom:id><lastBuildDate>Mon, 29 Jun 2009 20:50:15 +0000</lastBuildDate><title>C# and Everything .Net</title><description>It always works, when you know what you're doing</description><link>http://www.thinkfarahead.com/</link><managingEditor>noreply@blogger.com (Vyas Bharghava)</managingEditor><generator>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/thinkfarahead" type="application/rss+xml" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3826713183630948734</guid><pubDate>Fri, 07 Nov 2008 01:13:00 +0000</pubDate><atom:updated>2008-11-28T06:43:09.483+05:30</atom:updated><title>Be wary of them the 3rd Party Components</title><description>&lt;p&gt;I've been burned once and seen other projects burn because of wrong choice of 3rd party components. &lt;/p&gt;  &lt;p&gt;My project - that was shot to hell - had to depend on a 3rd party component [Let's call it WiseImport ;)] from reading data from a competing product [MarketLeader]. We were doing an import wizard and Legal warned us not to use any of the SDKs exposed by the competitor [Legal moves in mysterious ways especially when the competitor offers the same kind of tool as an add-in]. But it was somehow okay to use the third party component. &lt;/p&gt;  &lt;p&gt;The version 1.0 of the wizard used WiseImport successfully and in his infinite wisdom our Architect mandated us to go with the same product. Now, we required master-detail information from the MarketLeader. Alas, late in the game we found that the master &amp;amp; detail information are available separately but there was no way to link them to each other. The creator of WiseImport was a 2-person company that was successfully bullied into [I guess nothing motivates people like a threat of multi-million dollar law suit] looking at the problem at a war footing. &lt;/p&gt;  &lt;p&gt;Well, let's just say he was near tears when he wrung his hands and said this was a bug in the MarketLeader product and he would only be able to provide a fix when the MarketLeader fixes its SDK. [And, of course, he was sorry as hell and was willing to refund the license fees ... I'm sure minuscule in comparison with &amp;quot;multi-million dollars&amp;quot;] &lt;/p&gt;  &lt;p&gt;Oh, yes, the rest is history [along with the project that is]. &lt;/p&gt;  &lt;p&gt;In another instance, where I was called in as outside expert to look at the performance issues, I found, to my dismay the control used does not care about its ViewState size. I thought that these guys should be held criminally responsible for such a shoddy code. I'm no lawyer [probably explains why I don't make much money], so as a compromise, I had to hold the team responsible for their gross negligence. In the end, I thought I'll frame some guidelines - or at least warn people of the careless use of 3rd party components. &lt;/p&gt;  &lt;li&gt;Evaluate the component per your current and future needs&lt;/li&gt;  &lt;li&gt;Make sure it is functionally fit for your requirements&lt;/li&gt;  &lt;li&gt;Gather metrics - if you're using a ASP.Net Server Control use Fiddler2 / WDH that support #2&lt;/li&gt;  &lt;li&gt;Don't be influenced by what is being used currently&lt;/li&gt;  &lt;li&gt;Don't go by popularity of the component or just because you've used it in your previous project&lt;/li&gt;  &lt;li&gt;Make sure you can get support when required [not everyone have the threat of a multi-million dollar law suit in their arsenal]&lt;/li&gt;  &lt;li&gt;Can they roll a custom build to fix your issue?&lt;/li&gt;  &lt;li&gt;What is your backup plan if the component have to be replaced?&lt;/li&gt;  &lt;li&gt;Have you identified a suitable alternative?&lt;/li&gt;  &lt;li&gt;Is your design isolates the 3rd party component so you can plug &amp;amp; play? &lt;/li&gt;  &lt;p&gt;I'm sure all the above may appear overkill. Let me assure you, they're not. You'll probably thank god [and your stars] for the sense you had to do the above. Or when the project fails [more aptly when the s**t hits the fan], you'll at least have covered your bases.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-3826713183630948734?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/11/be-wary-of-them-3rd-party-components.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-7648378409194713522</guid><pubDate>Fri, 15 Aug 2008 10:07:00 +0000</pubDate><atom:updated>2008-08-15T15:37:42.656+05:30</atom:updated><title>Addicted to my 24" Monitor</title><description>&lt;p&gt;Guess I am getting a bit too addicted to the extra real estate.&amp;#160; The code in my blog looks awful on smaller monitor/window.&amp;#160; Will have to go back and reformat I guess when I have time.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-7648378409194713522?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/08/addicted-to-my-24-monitor.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3100442313076027314</guid><pubDate>Fri, 15 Aug 2008 09:56:00 +0000</pubDate><atom:updated>2008-08-15T15:26:21.306+05:30</atom:updated><title>[Rhino] Mock Anomalies: SetupResult.For to Lambda - "No Dice"</title><description>&lt;p&gt;I had probably jumped to some conclusions with my earlier post.&amp;#160; While it's true GenerateStub&amp;lt;T&amp;gt;() refuses to accomodate SetupResult, the below testcase passes:&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;   &lt;pre style="margin: 0px"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; GenerateStubAndSetupResult()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//With GenerateStub() alone, SetupResult fails with&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//IDemo stub = (IDemo)MockRepository.GenerateStub&amp;lt;IDemo&amp;gt;();&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt; stub = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MockRepository&lt;/span&gt;().Stub&amp;lt;&lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;int&lt;/span&gt; j = 0;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;SetupResult&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .For&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(stub.ReturnStringNoArgs())&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Do((&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;)(() =&amp;gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; (++j).ToString(); }));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;SetupResult&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .For&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(stub.ReturnStringWithInt32Arg(300)).IgnoreArguments()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Do((&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;)((arg) =&amp;gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;000{0}&amp;quot;&lt;/span&gt;, arg); }));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; stub.Replay();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;, stub.ReturnStringNoArgs());&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;, stub.ReturnStringNoArgs());&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000400&amp;quot;&lt;/span&gt;, stub.ReturnStringWithInt32Arg(400));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000500&amp;quot;&lt;/span&gt;, stub.ReturnStringWithInt32Arg(500));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;} &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Let's take our previous code and rewrite it, using the lesson above:&lt;/p&gt;

&lt;p&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&lt;/p&gt;

&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;
  &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; TestSetupStubOnceCallMultipleTimes2()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//IDemo partialStub = MockRepository.GenerateStub&amp;lt;IDemo&amp;gt;();&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt; partialStub = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MockRepository&lt;/span&gt;().Stub&amp;lt;&lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//This line does not work unless I have called the above .Stub&amp;lt;IDemo&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//partialStub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160; .Stub&amp;lt;IDemo, string&amp;gt;((x) =&amp;gt; { return x.ReturnStringWithInt32Arg(30); })&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160; .IgnoreArguments()&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160; .Do(&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (Func&amp;lt;int, string&amp;gt;)((arg) =&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return string.Format(&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;{0}{1}&amp;quot;,&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new string('0', 6 - arg.ToString().Length), arg);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; })&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160; );&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//If I comment the above line out, it gives me this error on SetupResult below&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//Test method ThinkFarAhead.LearningMocking.Expectations.SetupResult2.TestRhinoAndMoq.Working threw exception:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//System.InvalidOperationException: Invalid call, the last call has been used or &lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//no call has been made (make sure that you are calling a virtual (C#) / Overridable (VB) method)..&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//This error occurs both when I create the Stub using MockRepository.GenerateStub&amp;lt;IDemo&amp;gt;() or new MockRepository().Stub&amp;lt;IDemo&amp;gt;()&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//SetupResult.For((Action&amp;lt;IDemo&amp;gt;)(x =&amp;gt; x.ReturnStringWithInt32Arg(30))).IgnoreArguments()&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160; .Do((Func&amp;lt;int, string&amp;gt;)((arg) =&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160; {&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return string.Format(&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;{0}{1}&amp;quot;,&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new string('0', 6 - arg.ToString().Length), arg);&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160; }&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&amp;#160;&amp;#160;&amp;#160; ));&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;SetupResult&lt;/span&gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .For(partialStub.ReturnStringWithInt32Arg(20))&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .IgnoreArguments()&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Do((&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;)((arg) =&amp;gt;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;&amp;quot;{0}{1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;(&lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;, 6 - arg.ToString().Length), arg);&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; partialStub.Replay();&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000020&amp;quot;&lt;/span&gt;, partialStub.ReturnStringWithInt32Arg(20));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000030&amp;quot;&lt;/span&gt;, partialStub.ReturnStringWithInt32Arg(30));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000040&amp;quot;&lt;/span&gt;, partialStub.ReturnStringWithInt32Arg(40));&lt;/pre&gt;

  &lt;pre style="margin: 0px"&gt;}&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/8749672-3100442313076027314?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/08/rhino-mock-anomalies-setupresultfor-to.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-1089952796653731019</guid><pubDate>Fri, 15 Aug 2008 08:43:00 +0000</pubDate><atom:updated>2008-08-15T14:15:54.091+05:30</atom:updated><title>[Rhino] Mock Anomalies:  Setup Stub Once Call Multiple Times - Must Call .Stub&lt;T&gt; and SetupResult</title><description>&lt;p&gt;I was hooking up multiple times because otherwise it was giving me grief.&amp;#160; Here's the test that seems to work the way I intended (for setting up a stub method once and call it multiple times.&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;   &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;     &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;       &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt;         &lt;pre style="margin: 0px"&gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; TestSetupStubOnceCallMultipleTimes()&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//IDemo partialStub = MockRepository.GenerateStub&amp;lt;IDemo&amp;gt;();&lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt; partialStub = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MockRepository&lt;/span&gt;().Stub&amp;lt;&lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//This line does not work unless I have called the above .Stub&amp;lt;IDemo&amp;gt;&lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; partialStub&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Stub&amp;lt;&lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;((x) =&amp;gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; x.ReturnStringWithInt32Arg(30); })&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .IgnoreArguments()&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Do(&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;)((arg) =&amp;gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;&amp;quot;{0}{1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;(&lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;, 6 - arg.ToString().Length), arg);&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; })&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//If I comment the above line out, it gives me this error on SetupResult below&lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//Test method ThinkFarAhead.LearningMocking.Expectations.SetupResult2.TestRhinoAndMoq.Working threw exception:&lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//System.InvalidOperationException: Invalid call, the last call has been used or &lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//no call has been made (make sure that you are calling a virtual (C#) / Overridable (VB) method)..&lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//This error occurs both when I create the Stub using &lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&lt;span style="color: green"&gt;    //MockRepository.GenerateStub&amp;lt;IDemo&amp;gt;() or &lt;/span&gt;&lt;span style="color: green"&gt;new MockRepository().Stub&amp;lt;IDemo&amp;gt;()&lt;/span&gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;SetupResult&lt;/span&gt;.For((&lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;IDemo&lt;/span&gt;&amp;gt;)(x =&amp;gt; x.ReturnStringWithInt32Arg(30))).IgnoreArguments()&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; .Do((&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;)((arg) =&amp;gt;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #a31515"&gt;&amp;quot;{0}{1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;(&lt;span style="color: #a31515"&gt;'0'&lt;/span&gt;, 6 - arg.ToString().Length), arg);&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ));&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; partialStub.Replay();&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000020&amp;quot;&lt;/span&gt;, partialStub.ReturnStringWithInt32Arg(20));&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000030&amp;quot;&lt;/span&gt;, partialStub.ReturnStringWithInt32Arg(30));&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: #a31515"&gt;&amp;quot;000040&amp;quot;&lt;/span&gt;, partialStub.ReturnStringWithInt32Arg(40));&lt;/pre&gt;

        &lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;
      &lt;/div&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/8749672-1089952796653731019?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/08/rhino-mock-anomalies-setup-stub-once.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-5157179663095508397</guid><pubDate>Thu, 14 Aug 2008 07:52:00 +0000</pubDate><atom:updated>2008-08-15T04:44:50.840+05:30</atom:updated><title>Mocking Anomalies: Can't Override Non-Virtual Methods (Ans: Partial Stubs?)</title><description>&lt;p&gt;The problem I am facing currently is that I and my team are working simultaneously on interdependent pieces of the system under development.   My piece was depending on a piece of my colleague's and one of his methods was throwing a "NotImplementedException". &lt;/p&gt;&lt;p&gt;Wanted to mock just that method so I could proceed with testing my work. &lt;/p&gt;&lt;p&gt;Here's how the code looks in Rhino: &lt;/p&gt;
&lt;div style="font-family: Consolas, Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; Microsoft.VisualStudio.TestTools.UnitTesting;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; Rhino.Mocks;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; ThinkFarAhead.LearningMocking&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestClass&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;TestRhinoAndMoq&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; TestPartialMock()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt; partialMock = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;().PartialMock&amp;lt;&lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; partialMock&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Stub&amp;lt;&lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(x =&amp;gt; x.ReturnStringNoArgs())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Do((&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;)&lt;span style="color: blue;"&gt;delegate&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"somevalidstring"&lt;/span&gt;; });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; partialMock.Replay();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(partialMock.ReturnStringNoArgs(), &lt;span style="color: #a31515;"&gt;"somevalidstring"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; TestPartialStub()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt; partialStub = &lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;.GenerateStub&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; partialStub&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Stub&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(x =&amp;gt; x.ReturnStringNoArgs())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Do((&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;)&lt;span style="color: blue;"&gt;delegate&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"somevalidstring"&lt;/span&gt;; });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; partialStub.Replay();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(partialStub.ReturnStringNoArgs(), &lt;span style="color: #a31515;"&gt;"somevalidstring"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ReturnStringNoArgs();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ReturnStringWithInt32Arg(&lt;span style="color: blue;"&gt;int&lt;/span&gt; arg);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ReturnStringNoArgs()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;NotImplementedException&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ReturnStringWithInt32Arg(&lt;span style="color: blue;"&gt;int&lt;/span&gt; arg)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/span&gt;&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;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"{0}{1}"&lt;/span&gt;, &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;'0'&lt;/span&gt;, 6 - arg.ToString().Length), arg);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;52&lt;/span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;53&lt;/span&gt;&amp;nbsp;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you can see both the tests pass.  Let's remove 'virtual' from: &lt;/p&gt;&lt;div style="BACKGROUND: white;font-family:consolas, courier new;font-size:10pt;color:black;"   &gt;
&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   45&lt;/span&gt; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ReturnStringNoArgs()&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now, as expected, TestPartialMock fails. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Test method ThinkFarAhead.LearningMocking.TestRhinoAndMoq.TestPartialMock threw exception:  System.NotImplementedException: The method or operation is not implemented..&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Oh yeah, we've been told that it's a constraint imposed by &lt;a href="http://tiredblogger.wordpress.com/2008/05/06/moq-mocks-use-virtual-method-or-interfaces/"&gt;Castle Dynamic Proxy [actually CLR]&lt;/a&gt;.   Hey, I don't want to fight the system, all I want is to wring the functionality I need from the framework.  &lt;/p&gt;&lt;p&gt;Also, consider the below behaviour: &lt;/p&gt;&lt;div style="BACKGROUND: white;font-family:consolas, courier new;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;            System.Diagnostics.&lt;span style="color:#2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(partialMock.ReturnStringWithInt32Arg(20)); &lt;span style="color:green;"&gt;// will print "000020" &lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;            System.Diagnostics.&lt;span style="color:#2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(partialMock.ReturnStringWithInt32Arg(30)); &lt;span style="color:green;"&gt;// will print "000030" &lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;With stub, you will have to setup two different expectations: [I'm not sure I need to!  I've posted this question on the forum.  Will provide the link later]&lt;/p&gt;
&lt;div style="font-family: Consolas, Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; partialStub&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Stub&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;((&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;)&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt; x) { &lt;span style="color: blue;"&gt;return&lt;/span&gt; x.ReturnStringWithInt32Arg(20); })&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .IgnoreArguments()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Do((&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; arg)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&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; &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;&lt;pre style="margin: 0px;"&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: #a31515;"&gt;"{0}{1}"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&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;new&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;'0'&lt;/span&gt;, 6 - arg.ToString().Length), arg);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; partialStub&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Stub&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;((&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;)&lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt; x) { &lt;span style="color: blue;"&gt;return&lt;/span&gt; x.ReturnStringWithInt32Arg(30); })&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .IgnoreArguments()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Do((&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; arg)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&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; &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;&lt;pre style="margin: 0px;"&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: #a31515;"&gt;"{0}{1}"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px;"&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;new&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;'0'&lt;/span&gt;, 6 - arg.ToString().Length), arg);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; partialStub.Replay();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; System.Diagnostics.&lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(partialStub.ReturnStringWithInt32Arg(20)); &lt;span style="color: green;"&gt;// will return "000020"&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; System.Diagnostics.&lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(partialStub.ReturnStringWithInt32Arg(30)); &lt;span style="color: green;"&gt;// will return "000030" &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Even if I do not have to setup multiple times, once for each argument, if the logic is non-trivial, replicating the same logic on the Stub method would be VERY inconvenient.  Not to mention dependencies if needed.  Stub &lt;a href="http://martinfowler.com/articles/mocksArentStubs.html"&gt;per Fowler's definition&lt;/a&gt; is supposed to just return "canned" responses right?  [Aside:  This is a classic example of theory superceded by common sense.  If you're supposed to return "canned" responses, you better be prepared to anticipate each argument.  Guess that's what Fakes do.  We're trying to implement a 'Fake' by using Rhino's Stub.  Oh, well, we're getting derailed by jargon now]&lt;/p&gt;&lt;p&gt;OK, where does it all lead to?  Well, It seems we need a PartialStub [Jargon again? :)].  Hm...or is there a better way? &lt;/p&gt;&lt;p&gt;&lt;u&gt;How about this:  One that will delegate [not the C# one, the one that managers practice ;)] calls to the original object when no expectations are set.  And override them when specified.&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Let's define our "wanna be" syntax, shall we? &lt;/p&gt;&lt;p&gt;With Rhino: &lt;/p&gt;

&lt;div style="font-family: Consolas, Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; TestPartialStub()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt; demo = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt; partialStub = &lt;span style="color: #2b91af;"&gt;MockRepository&lt;/span&gt;.GenerateStub&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;&amp;gt;(demo);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; partialStub&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Stub&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(x =&amp;gt; x.ReturnStringNoArgs())&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Do((&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;)&lt;span style="color: blue;"&gt;delegate&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"somevalidstring"&lt;/span&gt;; });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; partialStub.Replay();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: green;"&gt;//Route calls to the actual object &lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(partialStub.ReturnStringWithInt32Arg(20), &lt;span style="color: #a31515;"&gt;"000020"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(partialStub.ReturnStringWithInt32Arg(30), &lt;span style="color: #a31515;"&gt;"000030"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: green;"&gt;//Call the Stub override &lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(partialStub.ReturnStringNoArgs(), &lt;span style="color: #a31515;"&gt;"somevalidstring"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;
With Moq:

&lt;div style="font-family: Consolas, Courier New; font-size: 10pt; color: black; background: white;"&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [&lt;span style="color: #2b91af;"&gt;TestMethod&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; TestPartialStubMoq()&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt; demo = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Demo&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;&amp;gt; repo = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt;&amp;gt;(demo);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;IDemo&lt;/span&gt; partialStub = repo.Object;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; repo.Expect&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(x =&amp;gt; x.ReturnStringNoArgs()).Returns(&lt;span style="color: #a31515;"&gt;"somestringbydefault"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.IsTrue(partialStub.ReturnStringWithInt32Arg(10), &lt;span style="color: #a31515;"&gt;"000010"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #2b91af;"&gt;Assert&lt;/span&gt;.IsTrue(partialStub.ReturnStringNoArgs(), &lt;span style="color: #a31515;"&gt;"somestringbydefault"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I would like to add this functionality to both Rhino &amp;amp; Moq with both Ayende and Daniell asking me to contribute.  Hope I'll get something done over the weekend.  Let me know what you think.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-5157179663095508397?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/08/mocking-anomalies-can-override-non.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-6520102757284122640</guid><pubDate>Mon, 21 Jul 2008 06:21:00 +0000</pubDate><atom:updated>2008-07-21T11:54:01.049+05:30</atom:updated><title>CAS &amp; RefusedSet of permissions</title><description>&lt;p&gt;I granted assemblies with a particular Strong Name &amp;quot;Full Trust&amp;quot; both in &amp;quot;My Computer&amp;quot; and &amp;quot;Intranet&amp;quot; zone.&amp;#160; When I run them out of VS.Net IDE they run with full set of permissions.&amp;#160; But, the moment I specify one or more permissions as &amp;quot;requisites&amp;quot; on my assembly, I get SecurityException (s) for the permissions I didn't mention on my assembly.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I used .Net Framework 2.0 Configuration Wizard to grant all assemblies (in MyComputer zone as I'm debugging in my IDE)&amp;#160; that has a particular Strong Name. &lt;/li&gt;    &lt;li&gt;Now, I go ahead and specify a single pre-requisite for the assembly:      &lt;ul&gt;       &lt;li&gt;[&lt;span style="color: blue"&gt;assembly&lt;/span&gt;: &lt;span style="color: #2b91af"&gt;SqlClientPermission&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;SecurityAction&lt;/span&gt;.RequestMinimum, Unrestricted = &lt;span style="color: blue"&gt;true&lt;/span&gt;)] &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;I run the application &lt;/li&gt;    &lt;li&gt;A tell-tale security warning appears signifying the assembly is no longer running under &amp;quot;Full Trust&amp;quot; &lt;a href="http://lh3.ggpht.com/vyas.bharghava/SIQqy87nsTI/AAAAAAAAAEE/S2p78_q4Iqw/s1600-h/CAS-1%5B11%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="132" alt="CAS-1" src="http://lh6.ggpht.com/vyas.bharghava/SIQqzfXYQRI/AAAAAAAAAEI/Rq6LH2ELVlU/CAS-1_thumb%5B9%5D.jpg?imgmax=800" width="550" border="0" /&gt;&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;Warning: Indicates assembly is no longer running under &amp;quot;Full Trust&amp;quot;&lt;/strong&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;I specify UI permissions now:      &lt;ul&gt;       &lt;li&gt;[&lt;span style="color: blue"&gt;assembly&lt;/span&gt;: &lt;span style="color: #2b91af"&gt;UIPermission&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;SecurityAction&lt;/span&gt;.RequestMinimum, Unrestricted=&lt;span style="color: blue"&gt;true&lt;/span&gt;)&lt;/li&gt;     &lt;/ul&gt;      &lt;p&gt;&lt;a href="http://lh3.ggpht.com/vyas.bharghava/SIQqzlTcGlI/AAAAAAAAAEM/0Wq75XEPah0/s1600-h/CAS-2%5B8%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="127" alt="CAS-2" src="http://lh4.ggpht.com/vyas.bharghava/SIQqzsLpyeI/AAAAAAAAAEQ/mQRaujtw0U8/CAS-2_thumb%5B6%5D.jpg?imgmax=800" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;Fig 2: UIPermission granted.&amp;#160; No warning messages&lt;/strong&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The warning disappears &lt;/li&gt;    &lt;li&gt;As soon as I move to the next step in the wizard [where it requires a ConfigurationPermission], it throws a SecurityException &lt;a href="http://lh5.ggpht.com/vyas.bharghava/SIQqzzQJtFI/AAAAAAAAAD0/AI6lYgsoOEA/s1600-h/CAS-3%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="217" alt="CAS-3" src="http://lh6.ggpht.com/vyas.bharghava/SIQq0E4h7kI/AAAAAAAAAD4/xNUTRhqwd4M/CAS-3_thumb%5B1%5D.jpg?imgmax=800" width="559" border="0" /&gt;&lt;/a&gt;       &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;Fig 3: Exception due to ConfigurationPermission denied&lt;/strong&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;But when I remove all CAS permission request declarations, the code appears to run with &amp;quot;Full Trust&amp;quot; &lt;/li&gt; &lt;/ol&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/vyas.bharghava/SIQq0T53wAI/AAAAAAAAAD8/Gd0ShroQBmc/s1600-h/CAS-4%5B4%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="286" alt="CAS-4" src="http://lh3.ggpht.com/vyas.bharghava/SIQq0rHwXCI/AAAAAAAAAEA/vJmhxgKO7N0/CAS-4_thumb%5B2%5D.jpg?imgmax=800" width="322" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ol&gt;   &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;Fig 4: All access granted [including ConfigurationPermission] &lt;/strong&gt;&amp;#160; &lt;/li&gt;   &lt;/ul&gt; &lt;/ol&gt;  &lt;p&gt;This leads me to wonder if the permissions I do not specify on the assembly become part of the permissions refused!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-6520102757284122640?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/cas-refusedset-of-permissions.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-7152371088317432663</guid><pubDate>Thu, 17 Jul 2008 03:24:00 +0000</pubDate><atom:updated>2008-07-17T08:54:11.484+05:30</atom:updated><title>Castle Windsor RC3 Woes Continued...</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now, I'm asking WindsorContainer to pickup from the default configuration file as it supposed to:&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 45&lt;/span&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: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IDbCreator&lt;/span&gt; GetDBCreator()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;WindsorContainer&lt;/span&gt; container = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WindsorContainer&lt;/span&gt;(); &lt;span style="color: green"&gt;//WindsorConfigFile);&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;IDbCreator&lt;/span&gt; creator = container.Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;IDbCreator&lt;/span&gt;&amp;gt;(&lt;span style="color: #2b91af"&gt;UserPreferences&lt;/span&gt;.Instance.LocalDataStoreChosen);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; creator;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;With this result:&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;a href="http://lh6.ggpht.com/vyas.bharghava/SH67WQDCY8I/AAAAAAAAADc/P5inSqISGS0/s1600-h/CastleWindsor-2%5B14%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="438" alt="CastleWindsor-2" src="http://lh5.ggpht.com/vyas.bharghava/SH67WgrIpLI/AAAAAAAAADg/B1-ZP6IU5eY/CastleWindsor-2_thumb%5B12%5D.jpg?imgmax=800" width="894" border="0"&gt;&lt;/a&gt; &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;Of course, AppDomain.CurrentDomain.SetupInformation.ConfigurationFile is pointing to a valid *.dll.config file and is having all keys:&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DbTypeSql&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.IDbCreator&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.SqlDbCreator, ThinkFarAhead.WordReporter.Data&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&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/8749672-7152371088317432663?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/castle-windsor-rc3-woes-continued.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3136640473630592804</guid><pubDate>Thu, 17 Jul 2008 03:09:00 +0000</pubDate><atom:updated>2008-07-17T08:39:15.638+05:30</atom:updated><title>Castle Windsor RC3 Detests MSTest?: DeserializeElement cannot process element configSections</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'm exasperated getting Castle Windsor to work with MSTest.&amp;nbsp; For once, it's not the other way around :)&amp;nbsp; Here's the partial code tries to resolve a database provider using Windsor.&amp;nbsp; The App.config in my MSTest project is copied to a TestResults folder with a *.dll.config extension [I didn't know .Net started allowing .dll.config files.&amp;nbsp; Well may not be, but that's a topic for another post!).&amp;nbsp; &lt;/p&gt; &lt;p&gt;Here's my app.config [ThinkFarAhead.WordReporter.Data.UnitTest.dll.config]:&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configSections&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;section&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;castle&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;configSections&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;castle&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;components&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DbTypeSql&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.IDbCreator&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.SqlDbCreator, ThinkFarAhead.WordReporter.Data&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DbTypeOracle&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.IDbCreator&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.OracleDbCreator, ThinkFarAhead.WordReporter.Data&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DbTypeOledb&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.IDbCreator&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.OleDbDbCreator, ThinkFarAhead.WordReporter.Data&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;DbTypeOdbc&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.IDbCreator&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;ThinkFarAhead.WordReporter.Data.OdbcDbCreator, ThinkFarAhead.WordReporter.Data&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;component&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;components&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;castle&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;Here's the code that tries to inject dependencies: 
&lt;p&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; WindsorConfigFile;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;static&lt;/span&gt; DbCreatorFactory()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WindsorConfigFile = &lt;span style="color: #2b91af"&gt;AppDomain&lt;/span&gt;.CurrentDomain.SetupInformation.ConfigurationFile; &lt;span style="color: green"&gt;//&amp;nbsp; set // "Windsor.config"; //string.Format(@"{0}\Windsor.Config", Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase));&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Removed statically typed enum [that cannot be extended at runtime]&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Here at least other clients can pass anything&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 45&lt;/span&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: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IDbCreator&lt;/span&gt; GetDBCreator()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;WindsorContainer&lt;/span&gt; container = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WindsorContainer&lt;/span&gt;(WindsorConfigFile);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;IDbCreator&lt;/span&gt; creator = container.Resolve&amp;lt;&lt;span style="color: #2b91af"&gt;IDbCreator&lt;/span&gt;&amp;gt;(&lt;span style="color: #2b91af"&gt;UserPreferences&lt;/span&gt;.Instance.LocalDataStoreChosen);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; creator;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here's my MSTest code:&lt;/p&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 69&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 70&lt;/span&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: blue"&gt;void&lt;/span&gt; CheckObjectCreation()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 71&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 72&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt;[] databaseTypes = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;[] { &lt;span style="color: #a31515"&gt;"DbTypeSql"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"DbType.Oracle"&lt;/span&gt; }; &lt;span style="color: green"&gt;//, "DbType.Oledb", "DbType.Odbc"};&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 73&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; [] dbCreators = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; [] { &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;SqlDbCreator&lt;/span&gt;), &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;OracleDbCreator&lt;/span&gt;)}; &lt;span style="color: green"&gt;//, typeof(OracleDbCreator), typeof(OleDbDbCreator)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 74&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;for&lt;/span&gt; (&lt;span style="color: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; databaseTypes.Length; i++)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 75&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 76&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;UserPreferences&lt;/span&gt;.Instance.LocalDataStoreChosen = databaseTypes[i];&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 77&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;if&lt;/span&gt;(!(&lt;span style="color: #2b91af"&gt;DbCreatorFactory&lt;/span&gt;.GetDBCreator() == dbCreators[i]))&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 78&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 79&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.Fail(&lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;"Type {0} instantiated incorrectly for key {1}"&lt;/span&gt;, dbCreators[i].ToString(), databaseTypes[i]));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 80&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 81&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 82&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;&lt;pre style="margin: 0px"&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; It fails with:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh5.ggpht.com/vyas.bharghava/SH632A_iPTI/AAAAAAAAADU/0BMG-pxhtgE/s1600-h/CastleWindsor-1%5B5%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="390" alt="CastleWindsor-1" src="http://lh3.ggpht.com/vyas.bharghava/SH632qpKwwI/AAAAAAAAADY/Hn__DNAgl_s/CastleWindsor-1_thumb%5B3%5D.jpg?imgmax=800" width="718" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6157516f-7f57-400b-9f00-fb71877c169a" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MSTest" rel="tag"&gt;MSTest&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Castle%20Windsor%20RC3" rel="tag"&gt;Castle Windsor RC3&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/8749672-3136640473630592804?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/castle-windsor-rc3-detests-mstest.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-8353590729862801378</guid><pubDate>Sun, 13 Jul 2008 06:42:00 +0000</pubDate><atom:updated>2008-07-16T07:57:29.998+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Script#</category><category domain="http://www.blogger.com/atom/ns#">ScriptSharp</category><title>Tip: ScriptSharp and $(ScriptPath)</title><description>If you're using Script# "Class Library in a Web Site" template, you need to make sure you're Script# Projects are located inside the "bin\Scripts" of the Web site. Yes, you heard me right. If you want a reusable class library or simply want to use the scripts generated on multiple Web projects on the same solution, use either "Class Library" or "Atlas Class Library".

I thought I had found a bug when I couldn't find the script files. Here's the complete analysis for the brave:

1) Select Script# "Class Library in a Web Site" template

&lt;p align="left"&gt;&lt;a href="http://bp2.blogger.com/_Zyg-fCVdfWQ/SHmlJs51gxI/AAAAAAAAABs/VC0CyBoNp3Y/s1600-h/ScriptSharp-1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5222386829003948818" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_Zyg-fCVdfWQ/SHmlJs51gxI/AAAAAAAAABs/VC0CyBoNp3Y/s400/ScriptSharp-1.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;2) Type the following it the default "Class1.cs" created


&lt;div style="BACKGROUND: white;font-family:Consolas;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    1&lt;/span&gt; &lt;span style="color:green;"&gt;// Class1.cs&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    2&lt;/span&gt; &lt;span style="color:green;"&gt;//&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    3&lt;/span&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    4&lt;/span&gt; &lt;span style="color:blue;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    5&lt;/span&gt; &lt;span style="color:blue;"&gt;using&lt;/span&gt; System.DHTML;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    6&lt;/span&gt; &lt;span style="color:blue;"&gt;using&lt;/span&gt; ScriptFX;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    7&lt;/span&gt; &lt;span style="color:blue;"&gt;using&lt;/span&gt; ScriptFX.UI;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    8&lt;/span&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;    9&lt;/span&gt; &lt;span style="color:blue;"&gt;namespace&lt;/span&gt; ThinkFarAhead.WordReporter.TestBed.ScriptsForWeb&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   10&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   11&lt;/span&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   12&lt;/span&gt;     &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Class1&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   13&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   14&lt;/span&gt;         &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Greet()&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   15&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   16&lt;/span&gt;             &lt;span style="color:#2b91af;"&gt;Script&lt;/span&gt;.Alert(&lt;span style="color:#a31515;"&gt;"Hi!"&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   17&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   18&lt;/span&gt; &lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   19&lt;/span&gt;         &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   20&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   21&lt;/span&gt;             &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Class1&lt;/span&gt;().Greet();&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   22&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   23&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   24&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;
3) Compile and search for the *.js files created. Hey, at least I was searching for it forever!

Here's my line of thinking went: If Script# is using MSBuild, the code for calling ssc.exe should be in the project.

&lt;div style="BACKGROUND: white;font-family:Consolas;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   49&lt;/span&gt; &lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Import&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Project&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(ProgramFiles)\nStuff\ScriptSharp\v1.0\nStuff.ScriptSharp.targets&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
Well, it does import some MSBuild targets. Let's see what is it:

&lt;div style="BACKGROUND: white;font-family:Consolas;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   32&lt;/span&gt; &lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ScriptCompilerTask&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   33&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;Sources&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;@(Compile)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   34&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;Resources&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;@(EmbeddedResource)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   35&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;References&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;@(ReferencePath)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   36&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;Defines&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(DefineConstants)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   37&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;OutputPath&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(OutputPath)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   38&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;ScriptPath&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(ScriptPath)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   39&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;LocaleSubFolders&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(LocaleSubFolders)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   40&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;ScriptName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(ScriptName)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   41&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;Template&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(TemplateFile)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   42&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;CopyReferences&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(CopyReferences)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   43&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;CSharpAssembly&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;@(IntermediateAssembly)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   44&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;DocumentationFile&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(DocumentationFile)&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   45&lt;/span&gt; &lt;span style="color:blue;"&gt;      &lt;/span&gt;&lt;span style="color:red;"&gt;SuppressDocumentation&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;$(SuppressDocumentation)&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   46&lt;/span&gt; &lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Output&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DebugScriptFile&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ItemName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DebugScriptFile&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   47&lt;/span&gt; &lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Output&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;TaskParameter&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ReleaseScriptFile&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;ItemName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ReleaseScriptFile&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   48&lt;/span&gt; &lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ScriptCompilerTask&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt; &lt;/pre&gt;&lt;/div&gt;
Hm... it seems to be putting the scripts at $(ScriptPath). Let's see what's the path during compilation:


&lt;div style="BACKGROUND: white;font-family:Consolas;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   49&lt;/span&gt; &lt;span style="color:blue;"&gt;  &amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt; Added by Vyas to know where Script# is keeping my files&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   50&lt;/span&gt; &lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Warning&lt;/span&gt;&lt;span style="color:blue;"&gt; &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;Script Folder: $(ScriptPath)&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
The project template is showing a value for $(ScriptPath) and I'm sure the compile-time warning added would confirm it


&lt;div style="BACKGROUND: white;font-family:Consolas;font-size:10pt;color:black;"   &gt;&lt;pre style="MARGIN: 0px"&gt;&lt;span style="color:#2b91af;"&gt;   22&lt;/span&gt; &lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ScriptPath&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;..\..\..\App_Scripts\&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ScriptPath&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
Here's the compiler output:

&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;p style="MARGIN: 0px"&gt;------ Build started: Project: ThinkFarAhead.WordReporter.Web.Scripts, Configuration: Debug Any CPU ------&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:0028,1591,1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /doc:..\ThinkFarAhead.WordReporter.Web.Scripts.xml /define:DEBUG /reference:"C:\Program Files (x86)\nStuff\ScriptSharp\v1.0\Framework\sscorlib.dll" /reference:"C:\Program Files (x86)\nStuff\ScriptSharp\v1.0\Framework\ssfx.Core.dll" /reference:"C:\Program Files (x86)\nStuff\ScriptSharp\v1.0\Framework\ssfx.UI.Forms.dll" /debug- /optimize+ /out:obj\Debug\ThinkFarAhead.WordReporter.Web.Scripts.dll /target:library Properties\AssemblyInfo.cs ClientCapabilityDetecter.cs&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;Compile complete -- 0 errors, 0 warnings&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;C:\Program Files (x86)\nStuff\ScriptSharp\v1.0\nStuff.ScriptSharp.targets : &lt;b&gt;warning : Script Folder: ..\..\App_Scripts\&lt;/b&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;Done building project "ThinkFarAhead.WordReporter.Web.Scripts.csproj".&lt;/p&gt;&lt;/div&gt;

I would have tought it should put it inside the project folder! It's dereferencing it from the project folder and put it on the root for me. Project folder: D:\C#\ , Script output folder: D:\App_Scripts.

I had looked at the samples before and it's putting the scripts correctly on the App_Scripts folder. Closer scrutiny this time reveals Nikhi's put the Script Projects "inside" the Web project itself at "bin\Scripts"! No wonder "..\..\..\App_Scripts" works for him.


&lt;a href="http://bp0.blogger.com/_Zyg-fCVdfWQ/SHmuw3AG_MI/AAAAAAAAAB0/CV1h6TwmtPM/s1600-h/ScriptSharp-4.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5222397397334162626" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/_Zyg-fCVdfWQ/SHmuw3AG_MI/AAAAAAAAAB0/CV1h6TwmtPM/s400/ScriptSharp-4.jpg" border="0" /&gt;&lt;/a&gt; &lt;p&gt;&lt;/p&gt;
Oh yes, I'm kicking myself for not figuring this one out much earlier!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-8353590729862801378?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/tip-script-and-scriptpath_13.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp2.blogger.com/_Zyg-fCVdfWQ/SHmlJs51gxI/AAAAAAAAABs/VC0CyBoNp3Y/s72-c/ScriptSharp-1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-6982476819208191443</guid><pubDate>Sun, 13 Jul 2008 05:37:00 +0000</pubDate><atom:updated>2008-07-13T11:07:30.826+05:30</atom:updated><title>Tip: Script# for VS.Net 2008 &amp; Windows Vista 64</title><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Those who are developing on a Vista 64 know VS.Net 2008 cannot debug 64-bit assemblies.&amp;#160; You need to select x86 as CPU for the resultant assembly to be debuggable.&amp;#160; Though on Script# projects, make sure you have &amp;quot;Any CPU&amp;quot; selected.&amp;#160; Otherwise, it would not generate *.js files.&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;   &lt;p style="margin: 0px"&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; &lt;/span&gt;&lt;span style="color: red"&gt;Condition&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;OutputPath&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;bin\Debug\&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;OutputPath&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DefineConstants&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;DEBUG&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DefineConstants&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ErrorReport&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;prompt&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ErrorReport&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;WarningLevel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;4&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;WarningLevel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;NoWarn&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0028, 1591&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;NoWarn&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DocumentationFile&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;bin\Debug\ThinkFarAhead.WordReporter.Web.Scriptlets.xml&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DocumentationFile&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&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;/p&gt;    &lt;p style="margin: 0px"&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; &lt;/span&gt;&lt;span style="color: red"&gt;Condition&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; '$(Configuration)|$(Platform)' == 'Release|AnyCPU' &lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;OutputPath&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;bin\Release\&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;OutputPath&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DefineConstants&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DefineConstants&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ErrorReport&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;prompt&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ErrorReport&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;WarningLevel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;4&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;WarningLevel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;NoWarn&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;0028, 1591&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;NoWarn&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DocumentationFile&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;bin\Release\ThinkFarAhead.WordReporter.Web.Scriptlets.xml&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;DocumentationFile&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&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;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-6982476819208191443?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/tip-script-for-vsnet-2008-windows-vista.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-8932539738084441950</guid><pubDate>Sun, 13 Jul 2008 05:28:00 +0000</pubDate><atom:updated>2008-07-14T10:16:15.646+05:30</atom:updated><title>DeskPins - Always On Top</title><description>&lt;p&gt;Found a wonderful little gem of a program today: &lt;a href="http://users.forthnet.gr/pat/efotinis/programs/deskpins.html"&gt;DeskPins&lt;/a&gt;.&amp;#160; Now I can make effective use of my 24&amp;quot; display!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/vyas.bharghava/SHraFU4_n4I/AAAAAAAAAC8/e6St5T90u94/s1600-h/DeskPins%5B7%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="496" alt="DeskPins" src="http://lh4.ggpht.com/vyas.bharghava/SHraF7EKb3I/AAAAAAAAADI/RmBGF55F5D0/DeskPins_thumb%5B5%5D.jpg?imgmax=800" width="695" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-8932539738084441950?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/deskpins-always-on-top.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3997934880685095845</guid><pubDate>Sun, 06 Jul 2008 05:07:00 +0000</pubDate><atom:updated>2008-07-06T10:52:25.308+05:30</atom:updated><title>Extension Methods: Calling on an object instance</title><description>&lt;blockquote&gt; &lt;p&gt;In C#, static methods could only be called through their respective type references.&amp;nbsp; The power of Extensions Methods lies in the fact they could be called on an object instance.&amp;nbsp; In fact, they could ONLY be called on an object instance.&amp;nbsp; This ability is vital for implementing Linq in C# 3.0.&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; TestBed&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TestExtensionMethods&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 11&lt;/span&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: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Main()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 13&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; val = &lt;span style="color: #a31515"&gt;"Vyas"&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 15&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Static method of string class called through the class&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"Is Internered: {0}"&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;.IsInterned(val));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 18&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Static method called through an instance&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Intellisense does not display it&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Error: Member 'string.IsInterned(string)' cannot be &lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//accessed with an instance reference; &lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//qualify it with a type name instead&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Console.WriteLine(val.IsInterned(val));&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 25&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 26&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//The ability for a static method to be called through an instance&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(val.Reverse());&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 29&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Does not compile&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Error: 'string' does not contain a definition for 'Reverse'&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Console.WriteLine(string.Reverse(val));&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.Read();&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 35&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 37&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;StringUtils&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 40&lt;/span&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: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Reverse(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; arg)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;char&lt;/span&gt; [] reversed;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Array&lt;/span&gt;.Reverse(reversed = arg.ToCharArray());&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;(reversed);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 45&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 48&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 49&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;&amp;nbsp;&amp;nbsp; 50&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;pre style="margin: 0px"&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p style="margin: 0px"&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;
&lt;p style="margin: 0px"&gt;&lt;/p&gt;&lt;/div&gt;&lt;pre style="margin: 0px"&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;&amp;nbsp;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-3997934880685095845?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/extension-methods-calling-on-object.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3266969814558100211</guid><pubDate>Sun, 06 Jul 2008 00:28:00 +0000</pubDate><atom:updated>2008-07-06T05:58:07.273+05:30</atom:updated><title>My New Rig - Part II: Assembling</title><description>&lt;p&gt;Apologies for posting this second issue after so long!&amp;#160; When quad-cores are going out of fashion and dual or quad-quad cores are in ;)&lt;/p&gt;  &lt;p&gt;The story goes like this:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I found &lt;a href="http://www.intel.com/design/servers/boards/S975XBX2/index.htm"&gt;SG975XBX2&lt;/a&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;does not have a VGA out!&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Shelled out nearly INR 2500/- [around USD $55]&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The &lt;a href="http://www.intel.com/design/servers/boards/S975XBX2/index.htm"&gt;SG975XBX2&lt;/a&gt; does not support Intel Core-2-Quad&lt;/li&gt;    &lt;li&gt;I waited for over 2 weeks to get a replacement [No D975XBX2].&amp;#160; The shopkeeper would tell one story or the other and kept me at bay [with my money securely in his pocket, of course :)] for a ASUS board.&lt;/li&gt;    &lt;li&gt;Finally, I gave in and asked for a MSI P35 Platinum Combo&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;I had to literally sit there for an hour to get this&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The new board MSI P35 Platinum Combo had dual RAM support (DDR2 &amp;amp; DDR3)&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Aside:&amp;#160; When you turn on the power for the first time, it switches itself off and restarts, presumably to detect memory used.&amp;#160; I wonder what purpose the &amp;quot;toggle card&amp;quot; has.&amp;#160; We are supposed to switch direction of the card per type of RAM used.&amp;#160;&amp;#160; As if the grave warnings threatening dire consequences if the type of RAM and the direction of the switch card is wrong weren't enough!&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Installed Vista 64 Enterprise&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;One of the perks of being a Volume Licensing Administrator for the company.&amp;#160; A MSDN Universal subscription&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The machine booted alright but the processor was overheating (about 95 degree C).&amp;#160; Eventually traced it to incorrectly installed Processor Fan.&amp;#160; Now it hovers around 35 degree C&lt;/li&gt;    &lt;li&gt;Alas, by now, my monitor, a 20&amp;quot; Samsung SyncMaster 206BW started displaying horizontal lines [it's still in Warranty but in Europe!].&amp;#160; There goes my 2000 Swedish Kroner down the drain!&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Final Component List:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Intel Core 2 Quad Q6600 &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.intel.com/design/servers/boards/S975XBX2/index.htm"&gt;MSI&lt;/a&gt; P35 Platinum Combo&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Integrated Sound 7.1&lt;/li&gt;      &lt;li&gt;Integrated LAN Support&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Transcend 4 GB DDR II RAM [800 MHz] &lt;/li&gt;    &lt;li&gt;Nvidia GeForce 8400 GS&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I took my Desktop with me when I shifted my base to US last month.&amp;#160; I found, to my dismay, my SMPS wouldn't support dual voltage and I shelled out $150 for an &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16817703009"&gt;Antec S75QB&lt;/a&gt;.&amp;#160; Also bought a Samsung SyncMaster mentioned above for $550&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Antec S75QB 750W ATX 12V&lt;/li&gt;    &lt;li&gt;Samsung&amp;#160; SyncMaster 2493HM (24&amp;quot; LCD)&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/8749672-3266969814558100211?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/07/my-new-rig-part-ii-assembling.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-6311431478230962796</guid><pubDate>Sat, 28 Jun 2008 09:14:00 +0000</pubDate><atom:updated>2008-06-28T14:44:42.918+05:30</atom:updated><title>A post after a long time!</title><description>&lt;p&gt;It had been a hectic year for me.&amp;#160;&amp;#160; From Feb, it had been a whirlwind of events over which I had little control.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I was supposed to move to US for a year last Feb&lt;/li&gt;    &lt;li&gt;Sent my pregnant wife back to her folks as she'd have to manage alone if I were to fly&lt;/li&gt;    &lt;li&gt;The travel was postponed by couple of months!&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;Blast the client that took that decision.&amp;#160; Managers seldom have the foggiest the ripple effects their decisions have.&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Took possession of my new apartment in Mar&lt;/li&gt;    &lt;li&gt;Vacated my then rented residence in Noida and moved all my things there single handedly&lt;/li&gt;    &lt;li&gt;Became a father [for the second time] to another fairy christened Sanchita in April.&lt;/li&gt;    &lt;li&gt;Was on a [well deserved] couple of week vacation right after that!&lt;/li&gt;    &lt;li&gt;Travelled to US was finally confirmed!&lt;/li&gt;    &lt;li&gt;Returned to Noida and suffered couple of bad [Luckily, only financially] car accidents where I had to claim Insurance 4 times!&amp;#160; [Two double claims, really]&lt;/li&gt;    &lt;li&gt;Was told I wouldn't be getting my car back before I travelled&lt;/li&gt;    &lt;li&gt;Inconvenienced a colleague and friend to pick it up and park it at my apartment&lt;/li&gt;    &lt;li&gt;Moved all of the unpacked items into the Guest Bedroom&lt;/li&gt;    &lt;li&gt;Let it out for couple of months [Lucky?]&lt;/li&gt;    &lt;li&gt;Visited my Wife &amp;amp; Kids before travel for couple of days!&lt;/li&gt;    &lt;li&gt;Flew finally to and here I am, in Reno, NV awaiting my family to join me in a month's time.&lt;/li&gt;    &lt;li&gt;Stayed in Extended Stay for a week&lt;/li&gt;    &lt;li&gt;Realized [first of many 'realizeds' ;)] that I could not locate my Travel adapter in my partially unpacked apartment&lt;/li&gt;    &lt;li&gt;Without a Driver's license, shelled out $30 to go to the nearest Radio Shack and bought my 3rd Travel adapter in as many trips.&lt;/li&gt;    &lt;li&gt;Bought a Samsung 24&amp;quot; TFT and a Microsoft Ego 4000 [my 2nd one] to go with my CPU brought from India [my barely 6 month old Core 2 Quad]!&lt;/li&gt;    &lt;li&gt;Realization dawned on my dumb skull that the SMPS in my India PC is 230 V&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;This happened with me on the Extension, Iron as well!!!&amp;#160; Dumb thrice! [sigh].&amp;#160; Thrice is what I thought!&amp;#160; Hmm... I concede I'm no psychic.&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Reluctantly sunk 150$ [30$ mail-in rebate I'd never set my hands on] on a 750 Watt Silencer SMPS&lt;/li&gt;    &lt;li&gt;Received yesterday and started my quest for a Phillips Screwdriver!&lt;/li&gt;    &lt;li&gt;Sunk another $7 buying &amp;quot;Allied 16 Piece Ratcheting Screwdriver Set&amp;quot;&lt;/li&gt;    &lt;li&gt;Started today at last, and found my damned PC cabinet wouldn't make room for the new SMPS.&lt;/li&gt;    &lt;li&gt;So, now my machine's all opened up, wires dangling everywhere and I'll have to get a new Cabinet [I did feel some foreboding intuition when I scorned that combo offer at Newegg.com]&lt;/li&gt;    &lt;li&gt;But hey, did I tell you, albeit all the trouble,&amp;#160; I'm online&amp;#160; and of course it beats my laptop hands down!&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;And my 24&amp;quot; monitor is a beauty!&amp;#160; I went for a Samsung even after the 20&amp;quot; TFT I had bought in Sweden developed twelve horizontal lines within a span of 6 months.&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;Guys/Gals, drop me a line at Linkedin / my official id for my latest co-ordinates.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-6311431478230962796?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/06/post-after-long-time.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-8915105757810180118</guid><pubDate>Sat, 02 Feb 2008 13:11:00 +0000</pubDate><atom:updated>2008-02-02T18:46:30.939+05:30</atom:updated><title>C# &amp; Params Keyword</title><description>&lt;p&gt;I ran into an interesting [at least to me :)] problem today.&amp;#160; How do I invoke all of the methods listed?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;   &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;     &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;       &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; ThinkFarAhead.Examples&lt;/p&gt;        &lt;p style="margin: 0px"&gt;{&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Params&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Main()&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Max(1,2);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//Max(1);&amp;#160; //Invokes #2?&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Max&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;(1,2);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//Max&amp;lt;long&amp;gt;(1);&amp;#160; //Invokes #4?&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//#1&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; Max(&lt;span style="color: blue"&gt;int&lt;/span&gt; first, &lt;span style="color: blue"&gt;params&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; [] values)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;[1] Param #2: {0}&amp;quot;&lt;/span&gt;, values[0]);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;default&lt;/span&gt;(&lt;span style="color: blue"&gt;int&lt;/span&gt;);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//#2&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; Max(&lt;span style="color: blue"&gt;params&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; [] values)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;[2] Param #1: {0}&amp;quot;&lt;/span&gt;, values[0]);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;default&lt;/span&gt;(&lt;span style="color: blue"&gt;int&lt;/span&gt;);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//#3&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; T Max&amp;lt;T&amp;gt;(T first, &lt;span style="color: blue"&gt;params&lt;/span&gt; T [] values)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;[3] Param #2: {0}&amp;quot;&lt;/span&gt;, values[0]);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;default&lt;/span&gt;(T);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//#4&lt;/span&gt;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; T Max&amp;lt;T&amp;gt;(&lt;span style="color: blue"&gt;params&lt;/span&gt; T [] values)&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;[4] Param #1: {0}&amp;quot;&lt;/span&gt;, values[0]);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;default&lt;/span&gt;(T);&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;        &lt;p style="margin: 0px"&gt;}&lt;/p&gt;     &lt;/div&gt;      &lt;p style="margin: 0px"&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;     &lt;p style="margin: 0px"&gt;&lt;/p&gt;   &lt;/div&gt;    &lt;p style="margin: 0px"&gt;&lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-8915105757810180118?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2008/02/c-params-keyword.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-688873549592913264</guid><pubDate>Sun, 23 Dec 2007 16:26:00 +0000</pubDate><atom:updated>2007-12-23T21:56:35.211+05:30</atom:updated><title>My New Rig - Part I : Shopping</title><description>&lt;p&gt;Well, in Delhi -&amp;nbsp;where I live - we have this famous place called "Nehru Place" where we get all our components.&amp;nbsp;&amp;nbsp;&amp;nbsp; It's the pilgrimage we undertake when we have a&amp;nbsp;requirement for a new PC.&amp;nbsp; &lt;/p&gt; &lt;p&gt;You need to understand that&amp;nbsp;in India we do not have the likes of Best Buy or Fry's or any such specialized chain stores.&amp;nbsp; We have a Hong Kong style - China style? - bazaar, an array of stores so small that it cannot fit a compact car, teeming with people that tries to sell everything from software [pirated, of course] to sleaze to laptops to pre-assembled computers to full blown parallel processing marvels.&lt;/p&gt; &lt;p&gt;Yeah, I see you rolling your eyes.&amp;nbsp; Ok,&amp;nbsp;I'm stretching it a bit but only the last bit ;).&amp;nbsp; And for those patriots, ok, we are the next US of A.&amp;nbsp; We do starting to have stores such as eZone that specialize in computer components.&lt;/p&gt; &lt;p&gt;The point is, when you ask for some component with a number such as D975XBX2, it's &amp;nbsp;most likely the shop in question would make a couple of phone calls to determine availability [to one of the shops in the same complex, of course] and say why don't I buy Asus P5KC.&amp;nbsp; It's the new in thing that the rest of the Delhi is buying [, you moron].&lt;/p&gt; &lt;p&gt;Another beauty is that you have to make your decision, in a jiffy.&amp;nbsp; You see, there will be people - at least a dozen - jostling with you, shouting at the shop keeper for a DDR 2 RAM or a Microsoft Ergo mouse.&amp;nbsp; The shopkeeper's attention span is usually less than a two seconds.&amp;nbsp; He'll be&amp;nbsp;juggling two phones and a cellular phone simultaneously talking to his customers and vendors and showing off his parallel processing capabilities.&lt;/p&gt; &lt;p&gt;Bottom line:&amp;nbsp;&amp;nbsp; I did dutifully accept the offer of taking an S975XBX2 instead of the asked for D95XBX2.&lt;/p&gt; &lt;p&gt;Here's my final component list:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A pirate's version of&amp;nbsp;&amp;nbsp;Apple's cabinet with handles&lt;/li&gt; &lt;ul&gt; &lt;li&gt;I couldn't find the link where I saw the apple's design.&amp;nbsp; Will provide it later.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Intel Core 2 Quad Q6600  &lt;li&gt;&lt;a href="http://www.intel.com/design/servers/boards/S975XBX2/index.htm"&gt;SG975XBX2&lt;/a&gt;  &lt;li&gt;Transcend 4 GB DDR II RAM [800 MHz] &lt;/li&gt; &lt;ul&gt; &lt;li&gt;4 single pieces.&amp;nbsp; Surprise, Surprise!&amp;nbsp; The guy didn't have a 2 GB pieces of DDR II&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;No Graphics Card &lt;/li&gt; &lt;li&gt;No Sound Card  &lt;ul&gt; &lt;li&gt;All the newer boards support 7.1 Surround which would suffice my needs.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Ethernet Card  &lt;ul&gt; &lt;li&gt;Most of the above motherboards have LAN built-in&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I purchased them about 3 weeks ago.&amp;nbsp; At last, got sometime to blog [with my darling daughter throwing things at me in the background].&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-688873549592913264?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/12/my-new-rig-part-i-shopping.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-6897867345913008661</guid><pubDate>Sun, 09 Dec 2007 11:15:00 +0000</pubDate><atom:updated>2007-12-09T16:51:27.029+05:30</atom:updated><title>Scalability in Physics vs. Scalability in Computer Science</title><description>&lt;p&gt;In my experience, I've seen that&amp;nbsp;&lt;em&gt;most of the solutions&amp;nbsp;are just a restatement of&amp;nbsp;their scale&lt;/em&gt;.&amp;nbsp; That is, scale and the solution is so intricately intertwined, that the solution is not applicable to the same problem of a larger scale.&amp;nbsp; Unless, of course, the solution keeps scale in mind [a solution that can be &lt;em&gt;scaled up&lt;/em&gt;, and more importantly &lt;em&gt;scaled out&lt;/em&gt;].&lt;/p&gt; &lt;p&gt;I saw this [couple of months ago]:&amp;nbsp; &lt;a href="http://www.popsci.com/popsci/how20/58c7db3c57f61110vgnvcm1000004eecbccdrcrd.html"&gt;A nuclear reactor built in the basement.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hmm... I'm no physicist, but it seems scalability in software&amp;nbsp;is a unique problem ;)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:6ab0d692-ac21-4ac5-a477-e995ba591931" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Scalability" rel="tag"&gt;Scalability&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/8749672-6897867345913008661?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/12/scalability-in-physics-vs-scalability.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-7843063075027756024</guid><pubDate>Sat, 08 Dec 2007 18:24:00 +0000</pubDate><atom:updated>2007-12-08T23:57:57.851+05:30</atom:updated><title>My Proposed New Rig:  Core 2 Quad 6600</title><description>&lt;p&gt;I think it's time for a new rig for me.&amp;nbsp;&amp;nbsp;This would be my third -&amp;nbsp;DIY&amp;nbsp;- custom built system (See:&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://www.codinghorror.com/blog/archives/000814.html"&gt;Jeff's DIY evangelism&lt;/a&gt;). &amp;nbsp;&amp;nbsp;My current one is a Intel Pentium 2.4 GHz HT.&amp;nbsp; Here's the complete configuration:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Intel Pentium 2.4 GHz HT&lt;/li&gt; &lt;li&gt;Intel &lt;a href="http://www.intel.com/support/motherboards/desktop/D865GBF/"&gt;D865GBF&lt;/a&gt; Motherboard&lt;/li&gt; &lt;li&gt;Nvidia GeForce 6200 &lt;/li&gt; &lt;ul&gt; &lt;li&gt;More recent addition, after I installed Vista Enterprise on an auxiliary drive&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;1 GB DDR RAM [400 MHz]&lt;/li&gt; &lt;li&gt;HDD&lt;/li&gt; &lt;ul&gt; &lt;li&gt;120 GB Seagate Barracuda SATA&lt;/li&gt; &lt;li&gt;150 GB Samsung SATA&lt;/li&gt; &lt;li&gt;Elements 300 GB [External, USB]&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;No Sound Card &lt;/li&gt; &lt;ul&gt; &lt;li&gt;I find the integrated audio enough for my needs [4.1 Surround]&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Ethernet Card&lt;/li&gt; &lt;li&gt;Samsung SyncMaster 206BW 20" LCD&lt;/li&gt; &lt;li&gt;Sony DVD +- RW Writer&lt;/li&gt; &lt;li&gt;Sony DVD ROM&lt;/li&gt; &lt;li&gt;Kensington Wireless Keyboard, Mouse Combo&lt;/li&gt; &lt;ul&gt; &lt;li&gt;I had a Microsoft Natural Ergonomic Keyboard 4000.&amp;nbsp; I also have an&amp;nbsp;imp for a daughter -&amp;nbsp;2 and half a year old.&amp;nbsp; She had a field day drenching it with a mouthful of water.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Creative Ultra Webcam&lt;/li&gt; &lt;li&gt;Intex Headphones&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I run the following OSs:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Windows XP SP2 [primary]&lt;/li&gt; &lt;li&gt;Windows Vista Enterprise&amp;nbsp; [Auxiliary]&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;My proposed rig:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Intel Core 2 Quad Q6600&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.intel.com/products/motherboard/D975XBX2/index.htm"&gt;DG975XBX2&lt;/a&gt; / &lt;a href="http://www.intel.com/products/motherboard/DG33TL/index.htm"&gt;DG33TL&lt;/a&gt; /&lt;a href="http://www.asus.com/products.aspx?l1=3&amp;amp;l2=11&amp;amp;l3=534&amp;amp;l4=0&amp;amp;model=1694&amp;amp;modelmenu=1"&gt;ASUS P5KC&lt;/a&gt; / &lt;a href="http://www.msicomputer.com/product/p_spec.asp?model=P6N_SLI_Platinum&amp;amp;class=mb"&gt;MSI P6N SLI&lt;/a&gt; &lt;/li&gt; &lt;ul&gt; &lt;li&gt;I've duly noted MSI P6N SLI&amp;nbsp;adorns &lt;a href="http://www.codinghorror.com/blog/archives/000816.html"&gt;Jeff's Work&lt;/a&gt; &amp;amp; &lt;a href="http://www.hanselman.com/blog/CommentView.aspx?guid=6ED8D229-2E2A-4B74-A65A-39EE6F7D4E9D"&gt;Scott Hanselman's Developer Machine&lt;/a&gt;s&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;4 GB DDR II RAM [800 MHz]&lt;/li&gt; &lt;li&gt;No Graphics Card&lt;/li&gt; &lt;ul&gt; &lt;li&gt;I do not have plans yet&amp;nbsp;to given to my &lt;a href="http://www.codinghorror.com/blog/archives/000959.html"&gt;Triple Monitor&lt;/a&gt; fetish.&amp;nbsp; I'll use the GeForce 6200 from my old machine [Digital DVI].&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;No Sound Card&lt;/li&gt; &lt;ul&gt; &lt;li&gt;All the newer boards support 7.1 Surround which would suffice my needs.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Ethernet Card&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Most of the above motherboards have LAN built-in&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;Proposed OS:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Windows Vista Enterprise 64 Bit&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;My new machine would probably inherit everything else starting from SyncMaster down from my old machine.&amp;nbsp; Also planning to keep my old&amp;nbsp;one around.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000905.html"&gt;I'll do a Jeff Atwood&lt;/a&gt; in the coming week assembling my new rig.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-7843063075027756024?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/12/my-proposed-new-rig-core-2-quad-6600.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3856200268434790604</guid><pubDate>Sat, 08 Dec 2007 17:17:00 +0000</pubDate><atom:updated>2007-12-08T22:47:58.049+05:30</atom:updated><title>Update: VS.Net 2008 Team Suite RTM</title><description>&lt;p&gt;I'm still seeing only VS.Net 2008 trial as you can see below:&lt;/p&gt; &lt;p&gt;&lt;a title="vsnet2008teamsuite" href="http://www.flickr.com/photos/9785933@N02/2095078911/"&gt;&lt;img alt="vsnet2008teamsuite" src="http://static.flickr.com/2191/2095078911_cae666d48b.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;A brainwave struck me about ten minutes ago.&amp;nbsp; OK!&amp;nbsp; Only trial is available for download but I read somewhere the trial or full version is determined by the product key - obviously!&amp;nbsp; This is what I'm seeing when I&amp;nbsp; went the Product Keys page:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a title="vsnetkeys" href="http://www.flickr.com/photos/9785933@N02/2095071639/"&gt;&lt;img alt="vsnetkeys" src="http://static.flickr.com/2059/2095071639_a19297a29b.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;It talks about VS.Net rather than VS.Net 2005 / VS.Net 2008.&amp;nbsp; I reckon this should work for VS.Net 2008 Team Suite RTM.&amp;nbsp; I've started downloading VS.Net 2008 RTM.&amp;nbsp; Oh, yeah, just 30 more hours to go :)&lt;/p&gt; &lt;p&gt;&lt;a title="vsnet2008downloadfilemanager" href="http://www.flickr.com/photos/9785933@N02/2095863968/"&gt;&lt;img alt="vsnet2008downloadfilemanager" src="http://static.flickr.com/2386/2095863968_238f686ffa.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-3856200268434790604?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/12/update-vsnet-2008-team-suite-rtm.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-9164768029362385807</guid><pubDate>Mon, 26 Nov 2007 17:20:00 +0000</pubDate><atom:updated>2007-11-26T22:50:38.288+05:30</atom:updated><title>VS.Net 2008 Team Suite RTM Download</title><description>&lt;p&gt;I've a MSDN Universal Subscription as a result of my company's Volume Licensing Agreement with Microsoft (MVLS).&amp;nbsp; Since I've been hearing that VS.Net 2008 has finally gone RTM and is available for download to MSDN subscribers, I decided to expend some bandwidth on downloading it.&lt;/p&gt; &lt;p&gt;Unfortunately, I couldn't find it anywhere.&amp;nbsp;&amp;nbsp;&amp;nbsp; The first link loudly proclaims that VS.Net 2008 is available on MSDN subscriptions.&amp;nbsp; It also states&amp;nbsp; - the red underlined line - that &lt;em&gt;"All English Visual Studio 2008 Editions will be available from 'Top Downloads' below".&amp;nbsp; &lt;/em&gt;&lt;/p&gt; &lt;p&gt;But the Top Subscriber Downloads has only the Trial version.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a title="vsnet2008download" href="http://www.flickr.com/photos/9785933@N02/2065603707/"&gt;&lt;img alt="vsnet2008download" src="http://static.flickr.com/2050/2065603707_60716ec334.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The only VS.Net 2008 available seems to be the professional version.&amp;nbsp; Number of&amp;nbsp; &lt;a href="http://www.eggheadcafe.com/software/aspnet/31165295/visual-studio-2008-rtm-av.aspx"&gt;people&lt;/a&gt; seem to have &lt;a href="http://weblogs.asp.net/fbouma/archive/2007/11/19/visual-studio-team-system-2008-team-suite-rtm-now-available-on-msdn-subscribers.aspx"&gt;downloaded it successfully&lt;/a&gt;.&amp;nbsp; No such luck for me :(&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a title="vsnet2008download2" href="http://www.flickr.com/photos/9785933@N02/2066401644/"&gt;&lt;img alt="vsnet2008download2" src="http://static.flickr.com/2311/2066401644_dccd2268e6.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I'm beginning to doubt if MSDN Universal Subscribers are eligible to receive VS.Net 2008 Team Suite or not.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:ada002c8-59d1-4636-a05f-db4849e44fde" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/VS.Net%202008" rel="tag"&gt;VS.Net 2008&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.Net%203.5" rel="tag"&gt;.Net 3.5&lt;/a&gt;, &lt;a href="http://technorati.com/tags/MSDN" rel="tag"&gt;MSDN&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/8749672-9164768029362385807?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/11/vsnet-2008-team-suite-rtm-download.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3065428464819455457</guid><pubDate>Sat, 24 Nov 2007 15:39:00 +0000</pubDate><atom:updated>2007-11-24T21:16:34.950+05:30</atom:updated><title>How to Generate RCW on the fly in your Nant Scripts</title><description>&lt;p&gt;Have you ever tried to remember a research you've done couple of years ago and you're desperate to get your hands on the old code?&amp;nbsp; And the frustration of trying to remember what you did exactly, if you're unable to find or don't have access anymore to the source?  &lt;p&gt;Well, I ran into one today:  &lt;p&gt;Couple of years ago, I had to implement a build process for one of my projects.&lt;br&gt;One of the modules was a port from VB 6.0 (to VB.Net) and it was using MSXML2!  &lt;p&gt;I wanted to generate the RCW on the fly for MSXML2.&amp;nbsp; Now, I want the solution to be generic enough to use on any project that uses interop.  &lt;p&gt;I wrote a function:&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;language&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;C#&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;prefix&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;tlb&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;imports&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;import&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;namespace&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;System&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;import&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;namespace&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;System.Runtime.InteropServices&lt;/span&gt;"&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;imports&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;code&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;!-- Code Goes Here --&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;]]&amp;gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;code&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;project&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here's the CDATA Section.&amp;nbsp; Given here to preserve formatting:&lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt; &lt;p style="margin: 0px"&gt;[&lt;span style="color: teal"&gt;DllImport&lt;/span&gt;(&lt;span style="color: maroon"&gt;"oleaut32.dll"&lt;/span&gt;, PreserveSig=&lt;span style="color: blue"&gt;false&lt;/span&gt;)]&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;extern&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; QueryPathOfRegTypeLib(&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: teal"&gt;Guid&lt;/span&gt; guid, &lt;span style="color: blue"&gt;ushort&lt;/span&gt; majorVer, &lt;span style="color: blue"&gt;ushort&lt;/span&gt; minorVer, &lt;span style="color: blue"&gt;uint&lt;/span&gt; lcid, [&lt;span style="color: teal"&gt;MarshalAs&lt;/span&gt;(&lt;span style="color: teal"&gt;UnmanagedType&lt;/span&gt;.BStr)] &lt;span style="color: blue"&gt;out&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; path); &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;[Function(&lt;span style="color: maroon"&gt;"find-path"&lt;/span&gt;)]&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; GetTypeLibPath(&lt;span style="color: blue"&gt;string&lt;/span&gt; guid, &lt;span style="color: blue"&gt;ushort&lt;/span&gt; major, &lt;span style="color: blue"&gt;ushort&lt;/span&gt; minor, &lt;span style="color: blue"&gt;uint&lt;/span&gt; lcid)&lt;/p&gt; &lt;p style="margin: 0px"&gt;{&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: teal"&gt;Guid&lt;/span&gt; actualGuid = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: teal"&gt;Guid&lt;/span&gt;(guid);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;string&lt;/span&gt; tlbName = &lt;span style="color: blue"&gt;null&lt;/span&gt;; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;try&lt;/span&gt; &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; QueryPathOfRegTypeLib(&lt;span style="color: blue"&gt;ref&lt;/span&gt; actualGuid, major, minor, lcid, &lt;span style="color: blue"&gt;out&lt;/span&gt; tlbName);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: teal"&gt;COMException&lt;/span&gt; e) &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//Typelib wasn't found - tlbimp will barf&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//when the compile happens, but we won't worry about it.&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: teal"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: maroon"&gt;"[find-path] "&lt;/span&gt; + &lt;span style="color: maroon"&gt;"ERROR!!! "&lt;/span&gt; + e.Message);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;return&lt;/span&gt; tlbName.TrimEnd(); &lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;} &lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now, wherever I wanted, I could use it thus: &lt;/p&gt; &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas, courier new"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; Find out location of MSXML2 and create an interop assembly&lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;property&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;com.typelib.fullpath&lt;/span&gt;"&lt;span style="color: blue"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${tlb::find-path('F5078F18-C551-11D3-89B9-0000F81FE221',3,0,0)}&lt;/span&gt;"&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;&amp;nbsp; Somehow the return value from the find-path function contains a character &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;&amp;nbsp; at the very end causing &amp;lt;tlbimp&amp;gt; to fail.&amp;nbsp; Removing the last character from &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: green"&gt;&amp;nbsp; the property as a workaround.&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;--&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;tlbimp&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;typelib&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${string::substring(com.typelib.fullpath,0, string::get-length(com.typelib.fullpath)-1)}&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: red"&gt;output&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;${source.baseFolder}/Intouch8/bin/MSXML2.dll&lt;/span&gt;"&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;nbsp; &amp;nbsp; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;br&gt;The function I was trying to remember was the API call: QueryPathOfRegTypeLib.&lt;br&gt;Oooff... (sigh of relief).  &lt;p&gt;Now that I've blogged it, I am sure I will find it next time :)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:09783d63-2da9-418a-a7e8-81f4db7b014e" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Nant" rel="tag"&gt;Nant&lt;/a&gt;, &lt;a href="http://technorati.com/tags/tlbimp" rel="tag"&gt;tlbimp&lt;/a&gt;, &lt;a href="http://technorati.com/tags/QueryPathOfRegTypeLib" rel="tag"&gt;QueryPathOfRegTypeLib&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/8749672-3065428464819455457?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/11/how-to-generate-rcw-on-fly-in-your-nant.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-1827431622725121584</guid><pubDate>Mon, 05 Nov 2007 06:26:00 +0000</pubDate><atom:updated>2007-11-05T11:56:40.945+05:30</atom:updated><title>Core Values</title><description>&lt;p&gt;I would like to work for&amp;nbsp;a Software&amp;nbsp;company that:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Values Technical excellence&lt;/li&gt; &lt;li&gt;Believes in being the best at what it does: Producing Quality Software&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Good design produces a quality product that reduces rework later&lt;/li&gt; &lt;li&gt;Believes that software must be designed for change&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Believes Software Development is fun!&amp;nbsp; And strives to keep it so.&lt;/li&gt; &lt;li&gt;Encourages a product mindset&lt;/li&gt; &lt;ul&gt; &lt;li&gt;A product mindset is one where even a small project of 3 months duration is developed as though it were a marketable product.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Believes&amp;nbsp;fostering trust with the client&lt;/li&gt; &lt;li&gt;Emphasizes on automation to keep the process overhead to a minimum&lt;/li&gt; &lt;li&gt;Encourages people to learn constantly and rewards them for their knowledge.&lt;/li&gt; &lt;li&gt;Maintains a flat hierarchy&lt;/li&gt; &lt;li&gt;Emphasizes Agile project management practices&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Somehow, I've come to think all other bullets can just be restated with a single sentence:&amp;nbsp; Agile must be the way of live in my dream company :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-1827431622725121584?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/11/core-values.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-3012981825486816428</guid><pubDate>Tue, 23 Oct 2007 11:41:00 +0000</pubDate><atom:updated>2007-11-24T21:18:52.076+05:30</atom:updated><title>Traveling Back Home [with my new Samsung SyncMaster 206 BW 20" LCD]</title><description>&lt;p&gt;I'm&amp;nbsp;leaving Sweden tomorrow and will be back in India on 26th October.&amp;nbsp; Can't wait to hookup my shiny, Samsung SyncMaster 206 BW 20" LCD Monitor :)&amp;nbsp; I have to see how compatible is my "old" Nvidia GeForce 6200 card.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-3012981825486816428?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/10/traveling-back-home-with-my-new-samsung.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-1533009426977754826</guid><pubDate>Wed, 17 Oct 2007 13:20:00 +0000</pubDate><atom:updated>2007-10-17T18:50:43.413+05:30</atom:updated><title>Bake vs. Boobs?</title><description>&lt;p&gt;[17th October 2007 15:15PM] Update: Fine... I don't have to build one... It already exists in &amp;nbsp;the &lt;a href="http://www.ayende.com/Blog/archive/2007/09/22/Introducing-Boobs-Boo-Build-System.aspx"&gt;Boo Build System.&lt;/a&gt;&amp;nbsp; I think I need to stop using my blog as a scratch pad of ideas ;)&amp;nbsp; Still, it would be nice to know if Boobs meets the goals I had in mind:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;It's full fledged DSL for Build [like Rake.&amp;nbsp; So very powerful.&amp;nbsp; I suspect Boo can do stuff that Ruby cannot in terms of extensible syntax.&amp;nbsp;]&lt;/li&gt; &lt;li&gt;It should be able to leverage the tasks already written for Nant [in other .Net languages]&lt;/li&gt; &lt;li&gt;Easy to use&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/8749672-1533009426977754826?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/10/bake-vs-boobs.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8749672.post-1026085244597113555</guid><pubDate>Tue, 16 Oct 2007 17:08:00 +0000</pubDate><atom:updated>2007-10-17T18:12:25.577+05:30</atom:updated><title>Bake (?) - A Rake Port in Boo?</title><description>&lt;p&gt;I defined&amp;nbsp;a Build Process and wrote the NAnt build scripts [MSBuild wasn't even in its beta then]&amp;nbsp; for one of the .Net projects I was with quite sometimes ago.&amp;nbsp; Can you imagine a fortune 500 company's billion dollar Enterprise Web site without a Source Control system or Build system in place?&amp;nbsp;&amp;nbsp;&amp;nbsp;No way, right?&amp;nbsp; Wise up guys!&lt;/p&gt; &lt;p&gt;I'll reserve posting about the actual process for later.&amp;nbsp; Suffice to say that this project&amp;nbsp;found so many issues with VSS 6.0d [which the company was insisting we use it].&amp;nbsp; And then I had an opportunity work with Perforce and I loved it!&lt;/p&gt; &lt;p&gt;Now, I can actually have track builds with all the changelists they include and mail to individual developers that had checked-in code, in case of a broken build.&lt;/p&gt; &lt;p&gt;Because &lt;a href="http://www.ayende.com/Blog/"&gt;Rahien&lt;/a&gt;&amp;nbsp;is so vocal about DSL and evangelizing Boo, I was thinking of building a DSL that would ease my pain of having to define a Build Process for each of the Source Control / Build System Provider combinations.&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Let me make no bones about it:&amp;nbsp; While I'm comfortable with the concept of "DSL"s, I'm quite new to the idea of building one.&amp;nbsp; And I'm new to Boo.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;But the idea of a DSL was so compelling till I found &lt;a href="http://martinfowler.com/articles/rake.html"&gt;great minds&lt;/a&gt; have already been at &lt;a href="http://www.nabble.com/Re:-Gant-0.4---Creating-a-powerful-DSL-for-building-Java-projects-p10732627.html"&gt;work&lt;/a&gt; ;)&amp;nbsp;&amp;nbsp;I think it's Paul Graham who said &lt;u&gt;&lt;em&gt;"If you think you have a good idea, chances are that somebody's already working on it"&lt;/em&gt;&lt;/u&gt;&amp;nbsp;.&amp;nbsp; Sigh!&amp;nbsp; Also, My idea of DSL for a Build language has evolved once I've seen how Rake is implemented.&lt;/p&gt; &lt;p&gt;But I guess, it would be a good idea to still implement this [at least just to learn Boo].&lt;/p&gt; &lt;p&gt;One disadvantage of an "internal DSL" as Martin Fowler calls them is ignoring large number of Tasks that Ant/Nant/MSBuild projects have accumulated over time.&amp;nbsp; If I need a SubVersion checkout task, I may have to reinvent the wheel in my DSL, unless&amp;nbsp;my DSL has a way of integrating this body of work.&amp;nbsp;&lt;/p&gt; &lt;p&gt;If my DSL is in C# [Well... Rahien says C# is not "suitable" for writing such a DSL.&amp;nbsp; I choose to believe him as I have a vested interest in learning Boo], I may well be able to leverage all of Nant's tasks.&lt;/p&gt; &lt;p&gt;My vision is [was]&amp;nbsp;to have a single language that would describe the build process&amp;nbsp;&amp;nbsp;&amp;nbsp;The language would "compile" down to the requirements you have either Ant/Nant/MSBuild scripts with appropriate tasks for Source control provider of your choice.&amp;nbsp; Since the Build Systems themselves are extendible and have massive community that revolve around them, it seems like a very good idea.&amp;nbsp; It may be &lt;em&gt;esoterically&lt;/em&gt; dumb!&amp;nbsp; Let me think about it a bit more.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;[17th October 2007 14:37PM] Update:&amp;nbsp;&amp;nbsp; OK.&amp;nbsp; Why to compile it "down" to Nant/MSBuild scripts?&amp;nbsp; Since Boo is already in .Net fold, we can just use the existing tasks [from NantContrib/ MSBuildContrib?] as is!&amp;nbsp; No?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8749672-1026085244597113555?l=www.thinkfarahead.com'/&gt;&lt;/div&gt;</description><link>http://www.thinkfarahead.com/2007/10/dsl-boo-rake.html</link><author>noreply@blogger.com (Vyas Bharghava)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>
