<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10575523</id><updated>2011-12-26T14:05:12.010+02:00</updated><category term='Microsoft'/><category term='ILMerge'/><category term='MSIX'/><category term='Load Balancer'/><category term='Deployment'/><category term='Service Pack'/><category term='Development Server'/><category term='CI'/><category term='Family Update'/><category term='Commercial'/><category term='Production'/><category term='Songsmith'/><category term='Hotels'/><category term='Movie'/><category term='Skype'/><category term='ASP.NET'/><category term='Code'/><category term='Advertisement'/><category term='Visual Studio 2008'/><category term='Travel'/><category term='Paris'/><category term='Dump'/><category term='Problem'/><category term='Video'/><category term='.NET 2.0'/><category term='Reflector'/><category term='.NET 3.5'/><category term='Olympics'/><category term='Hotfix'/><category term='Team Build'/><category term='Ildasm'/><category term='Incremental Build'/><category term='Music'/><category term='SP1'/><category term='.NET 3.0'/><category term='IIS'/><category term='Web service'/><category term='TFS 2008'/><category term='SOAP'/><category term='msp'/><category term='Hebrew'/><category term='Team System'/><category term='iPhone'/><category term='Upgrade'/><category term='WCF'/><category term='Database'/><category term='Sharepoint'/><category term='Label'/><category term='Web Deployment Project'/><category term='Silverlight'/><title type='text'>ReadCommit</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10575523.post-7264240311884117764</id><published>2011-07-05T16:28:00.000+03:00</published><updated>2011-07-05T16:56:38.662+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problem'/><category scheme='http://www.blogger.com/atom/ns#' term='Web service'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Production'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='Dump'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Load Balancer'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>ASP.NET Deadlock on WCF service hosted in IIS</title><content type='html'>&lt;p align="justify"&gt;One of our most important core business services is a WCF soap web service for selling our products to other companies. As we have lots of requests to those services, we must have multiple instances of this service running on several IIS servers - all behind a load balancer.&lt;/p&gt;  &lt;h4 align="justify"&gt;&lt;strong&gt;Problem begins&lt;/strong&gt;:&lt;/h4&gt;  &lt;p align="justify"&gt;Our service was running happily in production for quite a long time.    &lt;br /&gt;Than one day, our monitoring team noticed all instances went &lt;strong&gt;&lt;font color="#ff0000"&gt;red&lt;/font&gt;&lt;/strong&gt; in the load balancer health monitor.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;EMERGENCY!!!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;We immediately started a conference call with all the needed people, and as a first action we decide to recycle some instances and see if they come up ok.&lt;/p&gt;  &lt;p align="justify"&gt;They do. &lt;strong&gt;We were back online.&lt;/strong&gt;&lt;/p&gt;  &lt;h4 align="justify"&gt;Investigation:&lt;/h4&gt;  &lt;p align="justify"&gt;when we look at the event viewer, we see IIS has started to recycle some of the instances we haven’t, because of the following error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="justify"&gt;&lt;font color="#ff0000"&gt;ISAPI 'c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll' reported itself as unhealthy for the following reason: 'Deadlock detected'.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;This error pointed us to this article:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="justify"&gt;&lt;a href="http://support.microsoft.com/kb/821268"&gt;Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;In short, the article explains that this error might be caused by the limit of the threads .Net allows to open Simultaneously, where all the allowed thread are used and they waits for something which needs thread as well.&lt;/p&gt;  &lt;p align="justify"&gt;So we have started to think if we may have such scenario in our code, and couldn’t come with this exact scenario, but we thought maybe one of our internal services was blocked and caused all the waiting thread.&lt;/p&gt;  &lt;p align="justify"&gt;Another option which we thought about was DoS attack, but we haven’t seen any increase in calls per seconds.&lt;/p&gt;  &lt;p align="justify"&gt;Anyway – we decided to follow Microsoft recommendations for the runtime configuration settings, like:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;maxWorkerThreads&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;maxIoThreads&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;minWorkerThreads&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;minFreeThreads&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;minLocalRequestFreeThreads&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;And also WCF settings&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;MaxConcurrentCalls&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;MaxConcurrentInstances&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;MaxConcurrentSessions&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;strong&gt;It didn’t help&lt;/strong&gt; – we got the same crash scenario few days later.&lt;/p&gt;  &lt;h4 align="justify"&gt;Investigating Dumps&lt;/h4&gt;  &lt;p align="justify"&gt;We have decided to follow the instructions in &lt;a href="http://support.microsoft.com/kb/828222"&gt;“How to generate a dump file when ASP.NET deadlocks in IIS 6.0”&lt;/a&gt;, and created dump file the next deadlock happened.&lt;/p&gt;  &lt;p align="justify"&gt;The Dump file hasn’t shown any exception at the deadlock time, however the threads counts gave us the first clue:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="left"&gt;Hundreds of ASP.NET HTTP Request threads (System.ServiceModel.Activation.HttpModule.ProcessRequest)       &lt;br /&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt; Zero WCF executing threads       &lt;br /&gt;(System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin)&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h4 align="justify"&gt;Logs to the help&lt;/h4&gt;  &lt;p align="justify"&gt;We have collected the logs from IIS, Event Viewer, Load Balancer, Data warehouse DB, and application logs. The picture we saw was:&lt;/p&gt;  &lt;p align="justify"&gt;19:52:51 – Last successful WCF request (IIS log)   &lt;br /&gt;19:53:49 – 1 connection_Dropped (HTTPERR log)    &lt;br /&gt;19:57:45 – Last successful .aspx page request (IIS log)    &lt;br /&gt;20:00:24 - Deadlock Detected (W3SVC-WP Event Viewer)    &lt;br /&gt;20:03:35 - 164 * Connection_Abandoned_By_AppPool – most of WCF requests, few aspx pages (HTTPERR)&lt;/p&gt;  &lt;p align="justify"&gt;This gives the same picture as the Dump file: &lt;/p&gt;  &lt;p align="justify"&gt;somehow for almost 5 minutes – aspx files worked perfectly, but WCF requests were not returned to the clients (instead they were stack in the asp.net threads as there weren't any WCF threads to handle them).   &lt;br /&gt;All those WCF requests eat up all the available thread from the thread pool, and once finish them all (after the declared &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.configuration.processmodelsection.responsedeadlockinterval(v=VS.80).aspx"&gt;ResponseDeadlockInterval&lt;/a&gt; passed with no request responded) – Deadlock was declared.&lt;/p&gt;  &lt;p align="justify"&gt;Once the Process recycled – IIS abandoned all those queued requests.&lt;/p&gt;  &lt;h4 align="justify"&gt;What happened to the WCF?&lt;/h4&gt;  &lt;p align="justify"&gt;As you can see, the dump we used was created way too late to find out the cause for the WCF problem.   &lt;br /&gt;But, Here logs came to the help again.&lt;/p&gt;  &lt;p align="justify"&gt;we have identified (in the IIS logs) a unique User-Agent which repeats each time just before the services crashed, so we followed this user, and using Network Monitor (Wireshark) we finally arrived to the source of the problem:&lt;/p&gt;  &lt;p align="justify"&gt;This client application has sent us requests with SOAPAction which didn’t fit to any operation in the WCF service&lt;/p&gt;  &lt;h4 align="justify"&gt;The Bug&lt;/h4&gt;  &lt;p align="justify"&gt;We have in our WCF service an attribute - “&lt;b&gt;&lt;i&gt;ErrorHandledWebService&lt;/i&gt;&lt;/b&gt;” – which inherit from &lt;b&gt;&lt;i&gt;“Attribute”&lt;/i&gt;&lt;/b&gt; and implemets “&lt;b&gt;&lt;i&gt;IServiceBehavior”&lt;/i&gt;&lt;/b&gt; &amp;amp; “&lt;b&gt;&lt;i&gt;IErrorHandler”&lt;/i&gt;&lt;/b&gt; interfaces. This attribute tells WCF to bind our Error handling code the WCF flow.&lt;/p&gt;  &lt;p align="justify"&gt;When exception happens on the WCF request it triggers our “&lt;b&gt;&lt;i&gt;ProvideFault”&lt;/i&gt;&lt;/b&gt; method of the &lt;b&gt;&lt;i&gt;“IErrorHandler”&lt;/i&gt;&lt;/b&gt; interface – which we implement to write the original request to our log.&lt;/p&gt;  &lt;p align="justify"&gt;The problem starts when a request comes to the service which doesn’t fit any operation in the service an exception is thrown by WCF. &lt;/p&gt;  &lt;p align="justify"&gt;In this case - OperationContext.Current is null.&lt;/p&gt;  &lt;p align="justify"&gt;Our code used OperationContext.Current.RequestContext.RequestMessage.State which caused a &lt;b&gt;&lt;i&gt;Null Reference Exception &lt;/i&gt;&lt;/b&gt;which was not handled by our code.&lt;/p&gt;  &lt;h4 align="justify"&gt;Microsoft’s WCF Bug?&lt;/h4&gt;  &lt;p align="justify"&gt;This unhandled exception inside the &lt;b&gt;&lt;i&gt;ProvideFault &lt;/i&gt;&lt;/b&gt;can cause one of the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;The Process terminate itself.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;The Process stop responding to WCF requests.&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;those behaviors depends on the value of this parameter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="justify"&gt;&lt;b&gt;&lt;i&gt;&amp;lt;legacyUnhandledExceptionPolicy enabled=&amp;quot;true/false&amp;quot; /&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;if this flag is false – the process terminate because of the unhandled exception.   &lt;br /&gt;if it is true – WCF is dead, but the rest functionalities (like aspx) continue to work.&lt;/p&gt;  &lt;p align="justify"&gt;as long as you the flag set to false – Microsoft behavior is just fine – crashing the process. &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh3.ggpht.com/-mIbfYabkgZ8/ThMU2rBlfOI/AAAAAAAAA5A/Nr58Nn29ouM/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;But if the flag is true (also I know Microsoft recommend to go without the legacy mode) - I think it as a bug in the framework ,as WCF shouldn’t leave the process in an unstable state, or at least, it should write proper error message to the event log - explaining WCF is dead because of this.&lt;/p&gt;  &lt;p align="justify"&gt;What do you think?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-7264240311884117764?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/7264240311884117764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=7264240311884117764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7264240311884117764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7264240311884117764'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2011/07/aspnet-deadlock-on-wcf-service-hosted.html' title='ASP.NET Deadlock on WCF service hosted in IIS'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-mIbfYabkgZ8/ThMU2rBlfOI/AAAAAAAAA5A/Nr58Nn29ouM/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-2001866564226374865</id><published>2011-03-15T10:57:00.001+02:00</published><updated>2011-03-15T10:57:42.823+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>service has zero application (non-infrastructure) endpoints</title><content type='html'>&lt;p&gt;I got this message today after copying a working web application from one server to the other.   &lt;br /&gt;The web application was configured as virtual directory on both places.    &lt;br /&gt;Same exact web.config and same DLLs.&lt;/p&gt;  &lt;p&gt;It turns out to be the website folder itself:&lt;/p&gt;  &lt;p&gt;In the original working machine the website folder was valid and empty, while on the problematic server – the website was pointing to not existing folder.&lt;/p&gt;  &lt;p&gt;I guess that when WCF looks for the web.config – it has the rule to go up to see if there are any web.config in the hierarchy above – and it failed on the not existing folder.&lt;/p&gt;  &lt;p&gt;Hope it will help someone. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-2001866564226374865?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/2001866564226374865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=2001866564226374865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2001866564226374865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2001866564226374865'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2011/03/service-has-zero-application-non.html' title='service has zero application (non-infrastructure) endpoints'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-3346438560823791930</id><published>2011-01-17T21:12:00.001+02:00</published><updated>2011-01-17T21:12:29.326+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Problem'/><category scheme='http://www.blogger.com/atom/ns#' term='Production'/><category scheme='http://www.blogger.com/atom/ns#' term='Load Balancer'/><title type='text'>Why a good Health Check is so important in your Load Balancer</title><content type='html'>&lt;p&gt;Consider the following scenario:&lt;/p&gt;  &lt;p&gt;You have 15 Web Servers – each serves as a node of SOAP Web Service.   &lt;br /&gt;All services are behind a Load Balancer.&lt;/p&gt;  &lt;p&gt;All work ok.&lt;/p&gt;  &lt;p&gt;Suddenly your monitor shows no external request successfully served.   &lt;br /&gt;Ok, not all. just 99% fails…&lt;/p&gt;  &lt;p&gt;You are checking the status of the nodes in the load balancer’s pool – All green.   &lt;br /&gt;You are checking 4-5 instances by calling them directly (not via the load balancer) – All good.&lt;/p&gt;  &lt;p&gt;How could it be?&lt;/p&gt;  &lt;p&gt;Easily:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The selected load balancing algorithm was “&lt;strong&gt;Least Connections&lt;/strong&gt;” – which means the balancer select to redirect a coming request to the node which has the smallest number of open connections.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;The &lt;strong&gt;Health check&lt;/strong&gt; which decides whether or not an instance is “alive” was simple HTTP GET which return true for any HTTP response (as long there is a response on port 80).      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;One&lt;/strong&gt; of the 15 instances was suffering from insufficient resources – which caused it to fail for any request it got.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now comes the interesting part:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The instance which failed for each request – did it &lt;strong&gt;real fast&lt;/strong&gt;…      &lt;br /&gt;The other instances were responding a lot slower (they actually done some work).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The result was that the Load Balancer saw one instance which serves very fast – so almost all the requests finished being redirected to the fault instance – hence – all failed.   &lt;br /&gt;This was the problem.&lt;/p&gt;  &lt;p&gt;What to do to solve the issue?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Immediate solution&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;identify the fault instance (by querying all instances, one by one) – and disable it.   &lt;br /&gt;Automatically the Balancer return to distribute the load between all the valid nodes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Real Solution&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;Create a good Health Check.&lt;/p&gt;  &lt;p&gt;In our case – we added an aspx file which run the business logic of the request and return “OK” as the output if it succeed. And this page and&amp;#160; its result was the new health check.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;Make sure your health check actually check the specific functionality you except to get from the nodes.   &lt;br /&gt;This way you promise your Load Balancer will not send requests to faulty nodes, especially not too quick ones.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-3346438560823791930?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/3346438560823791930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=3346438560823791930' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3346438560823791930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3346438560823791930'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2011/01/why-good-health-check-is-so-important.html' title='Why a good Health Check is so important in your Load Balancer'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-4138753615876767666</id><published>2010-12-13T16:08:00.006+02:00</published><updated>2010-12-13T17:57:09.029+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hotels'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>iPhone Travel application - Booking Hotels Online</title><content type='html'>The company I work for has just released a new iPhone application for booking hotels online:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://itunes.apple.com/us/app/eztravel/id407058430?mt=8&amp;amp;uo=4"&gt;EZ Travel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feel free to send me your comments, ideas etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-4138753615876767666?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://itunes.apple.com/us/app/eztravel/id407058430?mt=8&amp;uo=4' title='iPhone Travel application - Booking Hotels Online'/><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/4138753615876767666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=4138753615876767666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/4138753615876767666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/4138753615876767666'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2010/12/iphone-travel-application-booking.html' title='iPhone Travel application - Booking Hotels Online'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6957969050510941079</id><published>2010-05-13T09:11:00.003+03:00</published><updated>2010-05-13T09:29:21.291+03:00</updated><title type='text'>Curetracks website</title><content type='html'>CureTracks is a non-profit global collaborative project - which aims very high: finding improved pathway for curing Cancer.&lt;br /&gt;&lt;br /&gt;The idea is smart - collect thousands samples of Cancer cure, investigate and rank them.&lt;br /&gt;This way this project may be able to identify non-conventional methods which medicine has ignored.&lt;br /&gt;&lt;br /&gt;Your help is needed!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.curetracks.org/"&gt;CureTracks Website&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please share this site with your friends.&lt;br /&gt;This way the project will have more cases of Cancer cure to investigate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-6957969050510941079?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.curetracks.org' title='Curetracks website'/><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6957969050510941079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6957969050510941079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6957969050510941079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6957969050510941079'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2010/05/curetracks-website.html' title='Curetracks website'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-1867594536051102162</id><published>2010-03-12T00:39:00.001+02:00</published><updated>2010-03-14T04:15:01.331+02:00</updated><title type='text'>TFS 2008 –&gt; TFS 2010 upgrade</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="611"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;waiting for last developers to check in their code.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:05 &lt;/td&gt;        &lt;td valign="top" width="525"&gt;R&amp;amp;D manager sends “Good luck”&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:15 &lt;/td&gt;        &lt;td valign="top" width="525"&gt;Still waiting&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:20&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Last check in&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:25&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Waiting for last build to complete&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Get latest sources for backup&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:45&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Shutdown IIS, SharePoint and Reporting&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:45&lt;/td&gt;        &lt;td valign="top" width="525"&gt;checking no connection to DBs&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;18:55&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Running backup task on DBs&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;19:27 &lt;/td&gt;        &lt;td valign="top" width="525"&gt;Copying DB backup files to another machine (to be on the safe side)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;19:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;still copying latest sources to another computer&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;20:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Ghost backup&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;20:18&lt;/td&gt;        &lt;td valign="top" width="525"&gt; Detaching all DBs&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;20:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Trying to boot from Win 2008 R2 installation disk.         &lt;br /&gt;The server doesn’t recognize the DVD. &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;20:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Trying to connect USB DVD… same problem.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;21:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Trying to use Network Deployment&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;21:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;We get the OS task sequence on the server – but it doesn’t work&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;22:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;We try to fix the problem by recreating the task sequence         &lt;br /&gt;but now we don’t see it at all&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;22:05&lt;/td&gt;        &lt;td valign="top" width="525"&gt;One of us driving home to bring IDE to USB cables to connect a standard DVD Drive&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;22:35&lt;/td&gt;        &lt;td valign="top" width="525"&gt;He is back – it seems to work         &lt;br /&gt;After few minutes – the cables stop to response…&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;22:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;We decide to limit ourselves till 00:00&amp;#160; - then switch to VM&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;22:50&lt;/td&gt;        &lt;td valign="top" width="525"&gt;I drive home and bring my USB DVD Drive         &lt;br /&gt;It works!&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;23:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Windows 2008 R2 doesn’t have drivers to Intel 7320 RAID controller         &lt;br /&gt;trying to find drivers&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;23:10&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Searching for a floppy diskette (and a computer with floppy drive)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;23:20&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Drivers don’t fit&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;23:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Searching…&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;23:55&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Finding the correct drivers (64 bit)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;RAID recognized!&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:03&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Error 80300001 – can’t install – we are in panic&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:05&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Thanks &lt;a title="http://jbenisek.wordpress.com/2009/06/04/windows-7-beta-rc-rtm-0x80300001/" href="http://jbenisek.wordpress.com/2009/06/04/windows-7-beta-rc-rtm-0x80300001/"&gt;Don't Panic&lt;/a&gt; blog for telling us we need to return the installation media back…&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:10&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Error 80070017 – burning another DVD.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:25&lt;/td&gt;        &lt;td valign="top" width="525"&gt;First machine connected to the domain (Data Layer)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:35&lt;/td&gt;        &lt;td valign="top" width="525"&gt;starting to Install windows updates&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:42&lt;/td&gt;        &lt;td valign="top" width="525"&gt;First restart of TSDB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:49&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Preparing To Configure Windows. Please Do Not Turn Off Your Computer…         &lt;br /&gt;By some blogs – this can take hours…&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;01:43&lt;/td&gt;        &lt;td valign="top" width="525"&gt;TSDB restarted (Only ~1 hour)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;01:50&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing .Net 3.5 on TSDB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;01:53&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Starting SQL 2008 installation&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;02:11&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing IIS on Foundation (Application Tier)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;02:16&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing SQL 2008 SP1 on TSDB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;02:17&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing .Net 3.5 on Foundation&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;02:25&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing SQL 2008 on Foundation&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;02:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Problems with Permissions on drive D&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;03:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Issue solved by giving the permissions again on D root cascading.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;03:05&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Tea break&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;03:18&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Finish configure Reporting Service (with new DB. old one renamed)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;03:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing SharePoint Services and configure&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;04:55&lt;/td&gt;        &lt;td valign="top" width="525"&gt;After wasting 1.5 hours on permissions issue – finished to attach DBs &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;05:05&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing VS 2008 on Foundation&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;05:10&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Configure SharePoint website&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;05:20&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Restoring old Content DB into the newly created SharePoint site&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;05:45&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Finishing installation of VS 2008 (with all editions)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;05:50&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Installing VS 2010 on Foundation&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;06:13&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Starting TFS 2010 installation&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;06:23&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Configuration tool start to run&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;06:28&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Configuration on step 96 (Version Control)         &lt;br /&gt;It should take some hours.          &lt;br /&gt;So we go to sleep.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;10:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Step 146…&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;12:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;TFS Installation completed successfully!!!         &lt;br /&gt;more configurations will be made later.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;13:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Our DBA crated backup task – and&amp;#160; ran it&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;13:52&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Backup completed&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;14:46&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Finished to switch folders to branches &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;16:27&lt;/td&gt;        &lt;td valign="top" width="525"&gt;VS 2010 installed on Build machine&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;16:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Proxy server (Beta) configured to work with the upgraded instance&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;16:42&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Team Build installed&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;   &lt;br /&gt;To be continued after Shabbat…&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="611"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="84"&gt;19:20&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Trying to run build         &lt;br /&gt;It failed because of workspace problem          &lt;br /&gt;Removing workspaces and try again&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;19:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Build failed because of ResGen bug of long command lines.         &lt;br /&gt;known issue – will be solved by removing all not needed resx files.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;20:50&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Build still fails because workspace still connected to old URL.         &lt;br /&gt;Need to install compatible Team Explorer for VS 2008&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;21:11&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Build passed!&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;22:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Important build passed (after switching TF path in environment variables) &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;22:56&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Configured our internal extension web service for TFS&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;23:08&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Working Items customized event works&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;00:40&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Timesheet implementation (in TFS WorkItems) works as well&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;01:00&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Diff build doesn’t work correctly&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;01:11&lt;/td&gt;        &lt;td valign="top" width="525"&gt;new WIs and Categories Imported&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;02:30&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Diff build still do make problems:         &lt;br /&gt;the order of the build is incorrect, and the incremental flag is ignored.          &lt;br /&gt;Need to see if the diff will overcome this or not&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;03:45&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Diff still a problem – will be left for another day&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="84"&gt;04:07&lt;/td&gt;        &lt;td valign="top" width="525"&gt;Sending mail to all users&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-1867594536051102162?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/1867594536051102162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=1867594536051102162' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1867594536051102162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1867594536051102162'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2010/03/tfs-2008-tfs-2010-upgrade.html' title='TFS 2008 –&amp;gt; TFS 2010 upgrade'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-8225488919203234114</id><published>2010-01-11T23:34:00.002+02:00</published><updated>2010-01-11T23:42:30.554+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skype'/><title type='text'>Trying to leave Skype conversation…</title><content type='html'>&lt;p&gt;[23:20:10] X: Do you know you can leave a conversation? Go to -&amp;gt; Conversation (in the menu)--&amp;gt; Leave Conversation...&lt;br /&gt;[23:20:17] *** X has left ***&lt;br /&gt;[23:20:54] *** Y added X***&lt;br /&gt;[23:20:56] Y: do you know we can add you back?&lt;br /&gt;[23:21:16] Z: lol&lt;br /&gt;[23:22:25] X: Do you know I can close my Skype?&lt;br /&gt;[23:22:50] Y: lol&lt;/p&gt;&lt;p&gt;p.s. you can also write /leave in the conversation - which will cause you to leave too.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-8225488919203234114?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/8225488919203234114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=8225488919203234114' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8225488919203234114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8225488919203234114'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2010/01/trying-to-leave-skype-conversation.html' title='Trying to leave Skype conversation…'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-2224947229340678409</id><published>2009-12-05T20:24:00.001+02:00</published><updated>2009-12-05T20:24:09.172+02:00</updated><title type='text'>HTTP Error 504, sc-win32-status 64, Alteon and the new employee’s phone</title><content type='html'>&lt;p&gt;It started in the morning – in our QA environment.&lt;/p&gt;  &lt;p&gt;Our topology (simplified – there are lots more connected to the LAN switch in the middle):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_I6ltayRteS4/SxqlK8vWksI/AAAAAAAAA2E/f_ZPhfVgVIo/s1600-h/Network1%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Network1" border="0" alt="Network1" src="http://lh5.ggpht.com/_I6ltayRteS4/SxqlNECmTMI/AAAAAAAAA2I/LkvAdQt-GQU/Network1_thumb%5B1%5D.jpg?imgmax=800" width="535" height="370" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The QA engineer is trying to test web application (installed both on IIS server 1 &amp;amp; IIS Server2) via our a load balancer (Alteon in our case).&lt;/p&gt;  &lt;p&gt;Yesterday, everything worked fine.   &lt;br /&gt;Today, instead of getting the homepage of the web application, we got HTTP error 504.&lt;/p&gt;  &lt;p&gt;Quick look at the &lt;a title="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes" href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes" target="_blank"&gt;List of HTTP status codes&lt;/a&gt; in Wikipedia:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;dt&gt;504 Gateway Timeout - The server was acting as a gateway or proxy and did not receive a timely request from the downstream server.&lt;/dt&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now in English:    &lt;br /&gt;The Alteon, which works as a gateway between the user and the 2 web applications says it got no response from the IIS server (either 1 or 2 – or both).&lt;/p&gt;  &lt;p&gt;a quick check of the web application – by approaching their IPs directly – showed no problem at all.   &lt;br /&gt;They were responsive as usual.&lt;/p&gt;  &lt;p&gt;We have asked whether there were any network changes lately, but nobody couldn’t remember any change at all.&lt;/p&gt;  &lt;p&gt;A deeper look at the IIS logs showed a request from the Alteon did accepted.   &lt;br /&gt;The HTTP response was 200 – which was strange – as the Alteon kept telling it got no response.&lt;/p&gt;  &lt;p&gt;Then we have noticed, that also the HTTP status is 200, the &lt;strong&gt;&lt;font size="4"&gt;sc-win32-status&lt;/font&gt;&lt;/strong&gt; was &lt;strong&gt;&lt;font size="4"&gt;64&lt;/font&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;We already familiar with sc-win32-status 64. but if you don’t:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The specified network name is no longer available&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Which means that IIS got the request submit the response successfully to the network – only to find out it can’t reach the client who sent the request.&lt;/p&gt;  &lt;p&gt;In our case, this error says the Alteon can see and send requests to the IIS servers, but the responses can’t reach the Alteon back.&lt;/p&gt;  &lt;p&gt;So we changed the IP address of the Alteon Load Balancer – and – Hooray!!! it worked.&lt;/p&gt;  &lt;p&gt;We re asked about any change in the network, this time we have specified the IP number…   &lt;br /&gt;And this was the real topology:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_I6ltayRteS4/SxqlPJvtrfI/AAAAAAAAA2M/nH5_jdBHA3E/s1600-h/Network2%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Network2" border="0" alt="Network2" src="http://lh5.ggpht.com/_I6ltayRteS4/SxqlRpO8hpI/AAAAAAAAA2Q/P1PRhnDgqUA/Network2_thumb%5B3%5D.jpg?imgmax=800" width="525" height="398" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This morning a new employee join the company, and we have IP phones.   &lt;br /&gt;The IP Address which was given to the new employee’s IP phone was x.x.x.56…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-2224947229340678409?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/2224947229340678409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=2224947229340678409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2224947229340678409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2224947229340678409'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/12/http-error-504-sc-win32-status-64.html' title='HTTP Error 504, sc-win32-status 64, Alteon and the new employee’s phone'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_I6ltayRteS4/SxqlNECmTMI/AAAAAAAAA2I/LkvAdQt-GQU/s72-c/Network1_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-841257359786509960</id><published>2009-11-16T00:33:00.001+02:00</published><updated>2009-11-16T00:33:19.918+02:00</updated><title type='text'>WCF middle tier client – ClientBase proxy (svcutil) vs. ChannelFactory</title><content type='html'>&lt;p&gt;After running with WCF based SOA in our production for a year or so, we have been working on our next major version. We have added some new services lately.&lt;/p&gt;  &lt;p&gt;in the load test, we encounter the following error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;After some investigation (See &lt;a title="http://blogs.msdn.com/dgorti/archive/2005/09/18/470766.aspx" href="http://blogs.msdn.com/dgorti/archive/2005/09/18/470766.aspx" target="_blank"&gt;Durgaprasad Gorti's WebLog&lt;/a&gt;) we understood that as we load huge amount of request on our middle tier application (actually ASP.NET web service) it send lots of requests to other services in our distributed system. We have used &lt;a title="http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx" href="http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx" target="_blank"&gt;TCPView&lt;/a&gt; to see what’s going on with the ports – and saw that each request have opened a new client port – which was never reused until the OS released it 4 minutes later.&lt;/p&gt;  &lt;p&gt;We have changed the TCPTimedWaitDelay value in the registry to 30 seconds – and it solve the problem.   &lt;br /&gt;we decided, however, that this is not a real solution – just a workaround. the real problem is the no reuse of ports – and we need to solve it –as we don’t know when we will hit the wall next time.&lt;/p&gt;  &lt;p&gt;Our code used Client Proxy generated by Svcutil.exe, and we have created a new client each time a request was needed:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;System.ServiceModel.ClientBase&amp;lt;T&amp;gt; clientProxy = Activator.CreateInstance(proxyType, new object[] { endpoint.Binding, endpoint.Address }) as System.ServiceModel.ClientBase&amp;lt;T&amp;gt;;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, one of our developers said that in .NET 3.5 (actually .NET 3.0 SP1) Microsoft has added some kind of caching which should have solved this issue.&lt;/p&gt;  &lt;p&gt;As we were running on .NET 3.5 SP1 environment – this clearly hasn’t solved the problem. So we went to look for the reason. It hasn’t took long to find &lt;a href="http://blogs.msdn.com/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx" target="_blank"&gt;Wenlong Dong's Blog&lt;/a&gt; about “Performance Improvement for WCF Client Proxy Creation in .NET 3.5 and Best Practices”.&lt;/p&gt;  &lt;p&gt;It was very clear from his blog, that we fail to use the built in caching because we use a constructor with &lt;em&gt;Binding&lt;/em&gt; as a parameter. Actually, even if weren’t used a constructor that disable the caching – it was disabled because we accessed the ChannelFactory property too:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;clientProxy.ChannelFactory.Endpoint.Behaviors.Add(epb);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We wanted to fix this by calling a different constructor and by adding the behavior to our configuration, but we couldn’t, as our configuration isn’t based on config file, but is read from a central DB – and there is no constructor that doesn’t read configuration from config files (there should be such constructor in 4.0 – See &lt;a href="http://msdn.microsoft.com/en-us/library/dd449131(VS.100).aspx" target="_blank"&gt;this new constructor&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;You can work around this in various ways, like &lt;a href="http://weblogs.asp.net/cibrax/archive/2007/10/19/loading-the-wcf-configuration-from-different-files-on-the-client-side.aspx" target="_blank"&gt;this one&lt;/a&gt; by Pablo M. Cibraro.    &lt;br /&gt;Read also in great details how the client actually work – at &lt;a title="http://yedafeng.blogspot.com/2008/11/what-wcf-client-does.html" href="http://yedafeng.blogspot.com/2008/11/what-wcf-client-does.html" target="_blank"&gt;What WCF client does&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Anyway, we have decide to different direction.&lt;/p&gt;  &lt;p&gt;If you read Microsoft’s &lt;a href="http://msdn.microsoft.com/en-us/library/aa738757.aspx" target="_blank"&gt;Middle-Tier Client Applications&lt;/a&gt;, you’ll see 2 options:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Cache the WCF client object and reuse it for subsequent calls where possible.&lt;/li&gt;    &lt;li&gt;Create a &lt;strong&gt;ChannelFactory&lt;/strong&gt; object and then use that object to create new WCF client channel objects for each call.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Clearly, the first option… is not an option, as it talks about &lt;strong&gt;subsequent&lt;/strong&gt; calls.    &lt;br /&gt;We need robust multi threaded middle tier.&lt;/p&gt;  &lt;p&gt;So we were left with only one valid solution – to use &lt;strong&gt;ChannelFactory &lt;/strong&gt;instead of the &lt;strong&gt;Client proxy&lt;/strong&gt;, and to cache it (actually redoing the caching mechanism Microsoft added for the ClientBase).    &lt;br /&gt;We can succeed caching in the place the framework fails, because we allow ourselves to take some assumptions regarding the reuse of the same ChannelFactory.&lt;/p&gt;  &lt;p&gt;We use the cached factory (if not exist – we create one) to return a Typed channel by calling its CreateChannel(). This open a new socket for each request, unless already used socket were closed and available for reuse (You should of course close each created channel, by calling its Close() method). &lt;/p&gt;  &lt;p&gt;This is what we wanted.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The load test finished successfully.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Thanks Daniel, Michael &amp;amp; Eyal.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-841257359786509960?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/841257359786509960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=841257359786509960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/841257359786509960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/841257359786509960'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/11/wcf-middle-tier-client-clientbase-proxy.html' title='WCF middle tier client – ClientBase proxy (svcutil) vs. ChannelFactory'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-3259588852063043225</id><published>2009-10-29T12:43:00.004+02:00</published><updated>2009-10-29T12:59:33.641+02:00</updated><title type='text'>Convert folder to branch failure - Deleted folder</title><content type='html'>When you try to conevert a folder into a branch in TFS 2010, you may fail if you already have a branch somewhere in its sub folders.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/_I6ltayRteS4/SulzeXrcNcI/AAAAAAAAA1Q/WB5dEa6RntQ/s1600-h/folder_to_branch.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5397972593969739202" border="0" alt="" src="http://1.bp.blogspot.com/_I6ltayRteS4/SulzeXrcNcI/AAAAAAAAA1Q/WB5dEa6RntQ/s320/folder_to_branch.png" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The error is TF203028: You cannot create a branch at $serverPath because a branch already exists at $SubFolderServerPath.&lt;/p&gt;&lt;p&gt;You can fix this by converting this sub folder back to folder (as you can't have a branch inside a branch)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;You might however don't see any such branch folder.&lt;br /&gt;In this case - just set Visual Studio to show deleted items in Team Explorer.&lt;br /&gt;Then you will be able to convert this sub folder into a folder - which will fix the problem&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-3259588852063043225?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/3259588852063043225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=3259588852063043225' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3259588852063043225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3259588852063043225'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/10/convert-folder-to-branch-failure.html' title='Convert folder to branch failure - Deleted folder'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_I6ltayRteS4/SulzeXrcNcI/AAAAAAAAA1Q/WB5dEa6RntQ/s72-c/folder_to_branch.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-7906763020229993176</id><published>2009-10-29T01:22:00.001+02:00</published><updated>2009-10-29T01:22:16.034+02:00</updated><title type='text'>Bypass Gated Check in from TF Checkin Command Line (TFS 2010)</title><content type='html'>&lt;p&gt;In Team System 2010, Microsoft added long wanted feature – Gated Check in.&lt;/p&gt;  &lt;p&gt;This feature lets you promise you won’t break the build by your check in, by converting the check in into a shelveset – running a build with your changes, and only if the build succeed – it check in the code on behalf of you.&lt;/p&gt;  &lt;p&gt;It gives you of course the option to bypass this behavior (if you have the required permission).&lt;/p&gt;  &lt;p&gt;My problem started in the fact that during the build process itself – we perform a check in…    &lt;br /&gt;So this check in fail with the message (and exited with code 1):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Your check-in has been placed into shelveset Gated_XXXXXXX;Domain\User and submitted for validation by build definition \Project-Name\Build-Definition.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I have looked at MSDN for &lt;em&gt;TF Checkin &lt;/em&gt;flag that will replace the GUI option to bypass the gated build:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_I6ltayRteS4/SujSErDw6JI/AAAAAAAAA08/nC5H58CnvSw/s1600-h/msdn%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="msdn" border="0" alt="msdn" src="http://lh6.ggpht.com/_I6ltayRteS4/SujSF6J-9nI/AAAAAAAAA1A/GXkbQAgGkpU/msdn_thumb%5B2%5D.jpg?imgmax=800" width="534" height="254" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;But as you can see, no new option was added.&lt;/p&gt;  &lt;p&gt;Luckily, I have run also the TF checkin /? command:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_I6ltayRteS4/SujSHKjl7QI/AAAAAAAAA1E/ahhcfEXRyLk/s1600-h/Command%20Line%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Command Line" border="0" alt="Command Line" src="http://lh5.ggpht.com/_I6ltayRteS4/SujSJkOqpvI/AAAAAAAAA1I/-z4GMykzYsQ/Command%20Line_thumb%5B1%5D.jpg?imgmax=800" width="549" height="171" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And as you can see, there are few new options here:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;shelveset &lt;/li&gt;    &lt;li&gt;bypass &lt;/li&gt;    &lt;li&gt;login &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Those 3 new options came to support this “Gated Check in” feature.    &lt;br /&gt;I was actually looking for the &lt;strong&gt;&lt;em&gt;/bypass&lt;/em&gt;&lt;/strong&gt; option – which, what a surprise, bypass this feature.&lt;/p&gt;  &lt;p&gt;I hope that &lt;a href="http://msdn.microsoft.com/en-us/library/c327ca1z%28VS.100%29.aspx" target="_blank"&gt;this MSDN document&lt;/a&gt; will be updated soon.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-7906763020229993176?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/7906763020229993176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=7906763020229993176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7906763020229993176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7906763020229993176'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/10/bypass-gated-check-in-from-tf-checkin.html' title='Bypass Gated Check in from TF Checkin Command Line (TFS 2010)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_I6ltayRteS4/SujSF6J-9nI/AAAAAAAAA1A/GXkbQAgGkpU/s72-c/msdn_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-5940804299190937455</id><published>2009-10-26T00:47:00.001+02:00</published><updated>2009-10-26T00:47:33.003+02:00</updated><title type='text'>Upgrade from TFS 2008 to TFS 2010 Beta 2 – long wait (literally)</title><content type='html'>&lt;p&gt;Yes! We have finally got the TFS 2010 Beta 2!!!&lt;/p&gt;  &lt;p&gt;I have restored our production Team Foundation Server Databases into a clean computer.   &lt;br /&gt;The setup was very easy – just selecting Upgrade flow, and filling some details.&lt;/p&gt;  &lt;p&gt;Then it arrived to the most critical part – upgrading the DBs themselves.&lt;/p&gt;  &lt;h2&gt;It took almost 6 hours…&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_I6ltayRteS4/SuTVc-v07qI/AAAAAAAAA0s/mjYDSqD8hG4/s1600-h/TFS_Upgrade_Image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TFS_Upgrade_Image" border="0" alt="TFS_Upgrade_Image" src="http://lh6.ggpht.com/_I6ltayRteS4/SuTVd5QOvRI/AAAAAAAAA0w/xHbZ85r4dBQ/TFS_Upgrade_Image_thumb%5B1%5D.png?imgmax=800" width="456" height="325" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;but… it finished successfully!&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_I6ltayRteS4/SuTVfhIRiqI/AAAAAAAAA00/BGNqzT2XMLc/s1600-h/TFS_Upgrade_Image_-_success%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="TFS_Upgrade_Image_-_success" border="0" alt="TFS_Upgrade_Image_-_success" src="http://lh4.ggpht.com/_I6ltayRteS4/SuTVg5Wop-I/AAAAAAAAA04/M7YJJ71YaxA/TFS_Upgrade_Image_-_success_thumb%5B1%5D.png?imgmax=800" width="465" height="337" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; So the proof of concept for upgrading has proofed the concept!&lt;/p&gt;  &lt;p&gt;Now of course, we still need to see how to upgrade our customized CMMI process – to have all the new staff Microsoft put in the new one. I guess we will use &lt;a href="http://blogs.msdn.com/allclark/default.aspx" target="_blank"&gt;Allen Clark&lt;/a&gt;’s &lt;a href="http://blogs.msdn.com/allclark/archive/2009/05/15/enabling-new-features-of-visual-studio-team-system-2010-beta-1-in-upgraded-projects.aspx" target="_blank"&gt;Enabling New Features of Visual Studio Team System 2010 Beta 1 in Upgraded Team Projects&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/10575523-5940804299190937455?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/5940804299190937455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=5940804299190937455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5940804299190937455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5940804299190937455'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/10/upgrade-from-tfs-2008-to-tfs-2010-beta.html' title='Upgrade from TFS 2008 to TFS 2010 Beta 2 – long wait (literally)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_I6ltayRteS4/SuTVd5QOvRI/AAAAAAAAA0w/xHbZ85r4dBQ/s72-c/TFS_Upgrade_Image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-287696004235371148</id><published>2009-05-01T15:44:00.001+03:00</published><updated>2009-05-01T15:44:49.170+03:00</updated><title type='text'>Real Incremental Build - Part 4 – Compare Assemblies using ILDASM</title><content type='html'>&lt;p&gt;&lt;a href="http://readcommit.blogspot.com/2009/04/real-incremental-build-part-1.html"&gt;Part 1&lt;/a&gt; – for motivation.     &lt;br /&gt;&lt;a href="http://readcommit.blogspot.com/2009/04/real-incremental-build-part-2-getting.html"&gt;Part 2&lt;/a&gt; – Plan for getting only new/updated files.     &lt;br /&gt;&lt;a href="http://readcommit.blogspot.com/2009/05/real-incremental-build-part-3-out-of.html"&gt;Part 3&lt;/a&gt; – Out of the box Incremental build with Team Build.&lt;/p&gt;  &lt;p&gt;In last part we succeed getting only new/updated files except binaries which were regenerated also no actual change was made to their code – because some reference in their dependency tree was changed.&lt;/p&gt;  &lt;p&gt;We want only real updated assemblies.&lt;/p&gt;  &lt;p&gt;Again, the trivial solution doesn’t work:&lt;/p&gt;  &lt;p&gt;If you try to compare each assembly with its equivalent in the original build you’ll find that each time you build a project, the assembly is different! (even if no code was changed)&lt;/p&gt;  &lt;p&gt;Here comes &lt;a href="http://msdn.microsoft.com/en-us/library/f7dy01k1(VS.80).aspx"&gt;ILDASM (MSIL Disassembler)&lt;/a&gt; to the rescue.&lt;/p&gt;  &lt;p&gt;This tool takes and assembly (either DLL or EXE) and can create a text file containing all structure and actual IL code of the file.&lt;/p&gt;  &lt;p&gt;If you compare 2 disassembled files which should be identical you’ll probably see the following different lines:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Time-date stamp&lt;/strong&gt;      &lt;br /&gt;This parameter is regenerated each time – so it will be different every time.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;MVID       &lt;br /&gt;&lt;/strong&gt;This is a generated GUID – Regenerated each time.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;.ver       &lt;br /&gt;&lt;/strong&gt;Lines with .ver arr declarations of the specific version of referenced assemblies.      &lt;br /&gt;Those lines would be changed if some referenced assemblies has changed their versioning.      &lt;br /&gt;This happens due to the use of * in the AssemblyVersion attribute in AssemblyInfo.cs      &lt;br /&gt;You need to decide whether this is a breaking change from your point of view – or not.      &lt;br /&gt;In my case – we don’t work with Signed DLLs, and I don’t mind what is the specific version.&amp;#160; &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;PrivateImplementationDetails     &lt;br /&gt;      &lt;br /&gt;I don’t know for sure what that means, but from my experience it changed without any real change happened.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;WARNING:       &lt;br /&gt;        &lt;br /&gt;&lt;/strong&gt;Those lines happen to be changed.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So here the actual process:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You iterate through all the remaining files.     &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;If the file’s extension is either .dll or .exe – you run ILDASM on this file, . Those are the parameters I used, but to tell the truth – I haven’t investigate them much:     &lt;br /&gt;      &lt;br /&gt;ildasm.exe&amp;#160; assemblyFileName /OUT=out.txt&amp;#160; /ALL /RAWEH&amp;#160; /SOURCE /LINENUM /CAVERBAL /NOBAR /UTF8 /TYPELIST      &lt;br /&gt;      &lt;br /&gt;Run it second time for the original assembly file too.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Compare the 2 output files (I just iterate through the lines in both files) and ignore the changes which have been described above. (Time-date stamp, MVID, etc.)     &lt;br /&gt;      &lt;br /&gt;I would jump to the next line which doesn’t contain “WARNING:” in case I meet such a line.      &lt;br /&gt;This is because I have seen cases were only one of the assemblies contained such a line, and then it will break you comparison if you not jump to the next valid line.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;If the files are equal – delete the assembly from the drop location.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The result of this procedure is: &lt;strong&gt; Diff package containing only new/updated files&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Easy it was, wasn’t it?   &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-287696004235371148?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/287696004235371148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=287696004235371148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/287696004235371148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/287696004235371148'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/05/real-incremental-build-part-4-compare.html' title='Real Incremental Build - Part 4 – Compare Assemblies using ILDASM'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-8573879390191144962</id><published>2009-05-01T00:34:00.001+03:00</published><updated>2009-05-01T15:46:35.152+03:00</updated><title type='text'>Real Incremental Build - Part 3 – Out of the box with Team Build</title><content type='html'>&lt;p&gt;See &lt;a href="http://readcommit.blogspot.com/2009/04/real-incremental-build-part-1.html"&gt;Part 1&lt;/a&gt; – for motivation.     &lt;br /&gt;See &lt;a href="http://readcommit.blogspot.com/2009/04/real-incremental-build-part-2-getting.html"&gt;Part 2&lt;/a&gt; – Plan for getting only new/updated files.&lt;/p&gt;  &lt;p&gt;Ok, so how do we actually perform our plan?&lt;/p&gt;  &lt;p&gt;We will write an application which does the following&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Run Build with the original source&lt;/strong&gt;:       &lt;br /&gt;      &lt;br /&gt;See &lt;a href="http://readcommit.blogspot.com/2008/06/building-specific-version-with-team.html"&gt;Building a Specific Version with Team Build 2008&lt;/a&gt;.       &lt;br /&gt;to put here the bottom line – add the following parameter to the command-line arguments:       &lt;br /&gt;&lt;strong&gt;/p:GetVersion=version&lt;/strong&gt; (where version can be C### – which means – Changeset number ###)       &lt;br /&gt;      &lt;br /&gt;for doing this programmatically, use &lt;em&gt;&lt;strong&gt;IBuildServer.GetBuildDefinition(teamProject, name)&lt;/strong&gt;&amp;#160;&lt;/em&gt;and call &lt;em&gt;&lt;strong&gt;CreateBuildRequest.          &lt;br /&gt;          &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;The following line sets the command line to get the version you want:       &lt;br /&gt;BuildRequest.CommandLineArguments = &lt;span style="color: #a31515"&gt;&amp;quot;/p:GetVersion=&amp;quot; &lt;/span&gt;+ OriginalVersionSpec;       &lt;br /&gt;      &lt;br /&gt;Call QueueBuild(BuildRequest) to actually start the build.&amp;#160; &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wait till the build ends:&lt;/strong&gt;       &lt;br /&gt;      &lt;br /&gt;You can create a Timer and check the build status each time - &lt;strong&gt;&lt;em&gt;QueuedBuild.Status          &lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;You’ll need to refresh the build object – using - &lt;strong&gt;&lt;em&gt;QueuedBuild.Refresh() &lt;/em&gt;&lt;/strong&gt;before.       &lt;br /&gt;Save the finish time for later use.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Get changes only:        &lt;br /&gt;        &lt;br /&gt;&lt;/strong&gt;This is the actual incremental build (all previous steps were preparations).       &lt;br /&gt;You do this the same way like the build before (with the &lt;span style="color: #a31515"&gt;/p:GetVersion&lt;/span&gt;).       &lt;br /&gt;But this time, you add another parameter: &lt;strong&gt;&lt;em&gt;IncrementalBuild&lt;/em&gt;&lt;/strong&gt;       &lt;br /&gt;      &lt;br /&gt;The full parameter string will look like this: (see the semicolon separator)&amp;#160; &lt;br /&gt;      &lt;br /&gt;&amp;quot;/p:IncrementalBuild=true;GetVersion=&amp;quot; + CurrentVersionSpec       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Rebuild:        &lt;br /&gt;        &lt;br /&gt;&lt;/strong&gt;Queue this build as well, and again wait for it to finish.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Delete old files:&lt;/strong&gt;       &lt;br /&gt;      &lt;br /&gt;Iterate through all files recursively in the drop location of the incremental build.       &lt;br /&gt;Delete all files with &lt;em&gt;&lt;strong&gt;LastWriteTime&lt;/strong&gt;&lt;/em&gt; older than the finish time of the original build. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So now it seems we have what we wanted.&lt;/p&gt;  &lt;p&gt;In the Drop location of the incremental build – only newer files will remain.    &lt;br /&gt;All files which weren't changed (or executables which weren’t regenerated due to no code change) – were deleted – leaving new/updated files only.&lt;/p&gt;  &lt;p&gt;Or is it?&lt;/p&gt;  &lt;p&gt;If you’ll look at the results – you’ll see lots of binaries (DLLs and EXEs) which shouldn’t be there.    &lt;br /&gt;No code change was done in their projects.     &lt;br /&gt;So why are they here?&lt;/p&gt;  &lt;p&gt;Because at least one of their references assemblies has changed…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So we succeed partially&lt;/strong&gt;:     &lt;br /&gt;All file types except assemblies – we have updated files only.     &lt;br /&gt;Assemblies – we have all files which had a change somewhere in their dependency tree.&lt;/p&gt;  &lt;p&gt;Back to square one?&lt;/p&gt;  &lt;p&gt;Solution in &lt;a href="http://readcommit.blogspot.com/2009/05/real-incremental-build-part-4-compare.html"&gt;part 4...&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/10575523-8573879390191144962?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/8573879390191144962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=8573879390191144962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8573879390191144962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8573879390191144962'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/05/real-incremental-build-part-3-out-of.html' title='Real Incremental Build - Part 3 – Out of the box with Team Build'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-237837296273404533</id><published>2009-04-30T23:40:00.001+03:00</published><updated>2009-04-30T23:40:23.540+03:00</updated><title type='text'>Real Incremental Build - Part 2 – Getting only new/updated files</title><content type='html'>&lt;p&gt;&lt;a href="http://readcommit.blogspot.com/2009/04/real-incremental-build-part-1.html"&gt;see part 1 for motivation&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;So how do you prepare a package with only the new and updated files?   &lt;br /&gt; (whether those are binaries, images, aspx files, resource files, etc.)&lt;/p&gt;  &lt;p&gt;The simplistic answer would be to ask the developer which files he touched, and either take them themselves or their products (e.g. the assembly which was generated from the source file).&lt;/p&gt;  &lt;p&gt;However there could be lots of developers involved who changed multiple files each.   &lt;br /&gt;Try to keep a trace of all those files…&lt;/p&gt;  &lt;p&gt;You can use your source control to find all new and changes files, of course, but that still requires someone to sit and analyze which of them can be taken as is, and which of them generates changes in end products.&lt;/p&gt;  &lt;p&gt;The knowledge of what file update ends up in a new version of which dll or exe sits inside the project files. So you must use this knowledge automatically.&lt;/p&gt;  &lt;p&gt;Which means… &lt;strong&gt;Build.&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;But wouldn’t a build gives us the whole package again?   &lt;br /&gt;No. at least not if you use &lt;strong&gt;Incremental Build&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Remember when you change some code in visual studio after you already complied big solution?   &lt;br /&gt;the next build finishes faster.    &lt;br /&gt;Why? because it rebuild only those projects that have been changed.&lt;/p&gt;  &lt;p&gt;So let’s see how can we use it:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Build the original source (which already in use in production).&lt;/li&gt;    &lt;li&gt;Write down the build finish time.&lt;/li&gt;    &lt;li&gt;Get only the changes from source control (all changes from last original check in till last fix).&lt;/li&gt;    &lt;li&gt;Build again.&lt;/li&gt;    &lt;li&gt;Get only new files (newer then the original’s finish time) – or – delete all older files.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;How to do it technically?&lt;/p&gt;  &lt;p&gt;See part 3.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-237837296273404533?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/237837296273404533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=237837296273404533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/237837296273404533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/237837296273404533'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/04/real-incremental-build-part-2-getting.html' title='Real Incremental Build - Part 2 – Getting only new/updated files'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-577178786016308490</id><published>2009-04-30T22:48:00.001+03:00</published><updated>2009-04-30T23:41:18.603+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team System'/><category scheme='http://www.blogger.com/atom/ns#' term='Deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Ildasm'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Incremental Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Real Incremental Build - Part 1 – Motivation for small deployment packages</title><content type='html'>&lt;p&gt;You have deployed version x of your compiled application to your production environment.    &lt;br /&gt;Some bugs were resolved and you want to deploy a fix.&lt;/p&gt;  &lt;p&gt;You have 2 options:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Deploy a full updated build of the application. &lt;/li&gt;    &lt;li&gt;Deploy differential package only. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now, Option 1 will clearly work.    &lt;br /&gt;You run your build, take everything from the drop location, and deploy it.&lt;/p&gt;  &lt;p&gt;Pros:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You're sure that you won't missed anything. &lt;/li&gt;    &lt;li&gt;All files are compatible with each other. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cons:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The package will have big size (lots of MB – depends on your application size) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At first, the size of the patch looks unimportant.&lt;/p&gt;  &lt;p&gt;But if you take into account the time it will take to upload it to your production environment and distributed it between your hundreds of applications instances – this would be unwise not to consider this factor. Or if you let users to download this patch from your website – I guess you’ll want to minimize its size to save your bandwidth usage.&lt;/p&gt;  &lt;p&gt;on the next parts we will go from this globally described scenario into more detailed one – based on Microsoft TFS (Team foundation server) source control &amp;amp; Team Build. We will try to show how to create a delta package contains only the new and updated binaries and files. We will meet some implantation problems – and hopefully overcome them.&lt;/p&gt;  &lt;p&gt;See &lt;a href="http://readcommit.blogspot.com/2009/04/real-incremental-build-part-2-getting.html"&gt;part 2&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/10575523-577178786016308490?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/577178786016308490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=577178786016308490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/577178786016308490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/577178786016308490'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/04/real-incremental-build-part-1.html' title='Real Incremental Build - Part 1 – Motivation for small deployment packages'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-5062072603021800436</id><published>2009-04-21T09:02:00.001+03:00</published><updated>2009-04-22T08:49:39.009+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Hebrew'/><title type='text'>Tamar Yifrach – תמר יפרח - First Music Album</title><content type='html'>&lt;p&gt;My sis, Tamar Yifrach, has created a wonderful Folk/Pop/Jewish/Hebrew music album:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3595/3460493708_0156a9ae00.jpg" width="222" height="221" /&gt; &lt;/p&gt;  &lt;p&gt;The album name is: “&lt;strong&gt;תמיד היה מזה קצת בעולם&lt;/strong&gt;” or “&lt;strong&gt;There was always a bit from that in the world&lt;/strong&gt;”.&lt;/p&gt;  &lt;p&gt;You can listen to some tracks from the disc in &lt;a href="http://www.myspace.com/tamaryifrach"&gt;Tamar Yifrach on MySpace&lt;/a&gt;     &lt;br /&gt;And for the Hebrew readers – her name is תמר יפרח. &lt;/p&gt;  &lt;p&gt;Hope you’ll enjoy it.&lt;/p&gt;  &lt;p&gt;I did.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-5062072603021800436?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/5062072603021800436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=5062072603021800436' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5062072603021800436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5062072603021800436'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/04/my-sisters-first-music-album.html' title='Tamar Yifrach – תמר יפרח - First Music Album'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3595/3460493708_0156a9ae00_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-5011335919945260408</id><published>2009-01-09T01:49:00.001+02:00</published><updated>2009-01-09T01:50:24.086+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><category scheme='http://www.blogger.com/atom/ns#' term='Songsmith'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft Songsmith is fun (with some suggestions)</title><content type='html'>&lt;p&gt;I have download &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/songsmith/index.html" target="_blank"&gt;Microsoft Songsmith&lt;/a&gt; today.&lt;/p&gt;  &lt;p&gt;I guess most people begins their playing with this application by singing known songs, excepting it to perfectly redo the original music of their selected song.&lt;/p&gt;  &lt;p&gt;So either I'm a totally bad performer, or it just doesn’t work.&lt;/p&gt;  &lt;p&gt;the fun begins when you let yourself inventing songs with it.   &lt;br /&gt;The even greater fun is to do it together with someone!&lt;/p&gt;  &lt;p&gt;My suggested improvements:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Let the algorithm decide whether to put one or two chords in each bar separately (instead of setting it per the whole song)&lt;/li&gt;    &lt;li&gt;Let me change the “Happy” or “Jazzy” per section of the song.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hope you’ll enjoy it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-5011335919945260408?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/5011335919945260408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=5011335919945260408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5011335919945260408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5011335919945260408'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2009/01/microsoft-songsmith-is-fun-with-some.html' title='Microsoft Songsmith is fun (with some suggestions)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-7736824165309683397</id><published>2008-12-18T23:54:00.001+02:00</published><updated>2008-12-21T22:46:40.130+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Service Pack'/><category scheme='http://www.blogger.com/atom/ns#' term='MSIX'/><category scheme='http://www.blogger.com/atom/ns#' term='msp'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Reflector'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Family Update'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>.NET Framework 3.5 Family Update - My Peek inside the .NET 2 update</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;u&gt;UPDATE:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/959209"&gt;KB 959209&lt;/a&gt; has appeared! (was published on December 20, 2008).    &lt;br /&gt;This KB point you to 3 other KBs for the 3 parts of the Family Update:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/958481/"&gt;958481&lt;/a&gt; – .Net 2.0 SP2 update&lt;/li&gt;    &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/958483/"&gt;958483&lt;/a&gt; - .Net 3.0 SP2 update&lt;/li&gt;    &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/958484/"&gt;958484&lt;/a&gt; - .Net 3.5 SP1 update&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;(Those docs are very similar each to the other, telling about the same issues)   &lt;br /&gt;Better late than never.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;ORIGINAL POST:&lt;/u&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As I stated in my &lt;a href="http://readcommit.blogspot.com/2008/12/half-baked-download-page-net-framework.html" target="_blank"&gt;previous entry&lt;/a&gt;, Microsoft has uploaded this Family Update, with the usual missing of a description document what went into this update.&lt;/p&gt;  &lt;p&gt;The only thing they said was:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The Microsoft .NET Framework 3.5 Family Update provides compatibility roll-up updates for customer reported issues found after the release of Microsoft .NET Framework 3.5 SP1&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So I have decided to peek inside.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Notice&lt;/u&gt;&lt;/strong&gt;:     &lt;br /&gt;I don't take any responsibility on the following information. I might have done something totally wrong in the way I have extracted the update and got wrong info from within. You take all the risk on yourself if you use this info.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Steps&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;Now that we done with those legal issues, what I have done is extract the .msp file from within the the NDP20SP2-KB958481-x86.exe. &lt;/p&gt;  &lt;p&gt;Then, using &lt;a href="http://blogs.msdn.com/heaths/archive/2006/04/07/571138.aspx" target="_blank"&gt;MSIX tool&lt;/a&gt;, I have extract the files from the .msp file.&lt;/p&gt;  &lt;p&gt;Then, extract the patch.cab file.&lt;/p&gt;  &lt;p&gt;Next step was renaming the dlls I have found to have the correct extension (which was missing)&lt;/p&gt;  &lt;p&gt;Next, for each dll (only managed), using Reflector, disassemble and export the source files.    &lt;br /&gt;Doing the same last action to the original dlls from the .NET GAC.&lt;/p&gt;  &lt;p&gt;Using &lt;strong&gt;&lt;em&gt;Araxis Merge&lt;/em&gt;&lt;/strong&gt; to compare the source. &lt;/p&gt;  &lt;p&gt;Please remember that I have done the investigation &lt;strong&gt;only for the .NET 2.0 SP2 Family update&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Non managed dlls in the update&lt;/u&gt;&lt;/strong&gt;: (can't say what was changed there)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;aspnet_wp.exe &lt;/li&gt;    &lt;li&gt;mscordacwks.dll &lt;/li&gt;    &lt;li&gt;mscorjit_dll &lt;/li&gt;    &lt;li&gt;webengine.dll &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Managed dlls:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;mscorlib.dll &lt;/li&gt;    &lt;li&gt;System.Data.OracleClient &lt;/li&gt;    &lt;li&gt;System.Xml &lt;/li&gt;    &lt;li&gt;System.Web &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Main changes&lt;/strong&gt;&amp;#160;&lt;strong&gt;in those Managed dlls:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;(I will just write the changes in short, I don't have more info to share- this would required days of reading Microsoft's code).&lt;/p&gt;  &lt;p&gt;System.Web:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Better handling of IIS Rewrite Module in multiple classes(coockieless security, IIS7 worker request, HTML Form, Client Path) &lt;/li&gt;    &lt;li&gt;Process Custom Browser Files - ignores hidden files in the directory (at least this what it's look like) &lt;/li&gt;    &lt;li&gt;Something in state cache handling. &lt;/li&gt;    &lt;li&gt;Change in Sort entries in control builder. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;System.Xml&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;xml CanWrite check instead of GetSetMethod in one method. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;System.Data.OracleClient&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;RollbackDeadTransaction and some more Transactions code was added to a method . &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;mscorlib&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Handling Delegate &amp;amp; MulticastDelegate Combine null issue better &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;the Version was changed from 2.0.50727.3053 to 2.0.50727.3082.&lt;/p&gt;  &lt;p&gt;wow, this was long.    &lt;br /&gt;Hope you enjoy it.&lt;/p&gt;  &lt;p&gt;I still wait for the &lt;a href="http://readcommit.blogspot.com/2008/12/half-baked-download-page-net-framework.html"&gt;missing KB doc from Microsoft&lt;/a&gt;...&lt;/p&gt;  &lt;p&gt;If it won't come soon, you might find here the same analysis to the 2 other updates (I don't promise).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-7736824165309683397?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/7736824165309683397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=7736824165309683397' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7736824165309683397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7736824165309683397'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/12/net-framework-35-family-update-my-peek.html' title='.NET Framework 3.5 Family Update - My Peek inside the .NET 2 update'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-4056763175782712438</id><published>2008-12-18T18:19:00.001+02:00</published><updated>2008-12-21T22:16:27.106+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Service Pack'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='SP1'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Movie'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Hotfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Upgrade'/><title type='text'>Half baked Download page - .NET Framework 3.5 Family Update</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;u&gt;UPDATE:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/959209" target="_blank"&gt;KB 959209&lt;/a&gt; has appeared! (was published December 20, 2008).    &lt;br /&gt;but you can still watch &lt;a href="http://www.lastminutetravel.com/movies.aspx" target="_blank"&gt;the funny movie&lt;/a&gt;… &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Original Post:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I'm monitoring the Microsoft downloads site for new download almost daily.&lt;/p&gt;  &lt;p&gt;Today, I have found a new interesting download: &lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6c095bba-6100-4ec9-9c54-6450b0212565&amp;amp;DisplayLang=en" target="_blank"&gt;Microsoft .NET Framework 3.5 Family Update&lt;/a&gt;&lt;/h4&gt; &lt;/blockquote&gt;  &lt;p&gt;Actually, there are 3 files inside this page, one for each framework version part &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;2.0 SP2 &lt;/li&gt;    &lt;li&gt;3.0 SP2 &lt;/li&gt;    &lt;li&gt;3.5 SP1 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What is inside those updates?&amp;#160; &lt;br /&gt;&lt;strong&gt;Very good question.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is what I meant by &amp;quot;Half baked&amp;quot;...&lt;/p&gt;  &lt;p&gt;There is a reference to a knowledge base document...&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Please see the Knowledge Base Article &lt;a href="http://go.microsoft.com/fwlink/?linkid=136730"&gt;KB959209&lt;/a&gt; for more information.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But at the writing time of the blog, this document doesn't exist!&lt;/p&gt;  &lt;p&gt;So instead telling you what goes inside those updates, you can watch &lt;a href="http://www.lastminutetravel.com/movies.aspx" target="_blank"&gt;a very funny movie&lt;/a&gt; from the company I work for.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-4056763175782712438?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/4056763175782712438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=4056763175782712438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/4056763175782712438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/4056763175782712438'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/12/half-baked-download-page-net-framework.html' title='Half baked Download page - .NET Framework 3.5 Family Update'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-4277053103322128318</id><published>2008-12-17T21:25:00.005+02:00</published><updated>2008-12-17T21:57:50.312+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Commercial'/><category scheme='http://www.blogger.com/atom/ns#' term='Paris'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='Movie'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Upgrade'/><title type='text'>Funny commercial or TFS DB upgrade?</title><content type='html'>Hi again&lt;br /&gt;&lt;br /&gt;This time I'm not here to speak about technology, but to tell you about a &lt;a href="http://www.lastminutetravel.com/movies.aspx"&gt;very funny commercial&lt;/a&gt; produced for the company I work for, about American travel to Paris...&lt;br /&gt;&lt;br /&gt;You know what? maybe I'll use the opportunity to share with you some technology issues anyway:&lt;br /&gt;&lt;br /&gt; I was in the middle of replacing the machine of our TFS Data layer server, and got to the step where you should tell Sharepoint Services that you have switched Database...&lt;br /&gt;&lt;br /&gt;I was using the instruction from "&lt;a href="http://msdn.microsoft.com/en-us/library/ms252516.aspx"&gt;How to Restore Data for Team Foundation Server to a Different Server&lt;/a&gt;" document from MSDN:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Type the following command:&lt;br /&gt;&lt;br /&gt;stsadm –o renameserver –oldservername&lt;br /&gt;OriginalDataTierServerName -newserver NewDataTierServerName&lt;/blockquote&gt;&lt;br /&gt;So I just copied the line from the doc, and paste it into the Command Line Console.&lt;br /&gt;I have changed the old &amp;amp; new server names, and... It didn't worked.&lt;br /&gt;&lt;br /&gt;I got "Command line error".&lt;br /&gt;&lt;br /&gt;After struggling this for 15 minutes, I found out there is a mistake in the doc:&lt;br /&gt;The second parameter should be "-newservername" and not "-newserver".&lt;br /&gt;&lt;br /&gt;So now it worked? of course not!&lt;br /&gt;&lt;br /&gt;Struggling again, until I found one comment in &lt;a href="http://blogs.msdn.com/sharepoint/archive/2007/02/24/updated-installation-guide-for-the-20-server-admin-application-templates-for-wss-3-0.aspx"&gt;WSS Blog &lt;/a&gt;from that guy "&lt;a id="ctl00___ctl00___ctl01___Comments___Comments_ctl55_NameLink" title="paisleygo" target="_blank"&gt;paisleygo&lt;/a&gt;", who says:&lt;br /&gt;&lt;blockquote&gt;There is also the issue with the "typing" the command rather than pasting it. That part is critical - the paste seems to mess up the hyphen character. - So once I fixed all the hyphens in my bat file - things worked great!&lt;/blockquote&gt;&lt;br /&gt;Thanks &lt;a id="ctl00___ctl00___ctl01___Comments___Comments_ctl55_NameLink" title="paisleygo" target="_blank"&gt;paisleygo&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;So my teacher was right all this time: "READ THE INSTRUCTIONS!"&lt;br /&gt;Yes M'em - it was written in the doc to TYPE the line - not to copy it...&lt;br /&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-4277053103322128318?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/4277053103322128318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=4277053103322128318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/4277053103322128318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/4277053103322128318'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/12/funny-commercial-or-tfs-db-upgrade.html' title='Funny commercial or TFS DB upgrade?'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-549884314932607894</id><published>2008-10-02T15:06:00.001+03:00</published><updated>2008-10-02T15:06:15.073+03:00</updated><title type='text'>Rosario is Visual Studio Team System 2010 :-(</title><content type='html'>&lt;p&gt;With using only 4 digits, Microsoft made me disappointed.&lt;/p&gt;  &lt;p&gt;2010.&lt;/p&gt;  &lt;p&gt;I really needed it to be 2009... (Mainly for Requirement Management)&lt;/p&gt;  &lt;p&gt;Anyway - if you want to get an overview, see: &lt;a title="http://msdn.microsoft.com/en-us/vs2008/products/cc948977.aspx" href="http://msdn.microsoft.com/en-us/vs2008/products/cc948977.aspx" target="_blank"&gt;Visual Studio 2010 and .NET Framework 4.0 Overview&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/10575523-549884314932607894?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/549884314932607894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=549884314932607894' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/549884314932607894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/549884314932607894'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/10/rosario-is-visual-studio-team-system.html' title='Rosario is Visual Studio Team System 2010 :-('/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-9167415533663179396</id><published>2008-08-10T09:26:00.000+03:00</published><updated>2008-08-10T09:36:59.286+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Olympics'/><category scheme='http://www.blogger.com/atom/ns#' term='Advertisement'/><title type='text'>Olympics - No, Advertisement - yes?</title><content type='html'>&lt;p&gt;I wanted to see some online videos from the Olympics game, and I knew NBC should have a great site for this, because Microsoft published the fact that NBC plans to use Silverlight to share the Olympics videos.&lt;/p&gt;  &lt;p&gt;So I went into &lt;a title="http://www.nbcolympics.com/video/player.html" href="http://www.nbcolympics.com/video/player.html" target="_blank"&gt;http://www.nbcolympics.com/video/player.html&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I got an advertisement.   &lt;br /&gt;Ok, we already got used to the fact that those web sites should earn money in this way or another.&lt;/p&gt;  &lt;p&gt;Then I got the following message:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/Yonatan.Leonov/SJ6Mh8OWGDI/AAAAAAAAAL8/JhG-AMeavDI/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="61" alt="We&amp;#39;re sorry, NBC is required to restrict this video to viewers within the United States" src="http://lh4.ggpht.com/Yonatan.Leonov/SJ6MiX_IPSI/AAAAAAAAAMA/H9Hm1uEPrmk/image_thumb%5B1%5D.png?imgmax=800" width="374" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;quot;We're sorry, NBC is required to restrict this video to viewers within the United States&amp;quot;&lt;/p&gt;  &lt;p&gt;To tell the truths, I'm used to this too.   &lt;br /&gt;What can I do, I really do live outside the US.&lt;/p&gt;  &lt;p&gt;So what's wrong with this?   &lt;br /&gt;The fact that I was good enough to view the advertisement.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Couldn't you check if I'm from within the US before wasting my time with this Ad?&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-9167415533663179396?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/9167415533663179396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=9167415533663179396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/9167415533663179396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/9167415533663179396'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/08/olympics-no-advertisement-yes.html' title='Olympics - No, Advertisement - yes?'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/Yonatan.Leonov/SJ6MiX_IPSI/AAAAAAAAAMA/H9Hm1uEPrmk/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-7017926673467884958</id><published>2008-06-30T13:55:00.001+03:00</published><updated>2008-06-30T14:02:36.249+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Development Server'/><title type='text'>Multiple Visual Studio Development Server / ASP.NET Development Server</title><content type='html'>&lt;p&gt;Have you upgraded to Visual studio 2008?   &lt;br /&gt;If so, you might have meet the following problem:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You have a solution with more than one ASP.NET Web Application project.&lt;/li&gt;    &lt;li&gt;At least one of those web projects is configured to Use Visual Studio Development Server.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now, you try to debug &lt;strong&gt;one &lt;/strong&gt;of those web projects. Only one.&lt;/p&gt;  &lt;p&gt;you do this by one of those two options:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;right click the project --&amp;gt; click debug --&amp;gt; start new instance&lt;/li&gt;    &lt;li&gt;If your web application already runs (usually on IIS settings) --&amp;gt; attach to process.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now comes the surprise:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/Yonatan.Leonov/SGi7qdjYi-I/AAAAAAAAALs/8CRE_kdqxHo/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="43" alt="image" src="http://lh3.ggpht.com/Yonatan.Leonov/SGi7q49XW3I/AAAAAAAAALw/IEmDwsRReb8/image_thumb.png?imgmax=800" width="89" border="0" /&gt;&lt;/a&gt;    &lt;br /&gt;Instead of getting one Developer Server icon on the taskbar, &lt;strong&gt;&lt;u&gt;you get multiple instances&lt;/u&gt;&lt;/strong&gt;!    &lt;br /&gt;(one for each web project configured to work with the Development server)&lt;/p&gt;  &lt;p&gt;Now, this is not necessarily a bad behavior, as it doesn't actually start all your web projects (which might finish with a lot CPU and Memory load). It is just open a port for those applications. The first time you request a page is the first time the application loaded.&lt;/p&gt;  &lt;p&gt;However - it is not the behavior most of us want.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;The Solution:&lt;/u&gt;&lt;/p&gt;  &lt;p&gt; I guess Microsoft's developers couldn't hide this setting in a better place...&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Stand on the web project (on the solution explorer)&lt;/li&gt;    &lt;li&gt;From the menu bar --&amp;gt; View --&amp;gt; Properties Window&lt;/li&gt;    &lt;li&gt;on the &amp;quot;&lt;strong&gt;Always start when debugging&lt;/strong&gt;&amp;quot; change the value to &lt;strong&gt;&lt;u&gt;False&lt;/u&gt;&lt;/strong&gt;.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/Yonatan.Leonov/SGi7rarty-I/AAAAAAAAAL0/_AkP0p8kBsk/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://lh6.ggpht.com/Yonatan.Leonov/SGi7r0tehaI/AAAAAAAAAL4/FkzTnVB5t1w/image_thumb%5B1%5D.png?imgmax=800" width="219" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you work in a team with source control you'll probably want this setting checked in for all users to get them... but it won't work, as this setting kept on the local .csproj.user file.&lt;/p&gt;  &lt;p&gt;It's funny (or it would be if it wasn't sad) that also it is kept in the .user file, it still will ask you to check out the file.&lt;/p&gt;  &lt;p&gt;To get over this check out problem, you'll need to &lt;u&gt;uncheck&lt;/u&gt; the &amp;quot;&lt;strong&gt;Apply server settings to all users (store in project file)&lt;/strong&gt;&amp;quot; setting on the &lt;strong&gt;web&lt;/strong&gt; tab, in the &lt;strong&gt;project properties page&lt;/strong&gt;, and check in the project.&lt;/p&gt;  &lt;p&gt;Hope it will help someone...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-7017926673467884958?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/7017926673467884958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=7017926673467884958' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7017926673467884958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7017926673467884958'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/06/multiple-visual-studio-development.html' title='Multiple Visual Studio Development Server / ASP.NET Development Server'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/Yonatan.Leonov/SGi7q49XW3I/AAAAAAAAALw/IEmDwsRReb8/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-1647552280409284675</id><published>2008-06-19T16:01:00.001+03:00</published><updated>2008-06-19T16:22:30.670+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Label'/><category scheme='http://www.blogger.com/atom/ns#' term='Team System'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><title type='text'>Building a Specific Version with Team Build 2008</title><content type='html'>&lt;p&gt; You need to rebuild your code as it was at a specific point in history (by a label or a changeset)?&lt;/p&gt;  &lt;p&gt;With TFS 2005 you would have needed to change the core implementation of Team Build.   &lt;br /&gt;See &lt;a href="http://blogs.msdn.com/aaronhallberg/archive/2006/09/19/building-a-specific-version-with-team-build.aspx" target="_blank"&gt;Aaron Hallberg's &amp;quot;Building a Specific Version with Team Build&amp;quot; blog&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;But with TFS 2008 Microsoft already put this logic in, and even gave a GUI to use it:&lt;/p&gt;  &lt;p&gt;Go to &lt;strong&gt;Team Explorer 2008&lt;/strong&gt; --&amp;gt; &lt;b&gt;Builds.     &lt;br /&gt;&lt;/b&gt;Right click the &lt;b&gt;Build definition&lt;/b&gt; you want to build.&lt;/p&gt;  &lt;p&gt;click &lt;strong&gt;Queue New Build&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/Yonatan.Leonov/SFpXErMi3YI/AAAAAAAAALU/amj8468pLVU/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="172" alt="image" src="http://lh4.ggpht.com/Yonatan.Leonov/SFpYiDYRNOI/AAAAAAAAALY/EXJALcUXfZ0/image_thumb%5B5%5D.png?imgmax=800" width="199" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the pop up window in &lt;strong&gt;MSBuild command-line arguments (optional) &lt;/strong&gt;write&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;/p:GetVersion=version&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/Yonatan.Leonov/SFpYiU9GAsI/AAAAAAAAALc/CP4uEP14Hmk/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://lh6.ggpht.com/Yonatan.Leonov/SFpYkRxa8JI/AAAAAAAAALg/zp5sv9_RdJs/image_thumb%5B6%5D.png?imgmax=800" width="215" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Where &lt;strong&gt;&lt;em&gt;version&lt;/em&gt;&lt;/strong&gt; is the Versionspec by the following syntax:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/Yonatan.Leonov/SFpYk04uNNI/AAAAAAAAALk/1efR4Jti1IU/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="184" alt="image" src="http://lh4.ggpht.com/Yonatan.Leonov/SFpYlTyI-UI/AAAAAAAAALo/ExpDyh8Ga0Y/image_thumb%5B4%5D.png?imgmax=800" width="537" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; Hope it will help someone.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-1647552280409284675?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/1647552280409284675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=1647552280409284675' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1647552280409284675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1647552280409284675'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/06/building-specific-version-with-team.html' title='Building a Specific Version with Team Build 2008'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/Yonatan.Leonov/SFpYiDYRNOI/AAAAAAAAALY/EXJALcUXfZ0/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-33817146064947120</id><published>2008-06-06T08:59:00.001+03:00</published><updated>2008-06-06T08:59:53.032+03:00</updated><title type='text'>Insane vs. Sane</title><content type='html'>&lt;p&gt;Today the only difference between a sane and an insane man is a blue light...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;of the Bluetooth headset in his ear.&lt;/p&gt;  &lt;p&gt;Both are speaking loudly in the street without anyone beside them.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;if it is lightening - he is normal.    &lt;br /&gt;if it is turned off - he is insane.&lt;/p&gt;  &lt;p&gt;What a world.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-33817146064947120?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/33817146064947120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=33817146064947120' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/33817146064947120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/33817146064947120'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/06/insane-vs-sane.html' title='Insane vs. Sane'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-1837378771877737447</id><published>2008-05-13T09:43:00.001+03:00</published><updated>2008-12-18T18:03:56.264+02:00</updated><title type='text'>Microsoft .NET Framework 2.0 Service Pack 2 (Beta, and now RTM too)</title><content type='html'>&lt;p&gt;Microsoft does it again...&lt;/p&gt;  &lt;p&gt;Last time Microsoft released .NET Framework 3.5 they have included .NET 2.0 SP1 inside it, and it took them very long time to release a document telling what have been changed in this SP1.&lt;/p&gt;  &lt;p&gt;Today &lt;a title="Microsoft .NET Framework 3.5 Service pack 1 Beta" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8c36aca4-e947-4760-9b05-93cac04c6f87&amp;amp;DisplayLang=en" target="_blank"&gt;Microsoft .NET Framework 3.5 Service pack 1 Beta&lt;/a&gt; has been released.     &lt;br /&gt;and Microsoft even tells what inside this SP1 (see the download page overview section)&lt;/p&gt;  &lt;p&gt;it is written there (on the Brief Description) that it includes .NET Framework 2.0 service pack 2 too.&lt;/p&gt;  &lt;p&gt;BUT...&lt;/p&gt;  &lt;p&gt;They haven't released a stand alone .NET 2.0 SP 2...    &lt;br /&gt;&lt;strong&gt;And worst - They haven't told what have been changed in this .NET 2.0 SP 2&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;This information is critical - as most of current running applications are built on .NET 2.0 (with or without SP1)&lt;/p&gt;  &lt;p&gt;So we (the developers) need to know if there are any &amp;quot;red bits&amp;quot; on this SP2 or not.    &lt;br /&gt;We need to know what have been changed - so we would be able to decide which type of testing we need to do before applying this SP2.&lt;/p&gt;  &lt;p&gt;So if someone have this info - Please release it.&lt;/p&gt;  &lt;p&gt;Thanks in Advance...&lt;/p&gt;  &lt;p&gt;p.s. all stand for .NET Framework 3.0 service pack 2 too...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;UPDATE:&lt;/p&gt;  &lt;p&gt;You can find &lt;a href="http://go.microsoft.com/fwlink/?LinkID=127832"&gt;.NET Frameworks 2.0 SP2 and 3.0 SP2 bootstrapper packages&lt;/a&gt; (RTM, I hope) by following the link (from MSDN). I haven't tested it.&lt;/p&gt;  &lt;p&gt;If you prefer &lt;strong&gt;&lt;a href="http://www.lastminutetravel.com/movies.aspx" target="_blank"&gt;a very funny movie&lt;/a&gt;&lt;/strong&gt; instead... (from the company I work for - proper disclosure)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-1837378771877737447?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/1837378771877737447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=1837378771877737447' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1837378771877737447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1837378771877737447'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/05/microsoft-net-framework-20-service-pack.html' title='Microsoft .NET Framework 2.0 Service Pack 2 (Beta, and now RTM too)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6520056471941340502</id><published>2008-05-12T13:27:00.001+03:00</published><updated>2008-05-12T13:27:41.681+03:00</updated><title type='text'>Control two computers with one mouse (Synergy)</title><content type='html'>&lt;p&gt;Are you working with a a desktop and a laptop on the same desk?   &lt;br /&gt;If so, you probably mix up the mouse all the time...&lt;/p&gt;  &lt;p&gt;No more!&lt;/p&gt;  &lt;p&gt;Try this wonderful utility: &lt;a title="http://synergy2.sourceforge.net/" href="http://synergy2.sourceforge.net/" target="_blank"&gt;Synergy&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It lets you work with just one mouse and control both computers!&lt;/p&gt;  &lt;p&gt;See video review on CNET: &lt;a title="http://reviews.cnet.com/4660-10165_7-6663696.html" href="http://reviews.cnet.com/4660-10165_7-6663696.html"&gt;http://reviews.cnet.com/4660-10165_7-6663696.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I just love it.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-6520056471941340502?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6520056471941340502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6520056471941340502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6520056471941340502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6520056471941340502'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/05/control-two-computers-with-one-mouse.html' title='Control two computers with one mouse (Synergy)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6947183510585268646</id><published>2008-05-01T09:18:00.001+03:00</published><updated>2008-05-01T09:18:06.234+03:00</updated><title type='text'>2 New versions for TFS Follow Branch History Add-in for VS</title><content type='html'>&lt;p&gt;As you might know, at the end of year 2006, I have created an open source project called &lt;a href="http://www.codeplex.com/TFSBranchHistory" target="_blank"&gt;TFSBranchHistory&lt;/a&gt; on &lt;a href="http://www.codeplex.com" target="_blank"&gt;CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The goal of this project was to fulfill the missing feature of full branch history of items in TFS explorer GUI.&lt;/p&gt;  &lt;p&gt;Yesterday we have uploaded 2 new releases for this project:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.codeplex.com/TFSBranchHistory/Release/ProjectReleases.aspx?ReleaseId=12964" target="_blank"&gt;0.9 Beta&lt;/a&gt;&lt;/strong&gt;: (click to download)&lt;/p&gt;  &lt;p&gt;This release contains improvements written by mlabelle:&lt;/p&gt;  &lt;p&gt;1) ability to recursively iterate over the whole history across all branches   &lt;br /&gt;2) ability to open an item directly into Visual Studio instead of notepad    &lt;br /&gt;3) ability to sort the listview columns with an additionnal key on changeset ids    &lt;br /&gt;4) using a persistable and dockable toolwindow instead of a popup form    &lt;br /&gt;5) preventing the ability to view/compare deleted items (that crash the addin otherwize)    &lt;br /&gt;6) using a custom icon in a satellite assembly (instead of the smiley face)    &lt;br /&gt;7) using lowercase for changes, removing the domain name from the user    &lt;br /&gt;8) using a standard font for the controls to make it look more like the builtin history&lt;/p&gt;  &lt;p&gt;It also contains Eyal's Feature:&lt;/p&gt;  &lt;p&gt;1) label history has been added to the history form&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/Yonatan.Leonov/SBlgmjmymPI/AAAAAAAAALE/hu5wQAdBIQA/New_GUI%5B3%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="New_GUI" src="http://lh5.ggpht.com/Yonatan.Leonov/SBlgnTmymQI/AAAAAAAAALM/GOiW1fPTYSU/New_GUI_thumb%5B1%5D.png" width="438" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=TFSBranchHistory&amp;amp;ReleaseId=12975" target="_blank"&gt;&lt;strong&gt;0.91 Beta for VS2008&lt;/strong&gt;&lt;/a&gt;: (click to download)&lt;/p&gt;  &lt;p&gt;As you can undaerstand from its name, this release is working with Visual Studio 2008 (instead of Visual Studio 2005 of 0.9 Beta)&lt;/p&gt;  &lt;p&gt;There is a minor issue regarding the tool window picture, as Microsoft changed the way you add it in VS2008 and I haven't yet the time to solve it.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As I wrote on the TFSBranchHistory project home page, the lifetime of this project isn't going to be so long, as I hope most of its features are going to be delivered out of the box on Rosario.&lt;/p&gt;  &lt;p&gt;Anyway, I would be glad if you download it and use it.&lt;/p&gt;  &lt;p&gt;As always, If you have ideas for more features, or you want to report a bug, please feel free to do it (either leave here a comment, or open an Issue on the Project's CodePlex site.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/TFSBranchHistory" target="_blank"&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/10575523-6947183510585268646?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6947183510585268646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6947183510585268646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6947183510585268646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6947183510585268646'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/05/2-new-versions-for-tfs-follow-branch.html' title='2 New versions for TFS Follow Branch History Add-in for VS'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/Yonatan.Leonov/SBlgnTmymQI/AAAAAAAAALM/GOiW1fPTYSU/s72-c/New_GUI_thumb%5B1%5D.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-145212508813240355</id><published>2008-04-23T22:48:00.001+03:00</published><updated>2008-04-23T22:48:15.135+03:00</updated><title type='text'>Araxis Merge integration with TFS - Team System - Visual studio</title><content type='html'>&lt;p&gt;I'm not a big fan of the built in Merge tool that comes with Microsoft's Team Explorer for Visual Studio.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh3.ggpht.com/Yonatan.Leonov/SA-PZTmymEI/AAAAAAAAAJg/aszohP8MHWc/s1600-h/image1%5B2%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Microsoft&amp;#39;s Team Explorer built in Merge tool for Visual Studio" src="http://lh3.ggpht.com/Yonatan.Leonov/SA-NxTmymBI/AAAAAAAAAJo/sscirn00-ZE/image1_thumb.png?imgmax=800" width="496" height="413" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I really prefer Araxis Merge interface much much more.   &lt;br /&gt;So I have search for a way to integrate it into Team Explorer.&lt;/p&gt;  &lt;p&gt;I easily found &lt;a href="http://blogs.msdn.com/jmanning/articles/535573.aspx"&gt;James Manning's blog about diff/merge configuration in Team Foundation&lt;/a&gt; which explains very clearly how to use the &amp;quot;Configure User Tools&amp;quot; under Tools -&amp;gt; Options -&amp;gt; Source Control -&amp;gt; Visual Studio Team Foundation Server&amp;quot;.&lt;/p&gt;  &lt;p&gt;James tells you exactly what parameters you need to put in the Command's arguments:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;/wait /swap /a3 /3 /title1:%6 /title2:%7 /title3:%8 %1 %2 %3 %4&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/Yonatan.Leonov/SA-N1TmymCI/AAAAAAAAAJs/eA6v_7C9rCQ/s1600-h/image11%5B1%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Configure Tool Window" src="http://lh6.ggpht.com/Yonatan.Leonov/SA-N4DmymDI/AAAAAAAAAJw/F9-jNGTNTAg/image11_thumb.png?imgmax=800" width="455" height="476" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; And it really works:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/Yonatan.Leonov/SA-PiDmymFI/AAAAAAAAAJ0/fxflsVYsT6c/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Araxis&amp;#39; 3-Way Merge" src="http://lh4.ggpht.com/Yonatan.Leonov/SA-SPjmymGI/AAAAAAAAAJ8/e5qM0LIjmiA/image_thumb%5B8%5D.png?imgmax=800" width="496" height="373" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; BUT...&lt;/p&gt;  &lt;p&gt;James's settings work only for Araxis Merge &lt;strong&gt;Professional Edition &lt;/strong&gt;(that supports 3-way merge and compare)&lt;/p&gt;  &lt;p&gt;So if you only have Araxis Merge &lt;strong&gt;Standard Edition &lt;/strong&gt;licence (that support only 2-way merge and compare), you need a little bit different setting:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;/wait /2 /title1:%6 /title2:%7 %1 %2 %4&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;and actually I also prefer changing the titles from Microsoft's defaults (Yours, Theirs) to &amp;quot;Source&amp;quot; and &amp;quot;Destination&amp;quot;, so my final arguments are:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;/wait /2 /title1:Source /title2:Destination %1 %2 %4&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;and it works! (using 2-way merge)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/Yonatan.Leonov/SA-SRTmymHI/AAAAAAAAAKE/7tCzNK9XuWM/s1600-h/image1%5B1%5D%5B1%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Araxis&amp;#39; 2-Way Merge" src="http://lh6.ggpht.com/Yonatan.Leonov/SA-SUDmymII/AAAAAAAAAKM/LAe10c7kX5Q/image1%5B1%5D_thumb.png?imgmax=800" width="496" height="368" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You just need to take into account that the 2-way isn't perfect as your first instinct would probably be to edit the Destination side, but you'll get a warning about &amp;quot;this file is read only&amp;quot;. this is because Microsoft never intended that you will edit this file itself. They have created a fourth file (%4) which is the result of the merge.&lt;/p&gt;  &lt;p align="left"&gt;You can workaround this by telling Araxis Merge to allow editing of the read only file.   &lt;br /&gt;This can be done on the specific file level:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/Yonatan.Leonov/SA-SVTmymJI/AAAAAAAAAKU/3SE8NOYUPLo/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Read Only alert" src="http://lh6.ggpht.com/Yonatan.Leonov/SA-SXDmymKI/AAAAAAAAAKc/3X9QBjVEf-w/image_thumb%5B9%5D.png?imgmax=800" width="324" height="193" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;Or globally by: View Menu -&amp;gt; Options -&amp;gt; Text Comparisons -&amp;gt; Editing -&amp;gt; Allow editing in read only files:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/Yonatan.Leonov/SA-SZjmymLI/AAAAAAAAAKk/uUhJPPNiJ3g/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Araxis Options window" src="http://lh6.ggpht.com/Yonatan.Leonov/SA-SbDmymMI/AAAAAAAAAKs/_99A7eWlKec/image_thumb%5B10%5D.png?imgmax=800" width="336" height="118" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="left"&gt;Anyway, even if you edit the &amp;quot;Source&amp;quot; file instead of the &amp;quot;Destination&amp;quot; file, Araxis will pass the saved file (if you click ctrl+s or the &amp;quot;save&amp;quot; button - Araxis save the current doc - meaning the doc where your cursor is in) to TFS.&lt;/p&gt;  &lt;p align="left"&gt;It is a little dangerous as you might be on the wrong doc when saving.&lt;/p&gt;  &lt;p align="left"&gt;You also have the option to just close the Araxis window without saving, which will pop up a window for you to decide which file you want to save as the merged file:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/Yonatan.Leonov/SA-SczmymNI/AAAAAAAAAK0/9BfECGTDX2I/s1600-h/image%5B18%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="Save Merged File window" src="http://lh3.ggpht.com/Yonatan.Leonov/SA-SfTmymOI/AAAAAAAAAK8/sCDk0A6GpDU/image_thumb%5B11%5D.png?imgmax=800" width="409" height="253" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="left"&gt;Conclusion:&lt;/p&gt;  &lt;p align="left"&gt;If you can effort &lt;strong&gt;Araxis Merge&lt;/strong&gt; &lt;strong&gt;Professional Edition&lt;/strong&gt; - go for it.    &lt;br /&gt;If not - you can still integrate the &lt;strong&gt;Standard edition&lt;/strong&gt; fairly well.&lt;/p&gt;  &lt;p align="left"&gt;P.S. &lt;/p&gt;  &lt;p align="left"&gt;There is one advantage in using the 2-way compare: when you have done lots of changes in one side - instead of copy all of them to the middle and then integrate the other side - you can right away integrate the less changed side into the other.&lt;/p&gt;  &lt;p align="left"&gt;Just to let you know - You can use 2-Way merge on the Pro edition too.   &lt;br /&gt;Use the arguments I have supplied and it will work (because of the /2 flag) &lt;/p&gt;  &lt;p align="left"&gt;another P.S.&lt;/p&gt;  &lt;p align="left"&gt;You can find more Integration settings with other Source Control, Configuration Management and Other Applications in &lt;a title="http://www.araxis.com/merge/scm_integration.html" href="http://www.araxis.com/merge/scm_integration.html" target="_blank"&gt;Araxis' Web Site&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/10575523-145212508813240355?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/145212508813240355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=145212508813240355' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/145212508813240355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/145212508813240355'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/04/araxis-merge-integration-with-tfs-team.html' title='Araxis Merge integration with TFS - Team System - Visual studio'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/Yonatan.Leonov/SA-NxTmymBI/AAAAAAAAAJo/sscirn00-ZE/s72-c/image1_thumb.png?imgmax=800' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-8097194990738673863</id><published>2008-04-21T18:12:00.001+03:00</published><updated>2008-04-21T18:18:17.197+03:00</updated><title type='text'>Found In Build - Team Build List - Make it Shorter</title><content type='html'>&lt;p&gt;You have CI (Continuous Integration) Build running on each check in (or once a day) and the &amp;quot;Found In Build&amp;quot; drop down list in the Bug Work Item keeps growing each day...&lt;/p&gt;  &lt;p&gt;You don't need all those builds there - you need only the build which QA actually deploy to their environment.&lt;/p&gt;  &lt;p&gt;You can maintain this list manually by editing the Global List which TFS holds for each team project as described by &lt;a href="http://www.benday.com"&gt;Benjamin Day&lt;/a&gt; in &lt;a href="http://blog.benday.com/archive/2007/10/23/23165.aspx"&gt;Managing TFS Team Build History: Delete Completed Builds From &amp;quot;All Build Types&amp;quot; &amp;amp; Bug Work Item Drop-downs&lt;/a&gt;, but this is tedious work to do manually.&lt;/p&gt;  &lt;p&gt;You can edit it with the &amp;quot;TFS Power Tools&amp;quot; new menu:&amp;#160; &lt;br /&gt;Tools --&amp;gt; Process Editor --&amp;gt; Global List --&amp;gt; Open Global List from Server&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/Yonatan.Leonov/SAyu0jRGmnI/AAAAAAAAAIg/u5CLv2U1NTA/s1600-h/image8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="Menu path to Global List editing" src="http://lh5.ggpht.com/Yonatan.Leonov/SAyu1jRGmoI/AAAAAAAAAIo/BFv77XafgoE/image_thumb2.png?imgmax=800" width="244" height="66" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;Then select the build you want, right click it and select delete:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/Yonatan.Leonov/SAyu2TRGmpI/AAAAAAAAAIw/JBlLC09Vmrc/s1600-h/image14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" border="0" alt="image" src="http://lh4.ggpht.com/Yonatan.Leonov/SAyu3TRGmqI/AAAAAAAAAI4/nXrhrprF2Og/image_thumb4.png?imgmax=800" width="244" height="137" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;But it is still manual work.&lt;/p&gt;  &lt;p&gt;You can actually use &lt;a href="http://blogs.msdn.com/jpricket/archive/2006/09/05/how-to-filter-the-build-completion-event.aspx"&gt;Jason Prickett's Blog&lt;/a&gt; to tell TFS which builds should get in the list from the start by adding conditions to the event subscription of the &amp;quot;Build Completion Event&amp;quot;. but still you will be able only to filter the non successful builds - not all the builds except the deployed ones.&lt;/p&gt;  &lt;p&gt;Actually the main issue here is Microsoft's decision to insert builds into the list on the &amp;quot;Build Completion Event&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So now to my (little chutzpa) solution:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Delete the original TFS &amp;quot;Build Completion Event&amp;quot; subscription (as suggested by Jason) - BUT - don't recreate it with a filter.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Write your own web service and implement TFS event handler web method for the &amp;quot;Build Status Change&amp;quot; Event (BuildStatusChangeEvent) (which should have been called &amp;quot;Build Quality Change Event&amp;quot; as it triggers only on quality changed)      &lt;br /&gt;      &lt;br /&gt;In this handler check if the Quality has been changed from NULL to something.       &lt;br /&gt;If it's true - just call the Notify method on TFS WorkItemTracking Integration web service with the xml it waits for.       &lt;br /&gt;      &lt;br /&gt;You will need of course to build this xml and bring the missing information from the BuildStore service, but those are easy steps.       &lt;br /&gt;      &lt;br /&gt;Don't forget to set the HttpRequest's UseDefaultCredentials to true (or pass other valid credential) or you will get unauthorized exception from TFS.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Subscribe your web method to the BuildStatusChangeEvent. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;That's all!&lt;/p&gt;  &lt;p&gt;Now all you need to do is to instruct your integration team to change the build quality of each build they take to deploy on QA environment from &amp;quot;Unexamined&amp;quot; (or null on TFS 2008) to &amp;quot;Ready For Initial Test&amp;quot;.&lt;/p&gt;  &lt;p&gt;The BuildStatusChangeEvent will be called, it will call Microsoft's original implementation of adding the build to the Global List, and this is exactly what I want.&lt;/p&gt;  &lt;p&gt;See the code at the attached c# file:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; padding-left: 0px; border-top: #dde5e9 1px solid; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginheight="0" src="http://cid-c5065183f39dbaaa.skydrive.live.com/embedrowdetail.aspx/Public/DevSamples/FoundInBuild%20Filtering%20implementation/BuildQualityChangeImp.cs" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-8097194990738673863?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/8097194990738673863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=8097194990738673863' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8097194990738673863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8097194990738673863'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/04/found-in-build-team-build-list-make-it.html' title='Found In Build - Team Build List - Make it Shorter'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/Yonatan.Leonov/SAyu1jRGmoI/AAAAAAAAAIo/BFv77XafgoE/s72-c/image_thumb2.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-1934820851185000140</id><published>2008-03-24T23:13:00.001+02:00</published><updated>2008-03-24T23:13:56.351+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team System'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><title type='text'>My TFS 2008 installation experience</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Saturday night - 20:00 - At my home&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Connecting to work VPN.&lt;/p&gt;  &lt;p&gt;Uninstalling TFS Proxy, TFS Build, TS Web Access, TFS Application layer, TFS DB layer.   &lt;br /&gt;Also uninstalling custom web services: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;CI (continuous Integration) - good riddance... (TFS 2008 has a built in CI)&lt;/li&gt;    &lt;li&gt;Build Failure Smart Email Notification Service - (will be reinstalled later)&lt;/li&gt;    &lt;li&gt;Check In notification Service&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;22:00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;last backup before starting.   &lt;br /&gt;actually not a standard backup...    &lt;br /&gt; I have detach all TFS Databases, and copied the db file and the log file to another computer.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Sunday begins - 00:00&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Starting the Installation!   &lt;br /&gt;.NET 3.5 already installed so no waste of time here.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;00:30&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The installer still running...   &lt;br /&gt;The installer's CPU is zero.    &lt;br /&gt;Checking CPU on the DB - it is working pretty hard. so I let it continue working...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;00:45&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Still working on the DB side.   &lt;br /&gt;Checking the Activity Monitor to see what happens - It works on the Source Control DB.    &lt;br /&gt;A short Google search find some blog which says it can take more then an hour if you have a large repository. I do have a large (not huge) repository so I wait.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;01:05&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A new window pop up with a Progress Bar telling me it updates the source control DB.   &lt;br /&gt;Probably Microsoft guessed I have thoughts about canceling the installation...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;01:30&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Progress Bar window disappeared. The Source Control DB has been updated. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;02:00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Installer still running...   &lt;br /&gt;checking again the activity monitor - Now it works on the TfsBuild DB.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;03:30&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;still on the TfsBuild.   &lt;br /&gt;This is the point to tell that before the upgrade I have deleted almost all the build history. so I thought it would take a short time...&lt;/p&gt;  &lt;p&gt;Googled again to find there was a bug in Beta 2 regarding this step.   &lt;br /&gt;Someone suggested to cancel installation - then delete all data in TfsBuild DB. then retry the installation.&lt;/p&gt;  &lt;p&gt;It would be hard to delete all the data as there are relation constraint between the tables...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;04:00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Killing the DB Process which has been running for more then 2 hours in the Activity Monitor. it tries to rollback everything.&lt;/p&gt;  &lt;p&gt;Deleting the TfsBuild DB.&lt;/p&gt;  &lt;p&gt;The Installer pop up a message about failure to upgrade Build DB.   &lt;br /&gt;Options: Retry / Cancel. &lt;/p&gt;  &lt;p&gt;Bringing it again from backup (attaching it).&lt;/p&gt;  &lt;p&gt;Choosing Retry.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;06:00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Still on the same process in the Activity Monitor which was started at 04:00...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;07:30&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My little daughter wakes up.   &lt;br /&gt;Preparing breakfast, dressing her up, bringing her to the kindergarten.    &lt;br /&gt;(Yes, on Sunday. I'm in Israel. we work on Sundays... which means people will be at work in about one hour and TFS is still in the middle...)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;08:00&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Heading to work.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;08:25 - At work.&lt;/u&gt; &lt;/strong&gt;(yes, I live pretty close to work) &lt;/p&gt;  &lt;p&gt;This Process is still running.&lt;/p&gt;  &lt;p&gt;deciding to take drastic step:   &lt;br /&gt;Installing a clean TFS Database layer on my own computer (not the server).    &lt;br /&gt;Backing up the TfsBuild DB from my machine.    &lt;br /&gt;Deleting the TfsBuild DB from the server again (pop up again...).    &lt;br /&gt;Restoring my Clean TfsBuild DB to the Server.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;08:50&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Choosing Retry.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;09:10&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Installation completed successfully !!!!!!!!!!!!&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;People start to come asking if they can start working. Yes they can.&lt;/p&gt;  &lt;p&gt;What has been lost (except from sleeping)? - empty Build history.   &lt;br /&gt;The Build descriptions are kept anyway in the source control on TFS 2005 - so they have been restored once I have open team explorer and got latest version for them.&lt;/p&gt;  &lt;p&gt;Couldn't be easier, could it?   &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-1934820851185000140?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/1934820851185000140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=1934820851185000140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1934820851185000140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1934820851185000140'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/03/my-tfs-2008-installation-experience.html' title='My TFS 2008 installation experience'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-3299437092193406220</id><published>2008-01-24T17:55:00.001+02:00</published><updated>2008-01-24T18:05:01.062+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Deployment Project'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ILMerge'/><title type='text'>share ASP.NET user controls between applications (aspnet_merge)</title><content type='html'>&lt;p&gt;You want to create some shared ASP.NET controls for use in multiple applications.    &lt;br /&gt;Probably the only way you think of is custom control:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;the only way to share the user control between applications is to put a separate copy in each application, which takes more maintenance if you make changes to the control (&lt;a href="http://msdn2.microsoft.com/en-us/library/aa651710(VS.71).aspx" target="_blank"&gt;MSDN&lt;/a&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But it isn't actually true.&lt;/p&gt;  &lt;p&gt;You can use &amp;quot;&lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336619.aspx" target="_blank"&gt;Web Deployment Projects&lt;/a&gt;&amp;quot; add-in to compile your user controls project into dll which can be referenced from any web application.&lt;/p&gt;  &lt;p&gt;Now let's take it step by step:&lt;/p&gt;  &lt;p&gt;(make sure you have installed the &amp;quot;&lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336619.aspx" target="_blank"&gt;Web Deployment Projects&lt;/a&gt;&amp;quot; add-in)&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create a new web project (SharedUserControls.csproj). &lt;/li&gt;    &lt;li&gt;Remove the &amp;quot;Default.aspx&amp;quot; page and web.config file. &lt;/li&gt;    &lt;li&gt;Add a user control (let's call it MyControl.ascx). &lt;/li&gt;    &lt;li&gt;Add what ever web controls you want to your user control.      &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://lh4.google.com/Yonatan.Leonov/R5i0jmHRZEI/AAAAAAAAAGg/swh0Jmx0f5s/image%5B3%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="138" alt="image" src="http://lh3.google.com/Yonatan.Leonov/R5i0lWHRZFI/AAAAAAAAAGo/R_P6MNOBENI/image_thumb%5B1%5D" width="361" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;Add Web Deployment Project by standing on the project and selecting &amp;quot;&lt;strong&gt;Add Web Project Project...&lt;/strong&gt;&amp;quot; from the &lt;strong&gt;Build &lt;/strong&gt;menu       &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://lh4.google.com/Yonatan.Leonov/R5i0mmHRZGI/AAAAAAAAAGw/_47RYJhDRTk/image%5B7%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="261" alt="image" src="http://lh3.google.com/Yonatan.Leonov/R5i0nWHRZHI/AAAAAAAAAG4/Stkkg7seJIU/image_thumb%5B3%5D" width="372" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;Keep the default name, and click &lt;strong&gt;OK&lt;/strong&gt;.       &lt;br /&gt;      &lt;br /&gt;&amp;#160;&lt;a href="http://lh6.google.com/Yonatan.Leonov/R5i0pGHRZII/AAAAAAAAAHA/Ym2hnT-SEso/image%5B14%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="image" src="http://lh5.google.com/Yonatan.Leonov/R5i0q2HRZJI/AAAAAAAAAHI/6tcYuYYrRXI/image_thumb%5B6%5D" width="328" border="0" /&gt;&lt;/a&gt;       &lt;br /&gt;A new project was created with out any file inside       &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://lh3.google.com/Yonatan.Leonov/R5i0rWHRZKI/AAAAAAAAAHQ/ac6FHuIIBf4/image%5B17%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="61" alt="image" src="http://lh3.google.com/Yonatan.Leonov/R5i0sWHRZLI/AAAAAAAAAHY/IEwhRcJmoy0/image_thumb%5B7%5D" width="244" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;Double click the new project to get the project property pages.      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&lt;a href="http://lh3.google.com/Yonatan.Leonov/R5i0tWHRZMI/AAAAAAAAAHg/933ELqV0vpM/image%5B26%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="182" alt="image" src="http://lh6.google.com/Yonatan.Leonov/R5i0vGHRZNI/AAAAAAAAAHo/1QLwAOdhYSs/image_thumb%5B12%5D" width="336" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Uncheck&lt;/strong&gt; the last check box - &amp;quot;Allow this precompiled site to be updatable&amp;quot;.       &lt;br /&gt;      &lt;br /&gt;This is an important step - If you'll skip it, you'll get: ASPNETMERGE : warning 1013: Cannot find any assemblies that can be merged in the application bin folder.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Go to the &amp;quot;Output Assemblies&amp;quot; tab &lt;/li&gt;    &lt;li&gt;Select &amp;quot;Merge all pages and control outputs to a single assembly&amp;quot; &lt;/li&gt;    &lt;li&gt;Call the assembly name: &amp;quot;SharedUserControlMerged&amp;quot;      &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://lh6.google.com/Yonatan.Leonov/R5i0xGHRZOI/AAAAAAAAAHw/qNz-l-TvH-I/image%5B30%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="249" alt="image" src="http://lh5.google.com/Yonatan.Leonov/R5i0y2HRZPI/AAAAAAAAAH4/65Lgxuifsuo/image_thumb%5B14%5D" width="370" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;Build the solution, and see what you get in the Output:      &lt;br /&gt;      &lt;br /&gt;&lt;font size="2"&gt;aspnet_compiler.exe...        &lt;br /&gt;Running aspnet_merge.exe ...         &lt;br /&gt;aspnet_merge.exe...         &lt;br /&gt;Successfully merged...         &lt;br /&gt;        &lt;br /&gt;What happens is that the &amp;quot;Deployment Web Project&amp;quot; actually compiles the aspx and ascx files - using aspnet_compiler.         &lt;br /&gt;        &lt;br /&gt;Then merge all dlls (currently we have only one - because we have only one control) using aspnet_merge (which uses ILMerge behind the scenes).         &lt;br /&gt;&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;Now add another Web Project (WebApp.csproj).&lt;/font&gt; &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Add reference to the SharedUserControlMerged.dll from the &lt;strong&gt;bin&lt;/strong&gt; folder of the SharedUserControls.csproj_deploy project&lt;strong&gt;.        &lt;br /&gt;        &lt;br /&gt;&lt;a href="http://lh4.google.com/Yonatan.Leonov/R5i0zmHRZQI/AAAAAAAAAIA/922uq6tZU54/image%5B34%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="image" src="http://lh5.google.com/Yonatan.Leonov/R5i012HRZRI/AAAAAAAAAII/9_jUvh2YxeI/image_thumb%5B16%5D" width="354" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/strong&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Register this assembly inside a web page on &lt;strong&gt;WebApp&lt;/strong&gt; project.       &lt;br /&gt;      &lt;br /&gt;&lt;span style="background: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue"&gt;@&lt;/span&gt;&lt;span style="color: #a31515"&gt;Register        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: red"&gt;tagprefix&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;xyz&amp;quot;        &lt;br /&gt;&lt;/span&gt;&lt;span style="color: red"&gt;namespace&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;ASP&amp;quot;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: red"&gt;assembly&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;SharedUserControlMerged&amp;quot;&lt;/span&gt;&lt;span style="background: #ffee62"&gt;%&amp;gt;        &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Now you can use your control on this page:      &lt;br /&gt;      &lt;br /&gt;You need first to find out what is the name of the control in the merged dll.       &lt;br /&gt;I have used Reflector to do it:       &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://lh4.google.com/Yonatan.Leonov/R5i02mHRZSI/AAAAAAAAAIQ/Ba6RDypnteU/image%5B37%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="130" alt="image" src="http://lh3.google.com/Yonatan.Leonov/R5i03WHRZTI/AAAAAAAAAIY/m6yRPxK69s0/image_thumb%5B17%5D" width="244" border="0" /&gt;&lt;/a&gt;       &lt;br /&gt;and just put it in the page:       &lt;br /&gt;      &lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;xyz&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;mycontrol_ascx &lt;/span&gt;&lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Server&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;xyz&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;mycontrol_ascx&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;       &lt;p&gt;       &lt;br /&gt;So what we have is a reusable dll contains our User Control.&lt;/p&gt;      &lt;p&gt;       &lt;br /&gt;Next time we will find out how to create user control with images and JavaScript files.&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-3299437092193406220?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/3299437092193406220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=3299437092193406220' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3299437092193406220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3299437092193406220'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/01/share-aspnet-user-controls-between.html' title='share ASP.NET user controls between applications (aspnet_merge)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-7134699546991190403</id><published>2008-01-13T21:43:00.001+02:00</published><updated>2008-01-13T21:43:40.432+02:00</updated><title type='text'>13 months a year?</title><content type='html'>&lt;p&gt;Do you believe in &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/13_%28number%29#Unlucky_13"&gt;Unlucky 13&lt;/a&gt;&amp;quot;?&lt;/p&gt;  &lt;p&gt;Today (13th) we had a bug on production.   &lt;br /&gt;Yesterday it worked... Today it doesn't....&lt;/p&gt;  &lt;p&gt;After short debugging I have analyzed it to be a date parsing error - so I switched the date on the server back to yesterday, and it worked again.&lt;/p&gt;  &lt;p&gt;So finally I found out that the culture was Hebrew while the Dataset was comparing based on Invariant culture. so: &lt;/p&gt;  &lt;p&gt;12/1/2008 can be translated both as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;12th JAN&lt;/li&gt;    &lt;li&gt;1st DEC&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;But 13/1/2008 can only be translated as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;13th JAN&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;but it would crash if you try to translate it as 1st to ??? (the 13th month...)&lt;/p&gt;  &lt;p&gt;It just remind be a great book of &lt;a href="http://en.wikipedia.org/wiki/Erich_K%C3%A4stner"&gt;Erich K&amp;#228;stner&lt;/a&gt; - &lt;a href="http://en.wikipedia.org/wiki/The_35th_of_May,_or_Conrad's_Ride_to_the_South_Seas" target="_blank"&gt;The 35th of May...&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/10575523-7134699546991190403?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/7134699546991190403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=7134699546991190403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7134699546991190403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/7134699546991190403'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/01/13-months-year.html' title='13 months a year?'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-1656574980455881215</id><published>2008-01-06T23:32:00.001+02:00</published><updated>2008-01-07T11:37:05.350+02:00</updated><title type='text'>Referencing different versions of an assembly - Part 3 (ILMerge)</title><content type='html'>&lt;p&gt;(if you missed the &lt;a href="http://readcommit.blogspot.com/2007/12/referencing-two-different-version-of.html" target="_blank"&gt;first&lt;/a&gt; and the &lt;a href="http://readcommit.blogspot.com/2008/01/referencing-two-different-version-of.html" target="_blank"&gt;second&lt;/a&gt; parts...)&lt;/p&gt; &lt;p&gt;We have succeed build our solution using &lt;strong&gt;&lt;em&gt;ILMerge&lt;/em&gt;&lt;/strong&gt; with the flag /&lt;strong&gt;&lt;em&gt;internalize.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;But now lets go a step further:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.google.com/Yonatan.Leonov/R4FI4nqFPKI/AAAAAAAAAGA/iZJY3_5tL9k/image%5B8%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="293" alt="image" src="http://lh4.google.com/Yonatan.Leonov/R4FI6XqFPLI/AAAAAAAAAGI/5q3Z7lpnFAo/image_thumb%5B4%5D" width="520" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A.dll + infra V1 =&amp;gt; MergedA.dll (using /&lt;strong&gt;&lt;em&gt;internalize&lt;/em&gt;&lt;/strong&gt;)&lt;br&gt;B.dll + infra V2 =&amp;gt; MergedB.dll (using /&lt;strong&gt;&lt;em&gt;internalize&lt;/em&gt;&lt;/strong&gt;)&lt;/p&gt; &lt;p&gt;App1 + MergedA.dll + MergedB.dll =&amp;gt; MergedApp1.dll&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Will it work?&lt;/p&gt; &lt;p&gt;At first look, the answer should be it won't.&lt;/p&gt; &lt;p&gt;Why? remember that the reason it worked before was because infra1 &amp;amp; infra2 were declared &lt;strong&gt;&lt;em&gt;Internal.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;But now they both &lt;strong&gt;on the same Assembly&lt;/strong&gt; (MergedApp1) so we should get an error from ILMerge about the same type declared more than once...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;But if you try it, you'll find out it works...&lt;/p&gt; &lt;p&gt;How?&lt;/p&gt; &lt;p&gt;A another look with reflector will reveal the secret:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.google.com/Yonatan.Leonov/R4FI7nqFPMI/AAAAAAAAAGQ/VMwJn0L7yc8/image%5B18%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="293" alt="image" src="http://lh3.google.com/Yonatan.Leonov/R4FI9HqFPNI/AAAAAAAAAGY/JO8l-Dnwf0c/image_thumb%5B10%5D" width="295" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;What happened? Where come from those &lt;strong&gt;&lt;em&gt;MergedA850&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;MergerdB1071&lt;/em&gt;&lt;/strong&gt; ?&lt;/p&gt; &lt;p&gt;The magic sits inside &lt;em&gt;ILMerge&lt;/em&gt;. it has noticed the conflict between the two types with the same name (which now inside the same assembly - so "&lt;em&gt;Internal&lt;/em&gt;"won't help) and just made each of them a new name!&lt;/p&gt; &lt;p&gt;read the following section from &lt;em&gt;ILMerge &lt;/em&gt;help file:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The normal behavior of ILMerge is to not allow there to be more than one public type with the same name. If such a duplicate is found, then an exception is thrown. However, ILMerge can just rename the type so that it no longer causes a conflict. For private types, this is not a problem since no outside client can see it anyway, so ILMerge just does the renaming by default.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So, because Infra1 &amp;amp; Infra2 weren't public - they just got new names.&lt;/p&gt; &lt;p&gt;(Actually, you can do it for public types as well - using the &lt;strong&gt;&lt;em&gt;/allowDup &lt;/em&gt;&lt;/strong&gt;flag).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Is it a good solution?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In my opinion (or better phrased: with my situation) it isn't.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Renamed types can break your application:&lt;br&gt;&lt;br&gt;If you use reflection in your code you may plan getting a type by its name.&lt;br&gt;But now it has a different name...&lt;br&gt; &lt;li&gt;Multiple copies of the same type is loaded into memory:&lt;br&gt;&lt;br&gt;guess what happens if you have a singleton class in the Infra.dll.&lt;br&gt;You can end up with 3 instance of one singleton... (ouch).&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;So&lt;/strong&gt; &lt;strong&gt;back to square one -&lt;br&gt;&lt;/strong&gt;How to reference multiple versions of the same assembly?&lt;/p&gt; &lt;p&gt;We have left with the two original options:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Put the two DLLs into different folders, and tell the application to probe those folders.  &lt;li&gt;Install the DLLs into the GAC.&lt;br&gt;This way they won't be copied into the Bin at all.  &lt;li&gt;Add the DLL's version to their name (e.g. Infra-1.dll)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Which one? Let's continue next time.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-1656574980455881215?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/1656574980455881215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=1656574980455881215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1656574980455881215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1656574980455881215'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/01/referencing-two-different-versions-of.html' title='Referencing different versions of an assembly - Part 3 (ILMerge)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-9214240348248109720</id><published>2008-01-03T00:40:00.001+02:00</published><updated>2008-01-07T11:36:36.994+02:00</updated><title type='text'>Referencing different versions of an assembly - Part 2 (ILMerge)</title><content type='html'>&lt;p&gt;This is where we stopped in &lt;a href="http://readcommit.blogspot.com/2007/12/referencing-two-different-version-of.html" target="_blank"&gt;Part 1&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.google.com/Yonatan.Leonov/R3wSuHqFO-I/AAAAAAAAAEg/BeX49RGFaMI/image285"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="326" alt="image28" src="http://lh3.google.com/Yonatan.Leonov/R3wSvXqFO_I/AAAAAAAAAEo/W1_zdUAmv3E/image28_thumb3" width="396" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We have ended up with two merged assemblies (&lt;em&gt;MergedA&lt;/em&gt; &amp;amp; &lt;em&gt;MergedB&lt;/em&gt;) which are referenced by App1.&lt;/p&gt; &lt;p&gt;Now let's complicate things a little:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.google.com/Yonatan.Leonov/R3wSwnqFPAI/AAAAAAAAAEw/TA5CZBwfuOU/image6"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="313" alt="image" src="http://lh4.google.com/Yonatan.Leonov/R3wSxnqFPBI/AAAAAAAAAE4/ALorVO2cmVg/image_thumb4" width="466" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;All I wanted to do is to use infra.dll (the version isn't critical for this discussion) inside my main application (App1).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you try to use any type from infra.dll in App1 code and build the solution, you'll get:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;The type "infra.xyz" exists in both 'MergedA.dll' and 'MergeB.dll'&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;What is it all about?&lt;br&gt;&lt;br&gt;When I used &lt;em&gt;infra.xyz&lt;/em&gt; type, the compiler tries to find where is it declared, but find at least two places (actually there are three). So it can't decide which one you want... &lt;/p&gt; &lt;p&gt;I got a question about this in &lt;a href="http://readcommit.blogspot.com/2007/12/referencing-two-different-version-of.html#c4066590711182298752" target="_blank"&gt;a comment on Part 1&lt;/a&gt; from &lt;a href="http://www.blogger.com/profile/13759114853595462455"&gt;Kevin Berridge&lt;/a&gt;, and actually I have crashed into the same problem few hours before, too.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The solution - &lt;u&gt;&lt;em&gt;ILMerge&lt;/em&gt; &lt;/u&gt;&lt;/strong&gt;&lt;u&gt;with &lt;strong&gt;/&lt;em&gt;internalize&lt;/em&gt;&lt;/strong&gt; switch&lt;/u&gt;:&lt;/p&gt; &lt;p&gt;The problem was created because all types inside infra.dll were exposed both by MergedA &amp;amp; by MergedB.&lt;/p&gt; &lt;p&gt;If we can make the &lt;strong&gt;&lt;em&gt;infra&lt;/em&gt;&lt;/strong&gt; part in the merged assembly internal only, our main application wouldn't be able to see it.&lt;/p&gt; &lt;p&gt;And this is exactly what &lt;strong&gt;/&lt;em&gt;internalize&lt;/em&gt;&lt;/strong&gt; does.&lt;br&gt;&lt;a href="http://lh6.google.com/Yonatan.Leonov/R3wSyHqFPCI/AAAAAAAAAFA/OrMchkdseVw/image%5B4%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="250" alt="image" src="http://lh6.google.com/Yonatan.Leonov/R3wSzHqFPDI/AAAAAAAAAFI/xVVoGAj5k3s/image_thumb%5B1%5D" width="393" border="0"&gt;&lt;/a&gt;&lt;br&gt;Only the first dll file in the merge list is left public (in yellow), and all the rest assemblies are converted to be internal (in turquoise).&lt;/p&gt; &lt;p&gt;You can see it using .Net Reflector:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.google.com/Yonatan.Leonov/R3zeFHqFPEI/AAAAAAAAAFQ/b-dNl4yMw1o/clip_image001%5B3%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="clip_image001" src="http://lh5.google.com/Yonatan.Leonov/R3zeF3qFPFI/AAAAAAAAAFY/vdDE0eVMOqo/clip_image001_thumb" width="156" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Originally, Class1 was &lt;strong&gt;public&lt;/strong&gt; (inside Infra)  &lt;p&gt;&lt;a href="http://lh4.google.com/Yonatan.Leonov/R3zeGnqFPGI/AAAAAAAAAFg/XeTb6KKaSvM/clip_image001%5B6%5D%5B2%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="77" alt="clip_image001[6]" src="http://lh6.google.com/Yonatan.Leonov/R3zeHHqFPHI/AAAAAAAAAFo/pEH-jr8Lgq0/clip_image001%5B6%5D_thumb" width="201" border="0"&gt;&lt;/a&gt;  &lt;p&gt;After merging with &lt;strong&gt;/&lt;em&gt;internalize&lt;/em&gt;&lt;/strong&gt; it is now &lt;strong&gt;Internal&lt;/strong&gt; (inside MergedA)  &lt;p&gt;&lt;a href="http://lh4.google.com/Yonatan.Leonov/R3zeHnqFPII/AAAAAAAAAFw/S-7MAtRk0lw/clip_image001%5B4%5D%5B2%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="78" alt="clip_image001[4]" src="http://lh4.google.com/Yonatan.Leonov/R3zeInqFPJI/AAAAAAAAAF4/Y9ER518Ja3s/clip_image001%5B4%5D_thumb" width="224" border="0"&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;Now App1 knows of only one &lt;em&gt;infra.xyz&lt;/em&gt;, and &lt;strong&gt;&lt;u&gt;the build succeed&lt;/u&gt;!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Question for the next part&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;What will happen if you merge App1 too?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Next: &lt;a href="http://readcommit.blogspot.com/2008/01/referencing-two-different-versions-of.html" target="_blank"&gt;Part 3&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/10575523-9214240348248109720?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/9214240348248109720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=9214240348248109720' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/9214240348248109720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/9214240348248109720'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2008/01/referencing-two-different-version-of.html' title='Referencing different versions of an assembly - Part 2 (ILMerge)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-231364091190250796</id><published>2007-12-27T02:24:00.001+02:00</published><updated>2008-01-07T11:36:11.993+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ILMerge'/><title type='text'>Referencing different versions of an assembly - Part 1 (ILMerge)</title><content type='html'>&lt;p&gt;Consider the following scenario:&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;a href="http://lh3.google.com/Yonatan.Leonov/R3Lwt22dt3I/AAAAAAAAADg/65ooKqk9N9Y/image12"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="241" alt="image" src="http://lh3.google.com/Yonatan.Leonov/R3Lwu22dt4I/AAAAAAAAADo/OxBnYgMnipI/image_thumb4" width="393" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We have one huge monolithic Visual Studio solution.&lt;/p&gt; &lt;p&gt;It contains two applications (&lt;em&gt;App1&lt;/em&gt; &amp;amp; &lt;em&gt;App2&lt;/em&gt;) which references lots of other projects (of which I have drawn three - &lt;em&gt;A&lt;/em&gt;, &lt;em&gt;B&lt;/em&gt; &amp;amp; &lt;em&gt;C&lt;/em&gt;), which in turn reference Some other project - "&lt;em&gt;Infra&lt;/em&gt;".&lt;/p&gt; &lt;p&gt;Our business requires that we'll develop a new version of &lt;em&gt;&lt;strong&gt;App1&lt;/strong&gt;&lt;/em&gt; which will require a new version of &lt;strong&gt;&lt;em&gt;Project A&lt;/em&gt; &lt;/strong&gt;and a new version for &lt;strong&gt;&lt;em&gt;Infra. &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We could have update &lt;em&gt;Infra&lt;/em&gt;, and then update &lt;em&gt;Project A&lt;/em&gt; as well as &lt;em&gt;Project B&lt;/em&gt; and &lt;em&gt;C&lt;/em&gt; and actually release a new version for the whole line of products.&lt;/p&gt; &lt;p&gt;But this is not such a great idea - as it will require building, testing and deploying of &lt;em&gt;App2&lt;/em&gt; without gaining any business advantage. &lt;/p&gt; &lt;p&gt;(You could think that we can just leave the previous version of App2, but actually we need to update it in this scenario to be able to deploy hotfix in case of finding a bug in Infra for example)&lt;/p&gt; &lt;p&gt;So what we actually need is to manage branches and versions.&lt;br&gt;This will look like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.google.com/Yonatan.Leonov/R3Lwvm2dt5I/AAAAAAAAADw/EoE1O08aKGQ/image16"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="256" alt="image" src="http://lh6.google.com/Yonatan.Leonov/R3Lwwm2dt6I/AAAAAAAAAD4/fpQ3rXCQl2Q/image_thumb6" width="394" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In this diagram we have made a branch for Infra project and have two versions for it. Project A will use the newer version (V1) while others will use the older version (V2).&lt;/p&gt; &lt;p&gt;We have, however, an &lt;strong&gt;implementation problem&lt;/strong&gt; here - as you can't hold the same project twice in on Visual Studio solution. &lt;/p&gt; &lt;p&gt;We can fix it by breaking out Infra project from the solution into its own solution, and reference DLLs instead projects. This will look like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.google.com/Yonatan.Leonov/R3LwxW2dt7I/AAAAAAAAAEA/-Jru3apO2UE/image19"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="242" alt="image" src="http://lh4.google.com/Yonatan.Leonov/R3LwyG2dt8I/AAAAAAAAAEI/RtcNJCIOs9w/image_thumb7" width="244" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;(I have left App2 outside this diagram as it not needed for the explanation any more)&lt;/p&gt; &lt;p&gt;This way, each project will reference the version it needs (using "Specific Version"). &lt;/p&gt; &lt;p&gt;But is referencing DLLs actually solve the problem?&lt;/p&gt; &lt;p&gt;Let's look at the Bin folder of our projects:&lt;/p&gt; &lt;p&gt;Project A --&amp;gt; Bin --&amp;gt; Infra.dll (version 2)&lt;br&gt;Project B --&amp;gt; Bin --&amp;gt; Infra.dll (version 1)&lt;/p&gt; &lt;p&gt;App1 --&amp;gt; Bin --&amp;gt; Infra.dll (&lt;strong&gt;which version&lt;/strong&gt; &lt;strong&gt;???&lt;/strong&gt;)&lt;/p&gt; &lt;p&gt;You see, windows' folders can't contain the two files with the same name...&lt;br&gt;I don't know which of them we will end with - but it doesn't matter - we need both!&lt;/p&gt; &lt;p&gt;At first we have came with 3 options to solve this new problem:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Put the two DLLs into different &lt;strong&gt;sub folders&lt;/strong&gt; under Bin (via post build script), and tell the application to probe those folders.&lt;br&gt; &lt;li&gt;Install the DLLs into the GAC.&lt;br&gt;This way they won't be copied into the Bin at all.&lt;br&gt; &lt;li&gt;Add the DLL's version to their name (e.g. Infra-1.dll)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Each option has its pros and cons, and I won't go deeper into it.&lt;br&gt;Why bother selecting the less bad option if you can find a good one? (Thanks Pavel!)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;ILMerge&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This application knows to merge multiple .NET assemblies into a single assembly.&lt;/p&gt; &lt;p&gt;How would that help? See:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.google.com/Yonatan.Leonov/R3LwzW2dt9I/AAAAAAAAAEQ/2qxBJaZI3F8/image28"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="344" alt="image" src="http://lh5.google.com/Yonatan.Leonov/R3Lw0W2dt-I/AAAAAAAAAEY/zHUJ3c_BAdg/image_thumb12" width="419" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#445566"&gt;With the ILMerge solution, you can keep every thing normal (not changing Assemblies names, without the need for the GAC and without using complicated sub folders).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#445566"&gt;The only thing you need is to put post build event to do ILMerge on Project A &amp;amp; B.&lt;br&gt;Then reference the Merged DLLs from App1. Simple - isn't it?&lt;/font&gt;&lt;font color="#445566"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#445566"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#445566"&gt;You can &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-B4AD-4EAE-87CF-B14AE6A939B0&amp;amp;displaylang=en" target="_blank"&gt;download ILMerge here&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#445566"&gt;See those docs for description of the problem:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/en-us/library/0z1t9z56(VS.80).aspx" href="http://msdn2.microsoft.com/en-us/library/0z1t9z56(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/0z1t9z56(VS.80).aspx&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;a title="http://msdn2.microsoft.com/en-us/library/3b12we19(VS.80).aspx" href="http://msdn2.microsoft.com/en-us/library/3b12we19(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/3b12we19(VS.80).aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;See next parts:&lt;/p&gt; &lt;p&gt;&lt;a href="http://readcommit.blogspot.com/2008/01/referencing-two-different-version-of.html" target="_blank"&gt;Part 2&lt;/a&gt;&lt;br&gt;&lt;a href="http://readcommit.blogspot.com/2008/01/referencing-two-different-versions-of.html" target="_blank"&gt;Part 3&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-231364091190250796?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/231364091190250796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=231364091190250796' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/231364091190250796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/231364091190250796'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/12/referencing-two-different-version-of.html' title='Referencing different versions of an assembly - Part 1 (ILMerge)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-5091336855533346974</id><published>2007-12-24T00:00:00.001+02:00</published><updated>2007-12-24T00:00:44.215+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team System'/><title type='text'>Was Never...</title><content type='html'>&lt;p&gt;So in MSDN (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms181348(VS.80).aspx" target="_blank"&gt;How to: Add New Work Item Queries&lt;/a&gt;) it says you have an Operator called "Was Never":&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="95" alt="image" src="http://lh6.google.com/Yonatan.Leonov/R27ahm2dt1I/AAAAAAAAADQ/1BBo_mvc_YQ/image%5B16%5D" width="514" border="0"&gt;&lt;/p&gt; &lt;p&gt;But when you open the drop down list, you only see "Was Ever":&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="306" alt="image" src="http://lh3.google.com/Yonatan.Leonov/R27ai22dt2I/AAAAAAAAADY/JD4tFL29k88/image%5B15%5D" width="441" border="0"&gt;&lt;/p&gt; &lt;p&gt;And if you try to write it by yourself, you get:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;TF20032: &lt;b&gt;The operator for row&lt;/b&gt; {0} is not recognized or missing&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So, is it a bug, or am I missing something?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-5091336855533346974?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/5091336855533346974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=5091336855533346974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5091336855533346974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5091336855533346974'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/12/was-never.html' title='Was Never...'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-3332581764217444725</id><published>2007-12-23T23:20:00.001+02:00</published><updated>2007-12-23T23:30:02.587+02:00</updated><title type='text'>A Tour in Jerusalem</title><content type='html'>&lt;p&gt;We had travel to Jerusalem this week.&lt;br&gt;By "we" I mean the employees in the company I work for.&lt;/p&gt; &lt;p&gt;&lt;a title="" href="http://www.flickr.com/photos/45968467@N00/2122609868/"&gt;&lt;img alt="" src="http://static.flickr.com/2192/2122609868_462a94b5a0.jpg" border="0"&gt;&lt;/a&gt;(&lt;a href="http://en.wikipedia.org/wiki/Tower_of_David" target="_blank"&gt;Tower of David&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'm not a stranger to Jerusalem. I have been there countless times.&lt;br&gt;Nevertheless, you always find new things in this city.&lt;/p&gt; &lt;p&gt;It can be a Fish Stand in &lt;a href="http://en.wikipedia.org/wiki/Mahane_Yehuda" target="_blank"&gt;Mahane Yehuda Market&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a title="" href="http://www.flickr.com/photos/45968467@N00/2122609812/"&gt;&lt;img alt="" src="http://static.flickr.com/2327/2122609812_8d6a99594c.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Or an &lt;a href="http://jewishrefugees.blogspot.com/2006/08/ades-synagogue-preserves-syrian.html" target="_blank"&gt;old Synagogue&lt;/a&gt; with error in the order of the Ten Commandments:&lt;br&gt;(See if you can spot it)&lt;/p&gt; &lt;p&gt;&lt;a title="" href="http://www.flickr.com/photos/45968467@N00/2122609524/"&gt;&lt;img alt="" src="http://static.flickr.com/2342/2122609524_8516738c6a.jpg" align="middle" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A new Museum (&lt;a href="http://english.thekotel.org/content.asp?Id=228" target="_blank"&gt;The Generation Center&lt;/a&gt;, near the Western Wall Tunnels)&lt;/p&gt; &lt;p&gt;&lt;a title="" href="http://www.flickr.com/photos/45968467@N00/2121833353/"&gt;&lt;img alt="" src="http://static.flickr.com/2221/2121833353_1f255f8ddb.jpg" align="middle" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Or just an interesting window (but you need to understand &lt;a href="http://www.usatoday.com/news/world/2005-06-12-israel-orange_x.htm" target="_blank"&gt;the background&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;a title="" href="http://www.flickr.com/photos/45968467@N00/2122609488/"&gt;&lt;img alt="" src="http://static.flickr.com/2420/2122609488_3886d5d9c2.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So, what should I add?&lt;/p&gt; &lt;p&gt;go and visit (or revisit) &lt;strong&gt;Jerusalem&lt;/strong&gt; - &lt;strong&gt;The Holy City&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Or at least visit my &lt;a href="http://www.flickr.com/photos/leonov/sets/72157603495374404/" target="_blank"&gt;Jerusalem Album on Flickr&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/10575523-3332581764217444725?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/3332581764217444725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=3332581764217444725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3332581764217444725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3332581764217444725'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/12/tour-in-jerusalem.html' title='A Tour in Jerusalem'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6301173660688128458</id><published>2007-12-13T10:43:00.001+02:00</published><updated>2007-12-13T11:01:10.304+02:00</updated><title type='text'>Problems that are fixed in the .NET Framework 2.0 Service Pack 1</title><content type='html'>&lt;p&gt;At last!!!&lt;/p&gt; &lt;p&gt;Microsoft just published the so missed article (KB 945757):&lt;/p&gt; &lt;p&gt;&lt;a href="http://support.microsoft.com/?id=945757" target="_blank"&gt;Problems that are fixed in the .NET Framework 2.0 Service Pack 1&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Thanks &lt;a href="http://blogs.msdn.com/MemiLavi" target="_blank"&gt;Memi&lt;/a&gt; for updating me on this.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you compare it with the list I have supplied - you can see that are a lot more fixes in the SP1 than I have succeed to find (70 in my list vs. 161 in the SP1)&lt;/p&gt; &lt;p&gt; But there at least some hotfix in my list which haven't entered the SP1 (944100, 943598 and 943175 for example).&lt;/p&gt; &lt;p&gt;Probably those were fixed too late for entering Service Pack 1 - so if you need them fixed - ask for the specific hotfix.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So now - go read the full list - and decide if/when to deploy it.&lt;/p&gt; &lt;p&gt;Good luck.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-6301173660688128458?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6301173660688128458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6301173660688128458' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6301173660688128458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6301173660688128458'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/12/problems-that-are-fixed-in-net.html' title='Problems that are fixed in the .NET Framework 2.0 Service Pack 1'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-44027926634112628</id><published>2007-12-03T17:06:00.001+02:00</published><updated>2007-12-03T17:06:13.566+02:00</updated><title type='text'>Rosario: Business Objective, Feature and Requirement</title><content type='html'>&lt;p&gt;&lt;em&gt;&lt;font color="#a43500"&gt;Initial comment:&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;font color="#a43500"&gt;The following explanation is based on November Rosario CTP, and it is only my understanding of the product. Maybe I haven't got it right. Comments are welcome.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;When you look at Rosario's CMMI work items, you meet some old and new types which used for Requirement Management:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Business objective (new)  &lt;li&gt;Feature (new)  &lt;li&gt;Requirement &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Now,&amp;nbsp; as far as I could see, the CMMI project site hasn't been updated yet with descriptions for the new work item types, so I will try to describe their roles by myself.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;A little bit about Relations&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Rosario presents different types of relations between work items.&lt;/p&gt; &lt;p&gt;Parent - Child&lt;br&gt;Fulfilled by - Fulfills&lt;br&gt;Predecessor - Successor&lt;br&gt;Tested by - Tests&lt;br&gt;Related - Related&lt;/p&gt; &lt;p&gt;Some work items defines what type of relation they should be part of.&lt;br&gt;See below for details.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;u&gt;Business Objective&lt;/u&gt; &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As I understand, it should represent a objective which can be achieved in multiple ways. it &lt;strong&gt;doesn't &lt;/strong&gt;come to describe &lt;strong&gt;what should be done,&lt;/strong&gt; it comes to describe what &lt;strong&gt;should be achieved&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Relations:&lt;/p&gt; &lt;p&gt;It's possible to have a tree of &lt;em&gt;BO (Business Objective)&lt;/em&gt;, but it seems Microsoft doesn't mean you use it in that way (you can see it by the lack of "parent-Child" in its UI).&lt;br&gt;Its main use is with &lt;em&gt;Feature&lt;/em&gt; in "Fulfilled by - Fulfills" relation.&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;&lt;em&gt;Feature&lt;/em&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/em&gt;, in contrast with BO, describe what should be done, in different levels of abstraction. &lt;/p&gt; &lt;p&gt;Relations:&lt;/p&gt; &lt;p&gt;This work item suggested to be used in tree like "Parent-child" Hierarchy of &lt;em&gt;Features.&lt;/em&gt; It can also take part in relation of "Fulfilled by - Fulfills" with &lt;em&gt;Business Objectives.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;&lt;em&gt;Requirement&lt;/em&gt;&lt;/strong&gt;&lt;/u&gt; &lt;/p&gt; &lt;p&gt;&lt;em&gt;Features&lt;/em&gt; and &lt;em&gt;Requirement&lt;/em&gt; are really similar, and the only difference I could point out is that while Feature has the "Fulfilling" connection to other items (probably for use with &lt;em&gt;BO) Requirement &lt;/em&gt;doesn't. in fact, it doesn't have a built in UI for a "Parent-Child" relation either, so it seems Microsoft wants us to use it as the most detailed and low level item in "Requirement Management" before &lt;em&gt;Task&lt;/em&gt; level&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;to be continued...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-44027926634112628?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/44027926634112628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=44027926634112628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/44027926634112628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/44027926634112628'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/12/rosario-business-objective-feature-and.html' title='Rosario: Business Objective, Feature and Requirement'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-3815064415888514374</id><published>2007-11-30T12:33:00.001+02:00</published><updated>2007-11-30T12:33:41.318+02:00</updated><title type='text'>TFS Branch History - New feature in Rosario</title><content type='html'>&lt;p&gt;I haven't told you about CodePlex project I have started more than a year ago.&lt;/p&gt; &lt;p&gt;It called:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/TFSBranchHistory"&gt;TFS Follow Branch History Add-in for VS&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The goal of this project is to fulfill the missing feature of full branch history of items in TFS explorer GUI.&lt;/p&gt; &lt;p&gt;Why do I tell you about it?&lt;br&gt;Because it's going to &lt;strong&gt;become obsolete&lt;/strong&gt; when Rosario comes:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Microsoft has released &lt;a href="http://go.microsoft.com/?linkid=7807943" target="_blank"&gt;&lt;strong&gt;History Improvements&lt;/strong&gt; Feature Specification document&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;This feature actually complete all the missing functionality in TS 2005.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There are some more &lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/bb936702.aspx" target="_blank"&gt;Feature Specification docs&lt;/a&gt; available currently:&lt;/p&gt; &lt;ul&gt; &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=7807942"&gt;Add to Source Control&lt;/a&gt; &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=7807944"&gt;Improved Label Dialog&lt;/a&gt;&lt;/p&gt;&lt;/ul&gt; &lt;p&gt;if you have comments or questions on those docs, the TFS team want you to send them in &lt;a href="http://forums.microsoft.com/MSDNWorkShop/ShowForum.aspx?ForumID=1981&amp;amp;SiteID=64"&gt;Technology Area - Team Foundation Server&lt;/a&gt; Forum. &lt;p&gt;Hope it will help you get ready to Rosario.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-3815064415888514374?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/3815064415888514374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=3815064415888514374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3815064415888514374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/3815064415888514374'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/tfs-branch-history-new-feature-in.html' title='TFS Branch History - New feature in Rosario'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6100100242573870495</id><published>2007-11-28T17:11:00.001+02:00</published><updated>2007-11-28T17:11:25.740+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='Team System'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Dept Payment (Build Failure Email Alert)</title><content type='html'>&lt;p&gt;Almost a year ago I told you about the Build Failure Alert system which I have build:&lt;br&gt;&lt;a href="http://readcommit.blogspot.com/2007/01/team-build-failure-email-alert-make-it.html"&gt;Team Build - Failure Email Alert - Make it Actually work for you&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I have promise some code samples.&lt;/p&gt; &lt;p&gt;So here it is:&lt;/p&gt; &lt;p&gt;&lt;a title="Build Failure Email" href="http://cid-c5065183f39dbaaa.skydrive.live.com/browse.aspx/Public/DevSamples/Build%20Failure%20Email" target="_blank"&gt;Build Failure Email - Code Sample&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/10575523-6100100242573870495?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6100100242573870495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6100100242573870495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6100100242573870495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6100100242573870495'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/dept-payment-build-failure-email-alert.html' title='Dept Payment (Build Failure Email Alert)'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6099132053046643330</id><published>2007-11-26T17:47:00.001+02:00</published><updated>2008-05-13T10:33:55.985+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Service Pack'/><category scheme='http://www.blogger.com/atom/ns#' term='SP1'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Hotfix'/><title type='text'>what MIGHT be in .NET 2.0 SP1</title><content type='html'>&lt;p&gt;&lt;font size="3"&gt;UPDATE: &lt;strong&gt;The missing article was published&lt;/strong&gt;!!! &lt;/font&gt;&lt;a href="http://readcommit.blogspot.com/2007/12/problems-that-are-fixed-in-net.html" target="_blank"&gt;&lt;font size="3"&gt;read my comment&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I still wait Microsoft to release a document with list of fixes and changes in SP1.   &lt;br /&gt;but Microsoft hasn't answered yet... So we should do the job instead.&lt;/p&gt;  &lt;p&gt;Here is a list of Hotfix knowledge base (KB) articles which contain (by Google search) the sentence:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;we recommend that you wait for the next .NET Framework 2.0 service pack that contains this hotfix&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is by no means a guarantee that those hotfixes were actually fixed in SP1, it's only my best effort to predict what &lt;strong&gt;may&lt;/strong&gt; entered into the service pack. &lt;/p&gt;  &lt;p&gt;Actually, this is a list of all (I hope) the hotfixes microsoft publish for .NET 2.0.   &lt;br /&gt;I wish Microsoft at least had made an aggregation page like this.&lt;/p&gt;  &lt;p&gt;Hope it will help someone out there.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;UPDATE: &lt;strong&gt;The missing article was published&lt;/strong&gt;!!! &lt;/font&gt;&lt;a href="http://readcommit.blogspot.com/2007/12/problems-that-are-fixed-in-net.html" target="_blank"&gt;&lt;font size="3"&gt;read my comment&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/915088"&gt;915088&lt;/a&gt;    &lt;br /&gt;FIX: The .NET Framework 2.0 Thread.IsThreadPoolThread property always returns a value of false, and the SQL Server 2005 Reporting Services log file grows uncontrollably&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/919804"&gt;919804&lt;/a&gt;    &lt;br /&gt;The Microsoft .NET Framework 2.0 client closes a persistent connection to a Web server when you try to access a forbidden resource from the Web server that returns an HTTP 403 status code &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/921217"&gt;921217&lt;/a&gt;    &lt;br /&gt;FIX: A deadlock may occur when you use COM interop cross-context interface marshaling in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/936707"&gt;936707&lt;/a&gt;    &lt;br /&gt;FIX: A .NET Framework 2.0 managed application that has an Authenticode signature takes longer than usual to start &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/921968"&gt;921968&lt;/a&gt;    &lt;br /&gt;FIX: The .NET Framework 2.0 does not serialize the AttributeGroup schema elements in the correct namespace &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/913047"&gt;913047&lt;/a&gt;    &lt;br /&gt;FIX: A .NET Framework 2.0-based application may crash when you use HTTPS to download managed code from a source server computer &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/937780"&gt;937780&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you use a smart card CSP together with the &amp;quot;RSACryptoServiceProvider.SignData&amp;quot; method in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/924895"&gt;924895&lt;/a&gt;    &lt;br /&gt;FIX: An application that is based on the .NET Framework 2.0 may crash unexpectedly &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/919514"&gt;919514&lt;/a&gt;    &lt;br /&gt;FIX: When you use the MSIL Assembler in the .NET Framework 2.0 to generate a PE file from the MSIL code, the PE file may close unexpectedly, and you may receive an access violation error message &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/934839"&gt;934839&lt;/a&gt;    &lt;br /&gt;FIX: You may receive an exception when you browse a .NET Framework 2.0 ASP.NET Web application &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/941386"&gt;941386&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you run an ASP.NET 2.0 Web application that is built on the .NET Framework 2.0 after you install the MS07-040 security update: &amp;quot;Type 'System.Web.HttpHeaderCollection' is not marked as serializable&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/942086"&gt;942086&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you run an ASP.NET 2.0 Web application that is built on the .NET Framework 2.0: &amp;quot;The constructor to deserialize an object of type '&amp;lt;custom object&amp;gt;' was not found&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/912884"&gt;912884&lt;/a&gt;    &lt;br /&gt;FIX: Out of memory exceptions may occur when you run an application that is built by using the .NET Framework 2.0 in a high-load environment &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/928870"&gt;928870&lt;/a&gt;    &lt;br /&gt;FIX: An exception is not handled correctly when you use a try-catch block to handle an exception from multi-threads in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/917882"&gt;917882&lt;/a&gt;    &lt;br /&gt;FIX: A synchronized method that has security callouts may not save a return value after control returns to the calling function in an application that is built by using the 64-bit version of the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/925076"&gt;925076&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you use the System.Xml.Serialization.XmlRootAttribute.Namespace property for an anonymous Web Service type in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/942027"&gt;942027&lt;/a&gt;    &lt;br /&gt;FIX: You may notice that the memory load is very high when you run an application that is built on the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/929425"&gt;929425&lt;/a&gt;    &lt;br /&gt;FIX: A memory leak may occur when you call a C DLL from a C# class that includes strings in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/922935"&gt;922935&lt;/a&gt;    &lt;br /&gt;FIX: Message when you try to start a ClickOnce program in the .NET Framework 2.0: &amp;quot;Do you want to install this application?&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/924289"&gt;924289&lt;/a&gt;    &lt;br /&gt;FIX: The application process may unexpectedly stop when you run a managed application that is based on the .NET Framework 2.0, or the server may shut down when you run managed code in SQL Server 2005 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/927579"&gt;927579&lt;/a&gt;    &lt;br /&gt;FIX: The System.Net.Security.SslStream class always calls the InitializeSecurityContext function by using only one input buffer in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/938276"&gt;938276&lt;/a&gt;    &lt;br /&gt;FIX: The # Induced GC performance counter value increases quickly and CPU usage becomes high when you run an ASP.NET 2.0 Web application that is built on the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/932602"&gt;932602&lt;/a&gt;    &lt;br /&gt;FIX: You may experience a decrease in the performance of a .NET Framework 2.0-based application when you call the System.Web.UI.MobileControls.Style.GetValue method many times &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/934334"&gt;934334&lt;/a&gt;    &lt;br /&gt;FIX: A memory leak occurs when a managed application uses a platform invoke call to call an unmanaged function in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/928563"&gt;928563&lt;/a&gt;    &lt;br /&gt;FIX: The System.Net.HttpWebRequest class may not maintain a persistent connection to a proxy in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/921118"&gt;921118&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you try to compile a large intermediate language file by using the Ilasm.exe tool in the .NET Framework 2.0: &amp;quot;Duplicate global label '_MF_LIT_530223'&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/913297"&gt;913297&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you try to run a Web application that was built by using the .NET Framework 2.0: &amp;quot;Overwhelming changes have occurred&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/942084"&gt;942084&lt;/a&gt;    &lt;br /&gt;FIX: Error message if you use the &amp;quot;CspParameters&amp;quot; class to programmatically set a password in an application that is built on the .NET Framework 2.0: &amp;quot;Incorrect PIN&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/926595"&gt;926595&lt;/a&gt;    &lt;br /&gt;FIX: Server garbage collector threads may enter an endless loop condition in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/923562"&gt;923562&lt;/a&gt;    &lt;br /&gt;Error message when you use the System.Data.OleDb namespace in the .NET Framework 2.0 to retrieve data from the OLE DB Provider for SQL Server: &amp;quot;ICommandText interface is not supported by the 'SQLOLEDB' provider&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/917447"&gt;917447&lt;/a&gt;    &lt;br /&gt;FIX: An access violation may occur when a .NET Framework 2.0-based application calls the IWebProxy.GetProxy method &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/917952"&gt;917952&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you try to install a ClickOnce application that you created in the .NET Framework 2.0 onto a client computer that is configured to use a proxy server: &amp;quot;Proxy authentication required&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/913382"&gt;913382&lt;/a&gt;    &lt;br /&gt;FIX: Windows Error Reporting crashes when the Sos.dll file is loaded in memory in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/913766"&gt;913766&lt;/a&gt;    &lt;br /&gt;FIX: A DateTime column that does not contain any data is incorrectly represented by a DateTime.MinValue field when a .NET Framework 2.0 DataSet object is deserialized on a client computer &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/928569"&gt;928569&lt;/a&gt;    &lt;br /&gt;FIX: The first CLR thread pool worker thread is never initialized for COM+ in an ASP.NET Web application that is configured to run under the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/918166"&gt;918166&lt;/a&gt;    &lt;br /&gt;FIX: You may receive an error message when you try to generate a Web reference for a Web service by using the Wsdl.exe tool in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/933905"&gt;933905&lt;/a&gt;    &lt;br /&gt;FIX: Multiple cookies may be merged under one Set-Cookie header in the HTTP response when a .NET Framework 2.0 application calls the &amp;quot;HttpListenerResponse.SetCookie&amp;quot; method &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/942708"&gt;942708&lt;/a&gt;    &lt;br /&gt;FIX: You may receive a &amp;quot;SerializationException&amp;quot; exception when you use a class that implements the &amp;quot;INotifyPropertyChanged&amp;quot; interface in an application that is built on the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/913753"&gt;913753&lt;/a&gt;    &lt;br /&gt;FIX: You only receive notification for the first e-mail message when you send multiple e-mail messages by using the System.Net.Mail namespace in a .NET Framework 2.0-based application &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/917507"&gt;917507&lt;/a&gt;    &lt;br /&gt;FIX: JIT compilation may take much longer when you run a .NET Framework 2.0 application on a 64-bit computer &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/943598"&gt;943598&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you try to run an ASP.NET 2.0 Web application if you do not associate the My_Computer_Zone code group with the &amp;quot;full trust&amp;quot; permission set: &amp;quot;Server Application Unavailable&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/922674"&gt;922674&lt;/a&gt;    &lt;br /&gt;FIX: The OracleDataReader.GetChars method may return the incorrect data in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/923781"&gt;923781&lt;/a&gt;    &lt;br /&gt;FIX: You may encounter a System.NullReferenceException exception when you call a COM interface method in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/939731"&gt;939731&lt;/a&gt;    &lt;br /&gt;FIX: A memory leak may occur when you create and then delete Windows form control objects in an application that is built on the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/915980"&gt;915980&lt;/a&gt;    &lt;br /&gt;FIX: You may receive a &amp;quot;security exception&amp;quot; error message on a Windows 2000-based or Windows Server 2003-based computer that is running an ASP.NET 2.0-based application &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/917493"&gt;917493&lt;/a&gt;    &lt;br /&gt;FIX: Internet Explorer may freeze when you click a link to start a .NET Framework 2.0 client application in Internet Explorer and another file download is already in progress &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/944100"&gt;944100&lt;/a&gt;    &lt;br /&gt;FIX: You cannot manipulate the data table that is used a transaction in a .NET Framework 2.0-based Web project when you run a long-running stored procedure or an SQL script in the project &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/937320"&gt;937320&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you call the &amp;quot;System.Xml.Xsl.XslTransform.Transform&amp;quot; method two times in a .NET Framework 2.0-based application: &amp;quot;Circular reference in the definition of variable &amp;lt;variable name&amp;gt;&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/939783"&gt;939783&lt;/a&gt;    &lt;br /&gt;FIX: The value of the ImeMode property automatically changes to the Off value in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/934593"&gt;934593&lt;/a&gt;    &lt;br /&gt;FIX: Random values may be written to the float parameters of some functions in a custom application that you create by using the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/915430"&gt;915430&lt;/a&gt;    &lt;br /&gt;FIX: Not all paths that are specified in the DEVPATH environment variable will be considered by the .NET binding infrastructure (fusion) in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/916209"&gt;916209&lt;/a&gt;    &lt;br /&gt;FIX: Parentheses may be added around every letter when you type a line of code in the Visual Basic 2005 Code Editor on a computer that is running the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/937460"&gt;937460&lt;/a&gt;    &lt;br /&gt;FIX: You cannot use the TAB key to change the focus in a .NET Framework 2.0-based Windows Forms application that dynamically changes binding sources &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/940104"&gt;940104&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you use an application that is built on the .NET Framework 2.0 to run a query: &amp;quot;Object reference not set to an instance of an object&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/923325"&gt;923325&lt;/a&gt;    &lt;br /&gt;FIX: When you use the Native Image Generator (Ngen.exe) in the .NET Framework 2.0, the size of the stack frames increases significantly &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/939670"&gt;939670&lt;/a&gt;    &lt;br /&gt;FIX: Error message when a client application that is built on the .NET Framework 2.0 sends a request to a server that is running Windows Communication Foundation: &amp;quot;HTTP/1.1 500 Internal Server Error&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/936464"&gt;936464&lt;/a&gt;    &lt;br /&gt;FIX: A client cannot determine whether a chunked HTTP response is completed when the connection is closed before the response is completely sent to the client &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/936757"&gt;936757&lt;/a&gt;    &lt;br /&gt;FIX: A deadlock may occur when two threads call a fusion API to access the same assembly in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/941078"&gt;941078&lt;/a&gt;    &lt;br /&gt;FIX: The performance of the drawing operation decreases in a Windows Forms application that was built on the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/918181"&gt;918181&lt;/a&gt;    &lt;br /&gt;FIX: You receive a ThreadAbortException exception in an ASP.NET Web application that is based in the .NET Framework 2.0 when the Async page directive property is set to true &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/940900"&gt;940900&lt;/a&gt;    &lt;br /&gt;FIX: You receive the NullReferenceException exception when you call the String.IsNullOrEmpty function in an application that is built on the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/932536"&gt;932536&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you record a Web test in Visual Studio 2005 Team System Test Edition: &amp;quot;Request Failed: Index and length must refer to a location within the string&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/917833"&gt;917833&lt;/a&gt;    &lt;br /&gt;FIX: JScript .NET script code that is running in a child scope cannot access variables that are declared in the parent scope in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/939525"&gt;939525&lt;/a&gt;    &lt;br /&gt;FIX: Error message in a .NET remoting application when you use IPv6 addresses: &amp;quot;A socket operation was attempted to an unreachable host&amp;quot; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/917752"&gt;917752&lt;/a&gt;    &lt;br /&gt;FIX: The OdbcConnection object does not report an error when you specify a transaction isolation level that is not supported by the data source in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/940932"&gt;940932&lt;/a&gt;    &lt;br /&gt;FIX: The System.Data.Index.CompareRecords method generates a System.NullReferenceException exception when you try to use code to modify a record in a data table in a .NET Framework 2.0-based application &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/913616"&gt;913616&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you try to send e-mail by using the System.Net.Mail.SmtpClient class in a Visual Studio 2005-based application &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/922271"&gt;922271&lt;/a&gt;    &lt;br /&gt;FIX: You may receive multiple error messages and experience a significant delay when you use the MSBuild.exe tool and the .NET Framework 2.0 to build a Visual C# or Visual C++ solution &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/935287"&gt;935287&lt;/a&gt;    &lt;br /&gt;FIX: A multipart/mixed MIME part is added unnecessarily when you use the System.Net.Mail namespace to send an e-mail message in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/943175"&gt;943175&lt;/a&gt;    &lt;br /&gt;FIX: The XmlSerializer class generates an unexpected result when you use the XmlSerializer class to serialize the numeration attribute in the .NET Framework 2.0 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/922531"&gt;922531&lt;/a&gt;    &lt;br /&gt;FIX: Error message when you check in files in Visual Studio 2005 Team System: &amp;quot;Attempted to read or write protected memory&amp;quot;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-6099132053046643330?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6099132053046643330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6099132053046643330' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6099132053046643330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6099132053046643330'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/what-might-be-in-net-20-sp1.html' title='what MIGHT be in .NET 2.0 SP1'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-5441914933388117317</id><published>2007-11-22T23:55:00.001+02:00</published><updated>2007-12-13T11:06:25.999+02:00</updated><title type='text'>Where is the "List of bugs" document for .NET 2.0 SP1 ???</title><content type='html'>&lt;p&gt;I just don't understand.&lt;/p&gt; &lt;p&gt;Why can't I find the obvious needed document of what was changed in the newly released .Net 2.0 Service Pack 1?&lt;/p&gt; &lt;p&gt;If you look at &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A8F5654F-088E-40B2-BBDB-A83353618B38&amp;amp;displaylang=en" target="_blank"&gt;the download page of .NET &lt;strong&gt;&lt;font size="3"&gt;1.1&lt;/font&gt;&lt;/strong&gt; SP1&lt;/a&gt; you'll see in the "Related Resources" section a link to &lt;a href="http://www.microsoft.com/downloads/info.aspx?na=40&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;u=http%3a%2f%2fgo.microsoft.com%2f%3flinkid%3d1396216"&gt;SP1 Knowledge Base Article&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;so why on earth is the same doc missing from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=79BC3B77-E02C-4AD3-AACF-A7633F706BA5&amp;amp;displaylang=en" target="_blank"&gt;the download page of .NET &lt;font size="3"&gt;2.0&lt;/font&gt; SP1&lt;/a&gt; ?&lt;br&gt;&lt;/p&gt; &lt;p&gt;My guess? It is not ready yet.&lt;br&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I went to our R&amp;amp;D Manager and ask him whether we would be able to install SP1 in our next release. So he asked me: "what is in this service pack?". And I answered:&lt;/p&gt; &lt;p&gt;&lt;font color="#333333"&gt;"Gee boss, I wish I know..."&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#333333"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;You there over Microsoft! &lt;/p&gt; &lt;p&gt;you won't be able to say RTM (I prefer the polite version), that is if you don't actually supply the manual...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;P.S.&lt;/p&gt; &lt;p&gt;I will be glad to update this blog with a link and an apology if this doc exists in the time of writing and it is just me who just can't find it.&lt;br&gt;(it happens to men all the time: &lt;a href="http://geniusbeauty.com/men-and-women/its-proved-men-see-six-time-worse-than-women/"&gt;It is Proven: Men See Six Time Worse Than Women&lt;/a&gt;)&lt;br&gt;&lt;/p&gt; &lt;p&gt;UPDATE: &lt;strong&gt;The missing article was published&lt;/strong&gt;!!! &lt;a href="http://readcommit.blogspot.com/2007/12/problems-that-are-fixed-in-net.html" target="_blank"&gt;read my comment&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/10575523-5441914933388117317?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/5441914933388117317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=5441914933388117317' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5441914933388117317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5441914933388117317'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/where-is-of-bugs-document-for-net-20.html' title='Where is the &amp;quot;List of bugs&amp;quot; document for .NET 2.0 SP1 ???'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-486868053917287710</id><published>2007-11-19T22:50:00.001+02:00</published><updated>2007-11-20T20:30:31.881+02:00</updated><title type='text'>.Net 2.0 SP1 - not supported on Vista ???</title><content type='html'>&lt;p&gt;I have download Microsoft .NET Framework 2.0 Service Pack 1 (x86).&lt;/p&gt; &lt;p&gt;As you can see, it says it support &lt;em&gt;Windows Vista&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.google.com/Yonatan.Leonov/R0H3GRFOueI/AAAAAAAAACg/1RecvHlYRsE/clip_image001%5B5%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="315" alt="clip_image001" src="http://lh3.google.com/Yonatan.Leonov/R0H3HxFOufI/AAAAAAAAACo/4Ijn0OAJ1Ws/clip_image001_thumb%5B2%5D" width="477" border="0"&gt;&lt;/a&gt;  &lt;p&gt;But when I try to install it on my Vista Ultimate (32 bit) - I get:  &lt;p&gt;&lt;a href="http://lh5.google.com/Yonatan.Leonov/R0H3JRFOugI/AAAAAAAAACw/0R9Owi-ejQ4/image%5B9%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="282" alt="image" src="http://lh5.google.com/Yonatan.Leonov/R0H3LRFOuhI/AAAAAAAAAC4/Q00HargCfeA/image_thumb%5B7%5D" width="509" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;So what is going on here?&lt;/p&gt; &lt;p&gt;&lt;u&gt;Update&lt;/u&gt;&lt;/p&gt; &lt;p&gt;I have decided to try to install .net 3.5 (as it contains the .net 2.0 SP1)&lt;br&gt;And guess what:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.google.com/Yonatan.Leonov/R0IB7RFOuiI/AAAAAAAAADA/CoJYAnUaR7s/clip_image001%5B1%5D%5B3%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="clip_image001[1]" src="http://lh3.google.com/Yonatan.Leonov/R0IB9hFOujI/AAAAAAAAADI/tJwlAuM6jxE/clip_image001%5B1%5D_thumb%5B1%5D" width="387" border="0"&gt;&lt;/a&gt;  &lt;p&gt;So the stand alone of 2.0 SP1 fails, but as part of 3.5 - it works... strange.&lt;/p&gt; &lt;p&gt;&lt;u&gt;Another update&lt;/u&gt;&lt;/p&gt; &lt;p&gt;I have submitted a comment on &lt;a href="http://blogs.msdn.com/dougste/archive/2007/11/20/installing-and-uninstalling-net-framework-2-0-sp1.aspx" target="_blank"&gt;Doug Stewart's blog&lt;/a&gt; regarding this problem, and he was nice enough to give a meaningful answer:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Because .NET 2.0 is a built in component of the operating system in Windows Vista rather than something you install separately, any updates use a completely different installer mechanism.&lt;/p&gt; &lt;p&gt;See &lt;a href="http://support.microsoft.com/kb/934307"&gt;http://support.microsoft.com/kb/934307&lt;/a&gt; for more details. &lt;p&gt;Such updates come as MSU files. &lt;p&gt;At this time we have not released a 2.0 SP1 MSU. &lt;p&gt;The .NET 3.5 install does, however, include the update to raise 2.0 on Vista to the SP1 level so that 3.5 can install and function correctly.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So now I just wish Microsoft will update their download page about supporting Vista... &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-486868053917287710?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/486868053917287710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=486868053917287710' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/486868053917287710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/486868053917287710'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/net-20-sp1-not-supported-on-vista.html' title='.Net 2.0 SP1 - not supported on Vista ???'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-838232658451610164</id><published>2007-11-19T14:33:00.001+02:00</published><updated>2007-11-19T14:33:14.615+02:00</updated><title type='text'>Visual Studio 2008 is here!</title><content type='html'>&lt;p&gt;as for &lt;a href="http://blogs.msdn.com/ukvsts/archive/2007/11/19/visual-studio-2008-has-rtm-ed.aspx" target="_blank"&gt;Neil Kidd blog&lt;/a&gt; - VS 2008 is already here.&lt;/p&gt; &lt;p&gt;I'm in my way to download it.&lt;/p&gt; &lt;p&gt;Hope to see Rosario too as fast as they can...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-838232658451610164?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/838232658451610164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=838232658451610164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/838232658451610164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/838232658451610164'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/visual-studio-2008-is-here.html' title='Visual Studio 2008 is here!'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-2505630820278051481</id><published>2007-11-15T10:40:00.001+02:00</published><updated>2007-11-15T10:40:37.308+02:00</updated><title type='text'>Live Search Webmaster Center - Verification Error</title><content type='html'>&lt;p&gt;I read MSDN Blogs.&lt;/p&gt; &lt;p&gt;And so I found out this new service "Live Search Webmaster Center".&lt;br&gt;So I wanted to play with it on my current Blog Site.&lt;/p&gt; &lt;p&gt;This service required you to prove you are the owner of the site (make sense).&lt;br&gt;In fact "Google Analytics" do the same.&lt;/p&gt; &lt;p&gt;I have choose to validate using the Meta Tag.&lt;br&gt;But I got:&lt;/p&gt; &lt;p&gt;Verification error&lt;br&gt;We weren't able to authenticate the website&lt;/p&gt; &lt;p&gt;When I look at the Source (view source) I see that BlogSpot played a little with my Meta tag:&lt;/p&gt; &lt;p&gt;the inverted commas were replaced by single apostrophe, and the order of attributes ("name" and "content") was replaced too.&lt;/p&gt; &lt;p&gt;from:&lt;/p&gt; &lt;p&gt;&amp;lt;meta name="msvalidate.01" content="&lt;em&gt;here comes the unique code&lt;/em&gt;" /&amp;gt;&lt;/p&gt; &lt;p&gt;to:&lt;/p&gt; &lt;p&gt;&amp;lt;meta content=&lt;em&gt;'here comes the unique code&lt;/em&gt;' name='msvalidate.01'/&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I don't think such minor changes should have break the validation.&lt;/p&gt; &lt;p&gt;Now, the other validation way is to put an XML file in the website's root.&lt;br&gt;But I don't think it is possible here in BlogSpot.&lt;/p&gt; &lt;p&gt;Help is needed... &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-2505630820278051481?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/2505630820278051481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=2505630820278051481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2505630820278051481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2505630820278051481'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/live-search-webmaster-center.html' title='Live Search Webmaster Center - Verification Error'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-2474909523443191311</id><published>2007-11-11T22:55:00.001+02:00</published><updated>2007-11-11T22:56:52.723+02:00</updated><title type='text'>Same IIS settings? Not any more!</title><content type='html'>&lt;p&gt;Are you using "Web Application Project" in Visual Studio 2005?&lt;br&gt;(yes, the same VS project type which was added as an add-in and later as a part of the Service Pack 1)&lt;/p&gt; &lt;p&gt;If you do, you probably know this screen shot:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.google.com/Yonatan.Leonov/RzdsV2nI0xI/AAAAAAAAACY/vjvCsNA2d9k/image%5B4%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="226" alt="image" src="http://lh6.google.com/Yonatan.Leonov/RzdsWmnI0yI/AAAAAAAAACc/6cjQhf_12-M/image_thumb%5B2%5D" width="480" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now, if you work with Source Control system you had a problem setting the project to use IIS Web Server. why? because those settings were kept in the .proj file which was saved in the Source Control System.&lt;/p&gt; &lt;p&gt;What the problem with that? it means all team members should have the same Virtual Directory or Websites.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Not any more.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Microsoft published &lt;a href="http://support.microsoft.com/kb/942844/en-us" target="_blank"&gt;an hotfix (kb 942844)&lt;/a&gt; which lets you move this information from the .proj file to the .user file&lt;/p&gt; &lt;p&gt;As you probably know, the .user file is not checked in to the source control, so each user will have its own setting.&lt;/p&gt; &lt;p&gt;You'll need to manually change the .proj file to set &lt;strong&gt;&lt;em&gt;SaveServerSettingsInUserFile &lt;/em&gt;&lt;/strong&gt;property (which the hotfix adds) to &lt;strong&gt;&lt;em&gt;true&lt;/em&gt;&lt;/strong&gt; (see the kb for exact syntax).&lt;/p&gt; &lt;p&gt;Be sure that all group's developers install it before changing this - as I guess they'll get into problems if they get the updated .proj file without the hotfix installed.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-2474909523443191311?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/2474909523443191311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=2474909523443191311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2474909523443191311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/2474909523443191311'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/same-iis-settings-not-any-more.html' title='Same IIS settings? Not any more!'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-5822784342747755503</id><published>2007-11-08T10:48:00.001+02:00</published><updated>2007-11-08T10:48:23.540+02:00</updated><title type='text'>The big question is - When</title><content type='html'>&lt;p&gt;This week Microsoft announced that "Visual Studio 2008" will be released by the end of this month (November 2007).&lt;/p&gt; &lt;p&gt;And now begins the real question: When will Visual Studio code name "Rosario" will be released...&lt;/p&gt; &lt;p&gt;Why do I take it as the &lt;strong&gt;real&lt;/strong&gt; question? &lt;/p&gt; &lt;p&gt;Because also VS 2008 does give you a lot of new Development &amp;amp; Testing options and upgrade the Build Integration ability&amp;nbsp; - its really doesn't step you forward regarding Application Life cycle Management.&lt;/p&gt; &lt;p&gt;What do I miss the most:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Built in Hierarchy between work items.&lt;/li&gt; &lt;li&gt;Word Integration for Requirements Management&lt;/li&gt; &lt;li&gt;Real Integration with Project Server (with the Hierarchy from the first bullet)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;You can, of course, develop those abilities yourself, or use open source &amp;amp; third parties tools.&lt;/p&gt; &lt;p&gt;in fact &lt;b&gt;&lt;a href="http://blogs.msdn.com/slange/default.aspx" target="_blank"&gt;Steve Lange&lt;/a&gt;&lt;/b&gt; discussed some of those options in his extremely clear article series about &lt;a href="http://blogs.msdn.com/slange/archive/2007/11/06/requirements-management-in-tfs-part-3-of-4-integrations.aspx" target="_blank"&gt;Requirements Management in TFS&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;And for Hierarchy - you can use &lt;a href="http://loicbaumann.blog.com/" target="_blank"&gt;Loïc Baumann&lt;/a&gt;'s &lt;a href="http://www.codeplex.com/wicreator" target="_blank"&gt;Work Item Creator&lt;/a&gt; application, or &lt;a href="http://www.codeplex.com/WorkItemHierarchy" target="_blank"&gt;Custom Work Item Hierarchy&lt;/a&gt; on CodePlex.&lt;/p&gt; &lt;p&gt;So why is the Rosario's Release date so critical? because it influence directly on the decision whether to implement / buy third parties tools or to wait...&lt;/p&gt; &lt;p&gt;Do you know something about the scheduled release? if you do (and of course allowed to tell) please post back.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-5822784342747755503?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/5822784342747755503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=5822784342747755503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5822784342747755503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/5822784342747755503'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/big-question-is-when.html' title='The big question is - When'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6090482526612738008</id><published>2007-11-01T09:11:00.000+02:00</published><updated>2007-11-01T09:20:56.468+02:00</updated><title type='text'>Registered with Technorati</title><content type='html'>So I found an interesting Blog Search Engine called &lt;a href="http://www.technorati.com/"&gt;Technorati&lt;/a&gt;.&lt;br /&gt;I will give it a try&lt;br /&gt;&lt;br /&gt;What do you think about it?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://technorati.com/faves?sub=addfavbtn&amp;amp;add=http://readcommit.blogspot.com"&gt;&lt;img alt="Add to Technorati Favorites" src="http://static.technorati.com/pix/fave/btn-fave2.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-6090482526612738008?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6090482526612738008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6090482526612738008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6090482526612738008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6090482526612738008'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/11/register-with-technorati.html' title='Registered with Technorati'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-1548845272675670244</id><published>2007-10-31T23:35:00.001+02:00</published><updated>2007-11-01T00:31:19.922+02:00</updated><title type='text'>Why Tablet PC is not a good Idea</title><content type='html'>&lt;p&gt;at least not when you have small kids at home...&lt;/p&gt; &lt;p&gt;I love my x60 Tablet (&lt;a href="http://www.lenovo.com/" target="_blank"&gt;Lenovo&lt;/a&gt;'s ThinkPad) and as &lt;a href="http://www.flickr.com/photos/leonov" target="_blank"&gt;Photography&lt;/a&gt; is one of my main hobbies I work on it quite a lot in its Tablet state.&lt;/p&gt; &lt;p&gt;Now, I have 3 kids at home - they all love to paint.&lt;/p&gt; &lt;p&gt;So when they saw me playing with the wonderful application - &lt;a href="http://www.ambientdesign.com/artrage.html"&gt;ArtRage&lt;/a&gt;, they have automatically joined the party.&lt;/p&gt; &lt;p&gt;This was fine with me - why not giving my little baby to draw with the WACOM pen instead of soiling gouache all over the place?&lt;/p&gt; &lt;p&gt;Until today the little one saw her big brother using the Tablet, and because the WACOM pen was taken - she just picked up a &lt;strong&gt;Mechanical pencil &lt;/strong&gt;from somewhere and...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;OUCH... a Scratch&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Lesson learned&lt;/strong&gt;: Buy &lt;strong&gt;a tablet for each kid&lt;/strong&gt; so yours will be safe!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Lesson learned&lt;/strong&gt; (for not that rich people): &lt;strong&gt;KISS&lt;/strong&gt; - Keep It Shut, Stupid!&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-1548845272675670244?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/1548845272675670244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=1548845272675670244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1548845272675670244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1548845272675670244'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/10/why-tablet-pc-is-not-good-idea.html' title='Why Tablet PC is not a good Idea'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-1895428268057310449</id><published>2007-10-31T14:51:00.001+02:00</published><updated>2007-10-31T23:44:49.019+02:00</updated><title type='text'>See what Silverlight can do... or is it ???</title><content type='html'>&lt;p&gt;I just read &lt;a href="http://blogs.msdn.com/jasonlan/archive/2007/10/31/check-out-our-new-windows-mobile-site.aspx"&gt;Jason Langridge's WebLog &lt;/a&gt;about Microsoft's new &lt;a href="http://www.microsoft.com/windowsmobile/startdoingmore/"&gt;Windows Mobile site&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;It is an interesting UI concept, and my first thought was that I need to send it to some guys in our R&amp;amp;D group to show them what can be done with Silverslight.&lt;/p&gt; &lt;p&gt;I have an email already open with the link Pasted, when I decided to check which Silverlight version were they using.&lt;/p&gt; &lt;p&gt;What Have I found - this site is &lt;strong&gt;ADOBE FLASH&lt;/strong&gt; based...&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-1895428268057310449?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/1895428268057310449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=1895428268057310449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1895428268057310449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/1895428268057310449'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/10/see-what-silverlight-can-do-or-is-it.html' title='See what Silverlight can do... or is it ???'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-8918662431497996125</id><published>2007-10-30T10:28:00.001+02:00</published><updated>2007-10-30T10:28:56.711+02:00</updated><title type='text'>Beware of Obsolete</title><content type='html'>&lt;p&gt;Short time before moving to Production with our application after upgrading it to .Net 2.0 - we have discover a major problem:&lt;/p&gt; &lt;p&gt;"&lt;strong&gt;&lt;em&gt;Invalid Handle Exception&lt;/em&gt;&lt;/strong&gt;" was thrown multiple times under &lt;strong&gt;Load Test&lt;/strong&gt;.&lt;br&gt;It was thrown from &lt;em&gt;SqlConnection.Open()&lt;/em&gt;&lt;/p&gt; &lt;p&gt;When looked in Reflector I saw the responsible for this exception was &lt;em&gt;GetLastWin32Error&lt;/em&gt; method which is called somewhere in the call stack.&lt;/p&gt; &lt;p&gt;I have tried to understand why does it happen - and came to conclusion that this exception is originally thrown from other place in the system - and this &lt;em&gt;GetLastWin32Error&lt;/em&gt; just catch it&amp;nbsp; - Also it shouldn't:&lt;/p&gt; &lt;p&gt;"Multiple threads do not overwrite each&lt;br&gt;other's last-error code" (from MSDN) &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So now I looked for the real source, I made a search on all our source code to find where we use &lt;strong&gt;&lt;em&gt;Handles&lt;/em&gt;&lt;/strong&gt;. Finally I have found a usage of System.Threading.WaitHandle.&lt;/p&gt; &lt;p&gt;I looked at MSDN and &lt;strong&gt;Voila&lt;/strong&gt;, this &lt;em&gt;WaitHandle&lt;strong&gt;.Handle&lt;/strong&gt;&lt;/em&gt; is Obsolete...&lt;/p&gt; &lt;p&gt;just changed it to &lt;strong&gt;&lt;em&gt;SafeWaitHandle&lt;/em&gt;&lt;/strong&gt; and the problem disappeared!!!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Lesson Learned - Always remove Obsolete methods and classes.&lt;br&gt;They are obsolete for a reason...&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-8918662431497996125?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/8918662431497996125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=8918662431497996125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8918662431497996125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/8918662431497996125'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/10/beware-of-obsolete.html' title='Beware of Obsolete'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-665614527088221368</id><published>2007-10-30T01:51:00.001+02:00</published><updated>2007-10-30T01:51:02.285+02:00</updated><title type='text'>My Flickr</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/leonov/1801460504/" title="photo sharing"&gt;&lt;img src="http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/leonov/1801460504/"&gt;&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/leonov/"&gt;Yonatan Leonov&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;So yes - I have a flickr user and I have upload some interesting pictures over there - You are invited...&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-665614527088221368?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/665614527088221368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=665614527088221368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/665614527088221368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/665614527088221368'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/10/my-flickr.html' title='My Flickr'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-6911967560642462051</id><published>2007-01-25T13:38:00.000+02:00</published><updated>2007-01-28T09:34:15.463+02:00</updated><title type='text'>Team Build -  Failure Email Alert - Make it Actually work for you</title><content type='html'>&lt;div align="justify"&gt;Long time no see. Yes I know it's my responsibility, and I don't even have a good excuse. So I hope you'll forgive me anyway - and let's go on.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We have started at last to use Team Foundation instead of the "Die in Peace" Visual Source Safe. And as part of the move I decided to construct a CI (continuous integration) Build. I have followed "&lt;a href="http://msdn2.microsoft.com/en-us/library/ms364045%28VS.80%29.aspx"&gt;Continuous Integration Using Team Foundation Build&lt;/a&gt;" from MSDN, and I had a CI build in no time.&lt;br /&gt;&lt;br /&gt;I even register myself to the Build Complete event, and created an Outlook rule to play a wav file (where I have recorded myself shouting "The build has failed, the build has failed"). But my roommate has made me shut it off.&lt;br /&gt;&lt;br /&gt;Eventually you need to notify the developers of failing builds, and if shouting on the speakers doesn't works, I decided to forward the Email notification to all R&amp;amp;D Group List.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;But then I have started to get complaints from everyone on those emails. The developers tell me - "Why did I get this Email? I haven't even perform any check-in. So I couldn't be the one who caused the build to fail".&lt;br /&gt;&lt;br /&gt;"They are right" I tell myself. If I keep sending those mails as suggested &lt;a href="http://www.alittlemadness.com/wp-trackback.php?p=20"&gt;here&lt;/a&gt;, everyone will put a rule to send my email right into the garbage can. So what to do?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;My Solution&lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/strong&gt;&lt;div align="justify"&gt;The idea is to send failure emails only to the developers who performed a check-in. It is not a perfect solution - I know, It would be better to send the Email only to the spesific user who actually caused the failure - but at least it's a start.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Implementation&lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div align="justify"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;I have used Howard van Rooijen's &lt;a href="http://projectdistributor.net/Releases/Release.aspx?releaseId=367"&gt;Team Foundation Server Notification Web Services project template&lt;/a&gt; and implemented new functionality at the&lt;br /&gt;&lt;em&gt;Build Completion Endpoint&lt;/em&gt;. I check &lt;em&gt;CompletionStatus&lt;/em&gt;, and if it "FAILED" I loop through Build's Changesets (as I learned &lt;a href="http://notsosmartbuilder.blogspot.com/2006/12/get-build-changes-changesetdata.html"&gt;here&lt;/a&gt;), collecting the users names. I construct a mail message based on TFS Mail template and just filled it with the correct data. The most &lt;strong&gt;important part&lt;/strong&gt;,&lt;strong&gt; &lt;/strong&gt;of course: I send this mail &lt;strong&gt;only &lt;/strong&gt;to the users I have collected from the Changesets.&lt;br /&gt;&lt;br /&gt;I hope to be able to upload the code soon.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Future Improvements&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;I plan to add some intelligence which will read the Build's log, and try to analyse who is the truly responsible for the failure.&lt;br /&gt;&lt;br /&gt;Let me know what you think...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-6911967560642462051?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/6911967560642462051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=6911967560642462051' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6911967560642462051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/6911967560642462051'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2007/01/team-build-failure-email-alert-make-it.html' title='Team Build -  Failure Email Alert - Make it Actually work for you'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-110734712717577987</id><published>2004-12-21T14:12:00.000+02:00</published><updated>2007-01-24T22:57:18.607+02:00</updated><title type='text'>Inferring... or just guessing!?</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;Yes, Yes, another bug...&lt;br /&gt;&lt;br /&gt;We add support for multiple languages to out Web Application, and a lady from the QA asked me solve the following bug:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;When inserting Hebrew (or any language other than english) characters to a TextBox and saving to the Database, you get Question Marks ("????????") instead of Hebrew characters.&lt;br /&gt;&lt;br /&gt;But is it fun enough? No?&lt;br /&gt;&lt;br /&gt;So lets add that&lt;br /&gt;it doesn't happens everytime... &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;First, I have checked the Database field: [Name] [nvarchar] (50)&lt;br /&gt;It was NVarChar, which is ok.&lt;br /&gt;&lt;br /&gt;Then I have looked at the Stored Procedure : @deals ntext&lt;br /&gt;It declared a parameter of the type - nText.&lt;br /&gt;This is fine, because actually this parameter gets an xml string of the whole Dataset, which can become big.&lt;br /&gt;&lt;br /&gt;Next, I have checked the SqlCommand's Parameter in the code:&lt;br /&gt;&lt;br /&gt;StringWriter writer = new StringWriter();&lt;br /&gt;newDeal.WriteXml( writer , XmlWriteMode.DiffGram );&lt;br /&gt;&lt;br /&gt;sqlCmd.Parameters.Add ( "@deals" , writer.ToString() );&lt;br /&gt;&lt;br /&gt;You can see that the code uses the overload which doesn't declare the SqlDbType.&lt;br /&gt;So lets check it on Run-Time.&lt;br /&gt;&lt;br /&gt;Usually, the SqlDbType was nVarChar, but when the bug occured it was VarChar !!!&lt;br /&gt;&lt;br /&gt;But why is it has been set to VarChar?&lt;br /&gt;&lt;br /&gt;After a lot of thinking and experiments, I finally got it:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;when the value used in the "Add" statement is a string, the framework use nVarChar as its default SqlDbType.&lt;br /&gt;&lt;br /&gt;But...&lt;br /&gt;&lt;br /&gt;if the string is&lt;br /&gt;longer than 4000 characters (which is the size limit of nVarChar on SQL Server) the framework uses VarVChar instead.&lt;br /&gt;&lt;br /&gt;Yes...&lt;br /&gt;&lt;br /&gt;Without checking if&lt;br /&gt;you have any unicode characters in the string.&lt;br /&gt;I won't call it "Inferring"&lt;br /&gt;(microsoft term) - I'll call it "guessing" &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;Of course, after you know the problem, solving is not an issue.&lt;br /&gt;Just declare the Parameter type explicitly!&lt;br /&gt;&lt;br /&gt;And, by the way, after you know the problem you can easily find the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconusingparameterswithdataadapters.asp"&gt;Microsoft's document&lt;/a&gt; which tell you what you didn't know:&lt;br /&gt;&lt;br /&gt;"String - NVarChar. This implicit conversion will fail if the string is greater than the maximum size of an NVarChar, which is 4000 characters. For strings greater than 4000 characters, explicitly set the SqlDbType."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;See you soon&lt;br /&gt;&lt;br /&gt;Jon. &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-110734712717577987?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/110734712717577987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=110734712717577987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/110734712717577987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/110734712717577987'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2004/12/inferring-or-just-guessing.html' title='Inferring... or just guessing!?'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10575523.post-110734627353658959</id><published>2004-12-05T19:03:00.000+02:00</published><updated>2007-01-24T23:07:22.587+02:00</updated><title type='text'>Cruel Bug and the IIS Default Document</title><content type='html'>&lt;span style="color: rgb(51, 51, 51);font-family:arial;" &gt;Last week, one guy from our QA department called me with a bug he found in one of our Web forms. After a short debugging I have discovered that one of the Session variables has been overwritten by with the wrong data – after been filled with the right data.&lt;br /&gt;The code which causes the problem was not in the requested Web Form. Actually, it was on our "Default Document" - Default.aspx (which we declared in IIS).&lt;br /&gt;But why is this default page been loaded?   Who called it?And why does the browser gets the right page and not the default page if it does been called?&lt;br /&gt;The next step was to put a breakpoint on the unwanted code, and watch for the "Call Stack" to see who called this code. This is a dead end. No user code calls this page.&lt;br /&gt;But wait, maybe the application is being redirected to this page by "Response.Redirect" or by "Server.Transfer"?But the answer (after checking all the call to those two functions) is – No.&lt;br /&gt;"Application_BeginRequest" in "Global.asax" is our next station.This is a good place to out a breakpoint, and it works this time too.&lt;br /&gt;My breakpoint is being hit twice, once for the requested page, and again for the Default document page.&lt;br /&gt;So, now I know that the unwanted code runs because the browser requested it.But when looking on the source of the page received by the user's browser, I can't find any redirection to the default page…&lt;br /&gt;And then I got it.&lt;br /&gt;One of the images tags in the html source was:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;It was without any file name because there wasn't any image for this item in the DB, and the programmer hasn't checked for empty strings in this field.The browser requests this path from IIS, which in turn translate it to a request for the default document page. This, of course, explains why the browser doesn't show the default document. It asks for it as in image…I have just removed this image from the page to see if it solves the problem…&lt;br /&gt;NO. It still happens.&lt;br /&gt;I have read the html source again and again, searching for another mistake like that…YES!!! I got it!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 51);font-family:arial;" &gt;The browser take the empty string of the "src" attribute as a request to the current path, which IIS answer with the default document again!&lt;br /&gt;Conclusion:&lt;br /&gt;Never leave any unspecified "src" attribute. You'll end with the browser requests the default document of the current directry.&lt;br /&gt;p.s.&lt;br /&gt;After I have finished to write this blog, I have found &lt;a href="http://www.hanselman.com/blog/PermaLink.aspx?guid=e0677c81-b078-40fc-b092-f2a12b7e1de9"&gt;this blog&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.hanselman.com/blog/PermaLink.aspx?guid=e0677c81-b078-40fc-b092-f2a12b7e1de9"&gt;&lt;span style="color: rgb(51, 51, 51);font-family:arial;" &gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(51, 51, 51);font-family:arial;" &gt;.&lt;br /&gt;I wish I have read it before meeting this bug...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10575523-110734627353658959?l=readcommit.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://readcommit.blogspot.com/feeds/110734627353658959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10575523&amp;postID=110734627353658959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/110734627353658959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10575523/posts/default/110734627353658959'/><link rel='alternate' type='text/html' href='http://readcommit.blogspot.com/2004/12/cruel-bug-and-iis-default-document.html' title='Cruel Bug and the IIS Default Document'/><author><name>Jon</name><uri>http://www.blogger.com/profile/05548493668397391438</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://farm3.static.flickr.com/2180/1801460504_059d208fd0_m.jpg'/></author><thr:total>0</thr:total></entry></feed>
