<?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-16754876</id><updated>2011-12-14T10:22:18.271+02:00</updated><category term='teamfoundationserver'/><category term='attachment'/><category term='GetFileName'/><category term='branch'/><category term='registry'/><category term='sts_content_tfs'/><category term='GetFolderName'/><category term='Terminal Service'/><category term='no maching items found'/><category term='c#'/><category term='changesetdata'/><category term='WorkItemFormControl'/><category term='addin'/><category term='WebClient'/><category term='witadmin'/><category term='builduri'/><category term='WorkItem'/><category term='srl'/><category term='ValidatePath'/><category term='xp'/><category term='visual studio 2005 sdk'/><category term='backup'/><category term='xml'/><category term='reports'/><category term='teamfoundationserver10fulltextcatalog'/><category term='tool window'/><category term='GetBuildUri'/><category term='vendor'/><category term='tfsbuildmanager'/><category term='os'/><category term='vmware'/><category term='default language'/><category term='toolbar'/><category term='build type'/><category term='olap'/><category term='ix_sts_content_tfs'/><category term='build step'/><category term='pendingchanges'/><category term='shelve'/><category term='parsesinglespec'/><category term='reference'/><category term='BuildStepData'/><category term='wit'/><category term='Preload'/><category term='version control'/><category term='VersionControlPath'/><category term='winamp'/><category term='tfswarehouse'/><category term='rebuild full-text catalog'/><category term='WorkItemStore'/><category term='buildprogressform'/><category term='vista'/><category term='attachments'/><category term='virtualization'/><category term='rules'/><category term='excel.application'/><category term='pendbranch'/><category term='tfs'/><category term='extract'/><category term='Code Plex'/><category term='versionspec'/><category term='WorkItemTracking Controls'/><category term='query failed'/><category term='auto hide'/><category term='change'/><category term='GetExtension'/><category term='Terminals'/><category term='file was rejected by digital signature policy'/><category term='tf shelve'/><category term='workspace'/><category term='drag and drop'/><category term='vmware vcenter converter'/><category term='changeset'/><category term='GetWorkItem'/><category term='RDP 6'/><category term='download'/><category term='excel'/><category term='login screen'/><category term='plugin'/><category term='pending changes'/><category term='excel integration'/><category term='windows'/><category term='virtual machine'/><category term='source control'/><category term='Remote Desktop Connection'/><category term='&apos;Microsoft.Data.ConnectionUI'/><category term='buildparameters'/><category term='RDP'/><category term='0'/><category term='merge'/><category term='StoredQueryCollection'/><category term='WorkItemType'/><category term='cropper'/><category term='destroywi'/><category term='GetFolderDepth'/><category term='alway on top'/><category term='versioncontrolserver'/><category term='there is a problem on the server'/><category term='GetBuildDetails'/><category term='buildstore'/><category term='dock'/><category term='file collision'/><category term='cube'/><category term='WorkItemCollection'/><category term='dashboard'/><category term='XmlDocument'/><category term='chart'/><category term='drag and drop files'/><category term='tfsworkitemtracking'/><category term='configuration management'/><category term='Open Source'/><category term='wmware player'/><category term='vmware workstation'/><category term='tfsqueryexplorer'/><category term='Combine'/><category term='build management'/><category term='GetService'/><category term='when'/><category term='physical machine'/><category term='tfs 2010 beta 2'/><category term='2003 server'/><category term='builddata'/><category term='start build'/><category term='visual studio 2005 sp1'/><category term='export data'/><category term='team system anual event'/><category term='lcd'/><category term='shelveset'/><category term='StoredQuery'/><title type='text'>Not So Smart Builder</title><subtitle type='html'>toolsmith is the software equivalent of a tool-and-die specialist; one who specialises in making the tools with which other programmers create applications.
[Jargon File]</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16754876.post-1698320615440425207</id><published>2009-12-20T10:26:00.002+02:00</published><updated>2009-12-20T10:29:56.660+02:00</updated><title type='text'>There was a problem importing the global list:  TF26204: The account  you entered is not recognized.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TKDljPrjsXI/Sy3gaI2ANRI/AAAAAAAAAVU/ZCNQBr4xTXI/s1600-h/TF26204.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 157px;" src="http://4.bp.blogspot.com/_TKDljPrjsXI/Sy3gaI2ANRI/AAAAAAAAAVU/ZCNQBr4xTXI/s400/TF26204.PNG" alt="" id="BLOGGER_PHOTO_ID_5417232666451784978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you got the error "There was a problem importing the global list:  TF26204: The account&lt;br /&gt;you  entered is not recognized." while trying to import a global list file then probably one of the items in the lists contain backslash and TFS considers this value as a user name... I got this while entering the value 800\40. Funny!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-1698320615440425207?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/1698320615440425207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=1698320615440425207&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1698320615440425207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1698320615440425207'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2009/12/there-was-problem-importing-global-list.html' title='There was a problem importing the global list:  TF26204: The account  you entered is not recognized.'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_TKDljPrjsXI/Sy3gaI2ANRI/AAAAAAAAAVU/ZCNQBr4xTXI/s72-c/TF26204.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-8156534453984154614</id><published>2009-12-06T07:23:00.003+02:00</published><updated>2009-12-06T07:30:17.698+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs 2010 beta 2'/><category scheme='http://www.blogger.com/atom/ns#' term='destroywi'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='witadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><title type='text'>Deleting work item in TFS 2010</title><content type='html'>After the release of TFS 2010 power tools I have noticed that the command &lt;strong&gt;destroywi&lt;/strong&gt; that is used for deleting work items was removed. Searching the Visual Studio installation directory I found a new command line utility called &lt;strong&gt;witadmin.exe&lt;/strong&gt;. This new tool hosts all the known work item management commands like import, export... To delete work items you use the same command as in the power tools with the work items id as a parameter:&lt;br /&gt;Example: &lt;strong&gt;witadmin destroywi 10&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-8156534453984154614?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/8156534453984154614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=8156534453984154614&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8156534453984154614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8156534453984154614'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2009/12/deleting-work-item-in-tfs-2010.html' title='Deleting work item in TFS 2010'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-3888094328755716348</id><published>2009-11-05T08:04:00.001+02:00</published><updated>2009-11-05T08:06:05.809+02:00</updated><title type='text'>TFS 2010 Beta 2 - Back in business</title><content type='html'>Just installed TFS 2010 beta 2. Good to be back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-3888094328755716348?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/3888094328755716348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=3888094328755716348&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/3888094328755716348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/3888094328755716348'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2009/11/tfs-2010-beta-2-back-in-business.html' title='TFS 2010 Beta 2 - Back in business'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-6360101281750536151</id><published>2009-08-10T07:18:00.013+03:00</published><updated>2009-08-10T08:27:11.209+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware workstation'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware vcenter converter'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><category scheme='http://www.blogger.com/atom/ns#' term='physical machine'/><category scheme='http://www.blogger.com/atom/ns#' term='wmware player'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual machine'/><title type='text'>Convert a Physical Machine to a Virtual Machine</title><content type='html'>You probably know Norton Ghost as a great tool to backup your machine state so you could restore it if needed from a backup. Norton actually saves an exact image of your HDD and enables you to restore it even to another physical machine.&lt;br /&gt;What if you want to backup your machine and open it using VMWare without having to restore it to another physical machine?&lt;br /&gt;VMWare support opening a Norton Ghost image so you could use this to restore a machine. VMWare also supports converting a physical machine to a virtual machine and enables you to backup and duplicate a machine in few simple steps.&lt;br /&gt;&lt;br /&gt;What do you need?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vmware.com/products/converter/"&gt;VMWare vCenter Converter Standalone&lt;/a&gt; - A free tool that will convert your physical machine.&lt;br /&gt;&lt;a href="http://www.vmware.com/products/ws/"&gt;VMWare Workstation&lt;/a&gt;/&lt;a href="http://www.vmware.com/products/player/"&gt;VMWare Player&lt;/a&gt; - to open the machine. VMWare Player is a free tool.&lt;br /&gt;&lt;br /&gt;How to do it?&lt;br /&gt;&lt;br /&gt;Install VMWare vCenter Converter Standalone. Select "Local installation" in the "Setup Type" form.&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 301px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368189213704683154" border="0" alt="" src="http://2.bp.blogspot.com/_TKDljPrjsXI/Sn-jpeHzfpI/AAAAAAAAASs/AoUoRDxsn90/s400/VMWare_vCenter_Converter_Installation.png" /&gt;&lt;br /&gt;Run the tool.&lt;br /&gt;&lt;br /&gt;Press the "Convert Machine" button. A wizard will be opened. In the "Specify Source" tab select "This local machine" in the "Specify the powered-on machine" radio group.&lt;br /&gt;Press the "Next" button.&lt;br /&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 332px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368189428770950754" border="0" alt="" src="http://3.bp.blogspot.com/_TKDljPrjsXI/Sn-j1_TmTmI/AAAAAAAAAS0/BMB_c06L32M/s400/VMWare_vCenter_Converter_Wiz1.png" /&gt;&lt;br /&gt;In the "Specify Destination" select "VMWare Workstation or other VMWare virtual machine" in the "Select destination type" combo box. After that specify the VMWare product, give the machine a name and choose a location to save it.&lt;br /&gt;Press the "Next" button.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_TKDljPrjsXI/Sn-uUSf815I/AAAAAAAAAS8/7o0u2vLCeHM/s1600-h/VMWare_vCenter_Converter_Wiz2.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 399px; DISPLAY: block; HEIGHT: 310px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368200944435386258" border="0" alt="" src="http://3.bp.blogspot.com/_TKDljPrjsXI/Sn-uUSf815I/AAAAAAAAAS8/7o0u2vLCeHM/s400/VMWare_vCenter_Converter_Wiz2.png" /&gt;&lt;/a&gt; In the "View/Edit Options" tab you can review and fix warnings regarding the conversion, edit the machine settings and define which HDD to convert.&lt;br /&gt;Press the "Next Button".&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_TKDljPrjsXI/Sn-u3hggj2I/AAAAAAAAATE/q3bSB5CoBBM/s1600-h/VMWare_vCenter_Converter_Wiz3.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 310px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368201549759680354" border="0" alt="" src="http://4.bp.blogspot.com/_TKDljPrjsXI/Sn-u3hggj2I/AAAAAAAAATE/q3bSB5CoBBM/s400/VMWare_vCenter_Converter_Wiz3.png" /&gt;&lt;/a&gt;&lt;br /&gt;In the "Ready to Complete" tab review you settings. When completed press the "Finish" button.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_TKDljPrjsXI/Sn-u_zAf5uI/AAAAAAAAATM/CEh60rvuN1c/s1600-h/VMWare_vCenter_Converter_Wiz4.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 310px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368201691896211170" border="0" alt="" src="http://4.bp.blogspot.com/_TKDljPrjsXI/Sn-u_zAf5uI/AAAAAAAAATM/CEh60rvuN1c/s400/VMWare_vCenter_Converter_Wiz4.png" /&gt;&lt;/a&gt;&lt;br /&gt;The wizard will be closed. In the main window a task will be added to the list and the conversion will start. You can track the status in this window.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_TKDljPrjsXI/Sn-i4OnxovI/AAAAAAAAASc/HwskKX9kA5s/s1600-h/VMWare_vCenter_Converter_Wiz5.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 329px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368188367730221810" border="0" alt="" src="http://3.bp.blogspot.com/_TKDljPrjsXI/Sn-i4OnxovI/AAAAAAAAASc/HwskKX9kA5s/s400/VMWare_vCenter_Converter_Wiz5.png" /&gt;&lt;/a&gt;After the conversion is finished you can open the machine using VMWare Workstation or Player. Please notice that to actually continue working with the machine you will probably have to re-activate it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-6360101281750536151?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/6360101281750536151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=6360101281750536151&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/6360101281750536151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/6360101281750536151'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2009/08/convert-physical-machine-to-virtual.html' title='Convert a Physical Machine to a Virtual Machine'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_TKDljPrjsXI/Sn-jpeHzfpI/AAAAAAAAASs/AoUoRDxsn90/s72-c/VMWare_vCenter_Converter_Installation.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-8569922165633915121</id><published>2008-07-02T08:22:00.003+03:00</published><updated>2008-07-02T08:38:51.040+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='pendingchanges'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='tf shelve'/><category scheme='http://www.blogger.com/atom/ns#' term='shelve'/><category scheme='http://www.blogger.com/atom/ns#' term='pending changes'/><category scheme='http://www.blogger.com/atom/ns#' term='workspace'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='shelveset'/><title type='text'>Shelveset as a Backup</title><content type='html'>Long time since I posted. Been busy (implementing TFS), long vacation and a new work place.&lt;br /&gt;In the last implementation I did I have noticed that in some cases users work in a network drive that is always backed up by IT. This is a good solution for backing up your workspace without checking in your pending changes (like we used to do when we worked with SourceSafe...) or performing a shelve for backup purpose. I thought it would be nice to share the idea of automatic backup shelves with those of you that work locally without any automatic backup. When you shelve your pending changes the shelve is saved in PendingChange table. The pending changes will be removed from the table when you delete or replace the shelveset. So to perform an automatic backup of your workspace that does not overload your TFS database you can add a schedule task that will run the following command:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;tf shelve {workspace name} /replace /noprompt&lt;/span&gt;&lt;br /&gt;Remeber to set the current folder to the workspace local path before executing the command.&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-8569922165633915121?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/8569922165633915121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=8569922165633915121&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8569922165633915121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8569922165633915121'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2008/07/shelveset-as-backup.html' title='Shelveset as a Backup'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-7326582391710095842</id><published>2007-12-27T08:28:00.000+02:00</published><updated>2007-12-27T08:36:52.479+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='GetFolderName'/><category scheme='http://www.blogger.com/atom/ns#' term='VersionControlPath'/><category scheme='http://www.blogger.com/atom/ns#' term='Combine'/><category scheme='http://www.blogger.com/atom/ns#' term='GetFolderDepth'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='GetExtension'/><category scheme='http://www.blogger.com/atom/ns#' term='ValidatePath'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='GetFileName'/><title type='text'>VersionControlPath - Class to Manipulate Version Control Items Path</title><content type='html'>I was navigating through TFS assemblies and I found out a static class that I wasn't aware of: &lt;strong&gt;Microsoft.TeamFoundation.VersionControl.Common.VersionControlPath&lt;/strong&gt;. This class contains functions that help manipulating version control items path. It is like the &lt;strong&gt;System.IO.Path&lt;/strong&gt; class. Here are some of the methods in the class:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;GetFileName&lt;/li&gt;&lt;li&gt;GetExtension&lt;/li&gt;&lt;li&gt;GetFolderDepth&lt;/li&gt;&lt;li&gt;Combine&lt;/li&gt;&lt;li&gt;GetFolderName&lt;/li&gt;&lt;li&gt;ValidatePath&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Very useful.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-7326582391710095842?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/7326582391710095842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=7326582391710095842&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7326582391710095842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7326582391710095842'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/12/versioncontrolpath-class-to-manipulate.html' title='VersionControlPath - Class to Manipulate Version Control Items Path'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-1721278531786679229</id><published>2007-12-24T07:05:00.001+02:00</published><updated>2007-12-24T07:09:03.683+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='versionspec'/><category scheme='http://www.blogger.com/atom/ns#' term='no maching items found'/><category scheme='http://www.blogger.com/atom/ns#' term='branch'/><category scheme='http://www.blogger.com/atom/ns#' term='pendbranch'/><category scheme='http://www.blogger.com/atom/ns#' term='versioncontrolserver'/><category scheme='http://www.blogger.com/atom/ns#' term='workspace'/><category scheme='http://www.blogger.com/atom/ns#' term='parsesinglespec'/><category scheme='http://www.blogger.com/atom/ns#' term='source control'/><title type='text'>No matching items found in {0} at the specified version</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;I recently got this error while trying to create a branch from that its parent was renamed.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here's an example of what happened:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;A branch was created at: $/Project/Folder1/Branch1.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some work has been done on Branch1 so its history contained several change sets.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Folder1 was renamed to Folder2 ($/Project/Folder2/Branch1).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A branch operation failed while trying to create one from a change set before the rename operation with the error: "No matching items found in $/Project/Folder2/Branch1" (A branch operation on a change set created later than the rename operation will succeed).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;I thought that the rename operation has broken the branch history. Looking at the branch dialog I saw that the source branch text box is read only and I thought to myself what would have happen if I had changed the source from $/Project/Folder2/Branch1 to $/Project/Folder1/Branch1. It was time for some coding…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#0070c0;"&gt;private&lt;/span&gt; &lt;span style="color:#0070c0;"&gt;void&lt;/span&gt; PerformBranch(&lt;span style="color:#0070c0;"&gt;string&lt;/span&gt; server, &lt;span style="color:#0070c0;"&gt;string&lt;/span&gt; workspaceName, &lt;span style="color:#0070c0;"&gt;string&lt;/span&gt; userName, &lt;span style="color:#0070c0;"&gt;string&lt;/span&gt; changesetId, &lt;span style="color:#0070c0;"&gt;string&lt;/span&gt; sourceBranch, &lt;span style="color:#0070c0;"&gt;string&lt;/span&gt; targetBranch) &lt;/p&gt;&lt;p&gt;{&lt;br /&gt;&lt;span style="color:#548dd4;"&gt;TeamFoundationServer&lt;/span&gt; tfs = &lt;span style="color:#0070c0;"&gt;new&lt;/span&gt; &lt;span style="color:#548dd4;"&gt;TeamFoundationServer&lt;/span&gt;(server);&lt;br /&gt;&lt;span style="color:#548dd4;"&gt;VersionControlServer&lt;/span&gt; vcs = tfs.GetService(&lt;span style="color:#0070c0;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#548dd4;"&gt;VersionControlServer&lt;/span&gt;)) &lt;span style="color:#0070c0;"&gt;as&lt;/span&gt; &lt;span style="color:#548dd4;"&gt;VersionControlServer&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#548dd4;"&gt;Workspace&lt;/span&gt; workspace = vcs.GetWorkspace(server, userName);&lt;br /&gt;&lt;span style="color:#548dd4;"&gt;VersionSpec&lt;/span&gt; versionSpec = &lt;span style="color:#548dd4;"&gt;VersionSpec&lt;/span&gt;.ParseSingleSpec(changesetId, userName);&lt;br /&gt;workspace.PendBranch(sourceBranch, targetBranch, versionSpec);&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This method has fixed the problem and after running it with the old branch path (source = $/Project/Folder1/Branch1), pending changes were waiting for check in.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-1721278531786679229?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/1721278531786679229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=1721278531786679229&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1721278531786679229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1721278531786679229'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/12/no-matching-items-found-in-0-at.html' title='No matching items found in {0} at the specified version'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-1783447724993654796</id><published>2007-12-06T20:19:00.000+02:00</published><updated>2007-12-09T14:26:50.215+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemStore'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsworkitemtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='GetWorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='GetService'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><title type='text'>TF20015: The field 'xxx' contains a value that is not in the list of supported values.</title><content type='html'>While trying to save a work item in TFS you might be facing a problem doing it when the error TF20015 is raised. This error is raised when you are trying to enter values that are not part of the allowed values of the field. The strange thing is that it can happen although the value was already saved before to the work item and the field is disabled. As a result you cannot change the value and therefor cannot save the work item. So why does it happen? I faced this problem in two cases:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;The user in one of the fields (which is implementing the valid user value list as the allowed values for the field) was renamed or deleted.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The work item schema was changed in a way that made some of the existing work items have illegal values. For example, if you made one of the fields mandatory trough all of the work flow and you have some work items with a null value in the field.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;So, how can you fix it?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There are 2 ways to do it:&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Changing the work item schema temporarily so the field won't be disabled and then you can change the value.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Write some code the change the field value:&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Here's a code sample on how to update work item field values:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;public void UpdateWorkItem(string serverUri, int id, string fieldName, string fieldValue)&lt;br /&gt;{&lt;br /&gt;    TeamFoundationServer tfs = new TeamFoundationServer(serverUri);&lt;br /&gt;    tfs.EnsureAuthenticated();&lt;br /&gt;    WorkItemStore wis = tfs.GetService(typeof(WorkItemStore)) as WorkItemStore;&lt;br /&gt;    WorkItem workItem = wis.GetWorkItem(id);&lt;br /&gt;    workItem.Open();&lt;br /&gt;    workItem.Fields[fieldName].Value = fieldValue;&lt;br /&gt;    workItem.Save();&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-1783447724993654796?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/1783447724993654796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=1783447724993654796&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1783447724993654796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1783447724993654796'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/12/tf20015-field-xxx-contains-value-that.html' title='TF20015: The field &apos;xxx&apos; contains a value that is not in the list of supported values.'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-5322187799098499362</id><published>2007-12-03T08:39:00.001+02:00</published><updated>2007-12-03T15:52:55.302+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wit'/><category scheme='http://www.blogger.com/atom/ns#' term='rules'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemType'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsworkitemtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='when'/><title type='text'>Set Work Item Type field allowed values when another field value changes</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;I was asked once by a friend if there's a way to filter the allowed values of a field when another field value changes. Well, the solution is not exactly as we think about filtering but more like a switch/case mechanism. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;Let's take for example 2 fields that implement OS Platform &amp;amp; Version selection: &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;Windows --&amp;gt; XP, 2003 Server, Vista&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;Linux --&amp;gt; Ubuntu, Red Hat, Suse&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;Mac --&amp;gt; OS X 10.0, OS X 10.5 &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;To implement this in the work item type definition file we need to define 2 fields. The xml should look like this: &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FIELD&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;OS Platform&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;refname&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;MyFields.OSPlatform&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Windows&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Linux&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Mac&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FIELD&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FIELD&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;OS Version&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;refname&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;MyFields.OSVersion&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;WHEN&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;MyFields.OSPlatform&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Windows&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;XP&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2003 Server&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Vista&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;WHEN&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;WHEN&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;MyFields.OSPlatform&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Linux&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Ubuntu&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Red Hat&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Suse&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;WHEN&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;WHEN&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;MyFields.OSPlatform&lt;/span&gt;"&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Mac&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;OS X 10.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;LISTITEM&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;OS X 10.5&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ALLOWEDVALUES&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;WHEN&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;FIELD&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;The version field contains WHEN rule for each platform. The result is a field that changes in real time when the parent field value changes.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Georgia;font-size:12;"&gt;You don't have to write the xml in order to achieve this. You can use the "Process Template Editor" which is part of the Team Foundation Server power tools to easily add fields and rules to you work item.&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-5322187799098499362?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/5322187799098499362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=5322187799098499362&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5322187799098499362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5322187799098499362'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/12/define-work-item-type-field-allowed.html' title='Set Work Item Type field allowed values when another field value changes'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-7752630373505466012</id><published>2007-11-29T07:30:00.000+02:00</published><updated>2007-11-29T07:37:44.049+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemStore'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemType'/><category scheme='http://www.blogger.com/atom/ns#' term='StoredQueryCollection'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Plex'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsqueryexplorer'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='addin'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemCollection'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005 sdk'/><category scheme='http://www.blogger.com/atom/ns#' term='StoredQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsworkitemtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='tool window'/><title type='text'>TFSQueryExplorer</title><content type='html'>I have a new project in &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; named &lt;a href="http://www.codeplex.com/TFSQueryExplorer"&gt;TFSQueryExplorer&lt;/a&gt;. It is a Visual Studio addin that looks like the Team Explorer tool window but it is dedicated to the management of queries and work items. There are a lot of cool features like manage queries in tags/folders, quick search, integration with the work item templates power tool and so on. The project is an example for using Visual Studio SDK and Team System API. I hope that you'll find it useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-7752630373505466012?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/7752630373505466012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=7752630373505466012&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7752630373505466012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7752630373505466012'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/11/tfsqueryexplorer.html' title='TFSQueryExplorer'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-4432475455747105758</id><published>2007-10-21T15:47:00.000+02:00</published><updated>2007-10-21T15:53:06.664+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><category scheme='http://www.blogger.com/atom/ns#' term='&apos;Microsoft.Data.ConnectionUI'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005 sdk'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005 sp1'/><title type='text'>Could not load file or assembly 'Microsoft.Data.ConnectionUI' or one of its dependencies -  Visual Studio 2005 SDK</title><content type='html'>I have noticed that after installing Visual Studio 2005 SDK one of my web projects has stopped running in Visual Studio raising an exception that says: "&lt;strong&gt;Could not load file or assembly 'Microsoft.Data.ConnectionUI' or one of its dependencies&lt;/strong&gt;". After some investigation I have found that the file exists also under the common assemblies directory of the SDK (&lt;strong&gt;C:\Program Files\Visual Studio 2005 SDK\2007.02\VisualStudioIntegration\Common\Assemblies&lt;/strong&gt;) and somehow although I do not use the assembly it is copied as a reference. The solution for that was deleting the file from the SDK common assemblies folder (since it is already contained in the framework). After the first deletion I made I had to delete another assembly from that folder and the project was running again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-4432475455747105758?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/4432475455747105758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=4432475455747105758&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/4432475455747105758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/4432475455747105758'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/10/could-not-load-file-or-assembly.html' title='Could not load file or assembly &apos;Microsoft.Data.ConnectionUI&apos; or one of its dependencies -  Visual Studio 2005 SDK'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-7590176905186678522</id><published>2007-10-10T07:55:00.000+02:00</published><updated>2007-10-10T08:03:58.432+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vendor'/><category scheme='http://www.blogger.com/atom/ns#' term='os'/><category scheme='http://www.blogger.com/atom/ns#' term='2003 server'/><category scheme='http://www.blogger.com/atom/ns#' term='Preload'/><category scheme='http://www.blogger.com/atom/ns#' term='registry'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='default language'/><category scheme='http://www.blogger.com/atom/ns#' term='login screen'/><title type='text'>Keyboard Language On Login Screen Not Set To Default</title><content type='html'>&lt;blockquote&gt;When installing windows with default language not set to english and changing it after installation you will notice that on the login screen the language is set to the language selected during installation. To change it english you need to edit the registry key &lt;strong&gt;HKEY_USERS\.DEFAULT\Keyboard Layout\Preload&lt;/strong&gt;. In this key you will find probably 2 values named &lt;strong&gt;1&lt;/strong&gt; and &lt;strong&gt;2&lt;/strong&gt;. You need to switch between the values so that the value named &lt;strong&gt;1&lt;/strong&gt; will be set to &lt;strong&gt;00000409&lt;/strong&gt; which is english. It happens to me when I get a new computer that is from a specific vendor and the OS is already installed.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-7590176905186678522?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/7590176905186678522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=7590176905186678522&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7590176905186678522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7590176905186678522'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/10/keyboard-language-on-login-screen-not.html' title='Keyboard Language On Login Screen Not Set To Default'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-3561343238395427010</id><published>2007-09-15T15:28:00.001+03:00</published><updated>2007-09-15T15:28:42.239+03:00</updated><title type='text'>Team Build 2008 API</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;I have installed Team Foundation Server 2008 Beta 2 on my staging environment this week. The installation process was smooth and except for some small issues I could start testing the release after a simple installation process.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Naturally, the first thing I have checked was the Team Build new features. I will not expand in the words regarding the new features because there are already some posts describing it (&lt;a href='http://blogs.msdn.com/buckh/archive/2007/08/14/tfs-2008-a-basic-guide-to-team-build-2008.aspx'&gt;http://blogs.msdn.com/buckh/archive/2007/08/14/tfs-2008-a-basic-guide-to-team-build-2008.aspx&lt;/a&gt;). Anyway, some of the new features ease the management of the builds from the UI (Delete, Open Drop Folder…) and were available in Team Foundation Server 2005 using 3rdParty tools (&lt;a href='http://www.codeplex.com/TFSBuildManager'&gt;TFSBuildManager&lt;/a&gt;). What I like the most is the Drop Management feature that completes the Continuous Integration feature. By using the retention policy of a build definition (Build Type is now Build Definition) you can define what and how to save builds. Builds can also be marked as save forever which can be useful when you want to mark a build that was released to a customer. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The second thing that I have checked was the new Team Build object model in this version. Since I'm a heavy consumer of the Team Build API I was curious to find out how it looks. For the record, &lt;a href='http://www.codeplex.com/TFSBuildManager'&gt;TFSBuildManager&lt;/a&gt; works on Team Foundation Server 2008 (some of the interfaces became obsolete so I would probably have to work on a new version). &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The first thing I have noticed is that the &lt;strong&gt;BuildStore&lt;/strong&gt; interface became obsolete and it is replaced with the &lt;strong&gt;IBuildServer&lt;/strong&gt; interface. So, in order to create an instance of the interface we need to do the following:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;TeamFoundationServer&lt;/strong&gt; tfs = new &lt;strong&gt;TeamFoundationServer&lt;/strong&gt;("ServerName");&lt;br /&gt;&lt;/p&gt;&lt;p&gt;tfs.EnsureAuthenticated();&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IBuildServer&lt;/strong&gt; bs = (&lt;strong&gt;IBuildServer&lt;/strong&gt;)tfs.GetService(typeof(&lt;strong&gt;IBuildServer&lt;/strong&gt;));&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In Team Foundation Server 2005 there was no interface to manage Build Type. If you wanted to query the server build types you needed to use the Version Control API to get the list of branches under the $/ProjectName/TeamBuildTypes branch. In 2008 the term Build Type is replaced with Build Definition. There is also a new interface to manage it named &lt;strong&gt;IBuildDefinition&lt;/strong&gt;. Here's an example of how to get the list of build definitions for a project:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IBuildDefinition&lt;/strong&gt;[] buildDefinitions = bs.QueryBuildDefinitions("ProjectName");&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Another interface that became obsolete is the &lt;strong&gt;BuildData&lt;/strong&gt; interface. Instead of using this interface we now have a new one named &lt;strong&gt;IBuildDetail&lt;/strong&gt;. The following example shows the replacement for the method &lt;strong&gt;GetListOfBuilds&lt;/strong&gt; that was available in 2005:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IBuildDetail&lt;/strong&gt;[] buildDetails = bs.QueryBuilds("ProjectName");&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The &lt;strong&gt;IBuildDetail&lt;/strong&gt; interface is wider than the &lt;strong&gt;BuildData &lt;/strong&gt;interface and it's in parallel to the big changes made to Team Build in 2008. Some of the new members we can use are:&lt;br /&gt;&lt;/p&gt;&lt;ul style='margin-left: 40pt'&gt;&lt;li&gt;SourceGetVersion – A string that represents the version control source version for the build.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;KeepForever – A Boolean value that marks a build as one that won't be deleted while applying the retention policy.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LabelName – A string value that represents the version control label of the build.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CompilationStatus, TestStatus – A &lt;strong&gt;BuildPhaseStatus&lt;/strong&gt; value that represent the phase status (Failed, Succeeded, Unknown).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;One of the big changes in Team Build 2008 is the build agents. In 2005 build machines were related to a specific build type. In 2008, with the builds queue feature, you don't have to relate a build server to a specific build definition. Build servers are now treated as agents and can serve all build definitions. For each Build Definition you specify a default build agent. The build agent is represented through the &lt;strong&gt;IBuildAgent&lt;/strong&gt; interface that was already available in 2005 but only for executing a build.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To get the list of build agents we need to do the following:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IBuildAgent&lt;/strong&gt;[] buildAgents = bs. QueryBuildAgents("ProjectName");&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To create a new build agent:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;IBuildAgent&lt;/strong&gt; buildAgent = bs. CreateBuildAgent("ProjectName");&lt;br /&gt;&lt;/p&gt;&lt;p&gt;buildAgent.MachineName = "BuildMachineName";&lt;br /&gt;&lt;/p&gt;&lt;p&gt;buildAgent.Name = "BuildAgentName";&lt;br /&gt;&lt;/p&gt;&lt;p&gt;buildAgent.BuildDirectory = @"C:\BuildDirectory";&lt;br /&gt;&lt;/p&gt;&lt;p&gt;buildAgent.Port = 9191;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;buildAgent.Save();&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There are some more properties to set for creating a new build agent but these are the required ones.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Starting a build is a little different too. Since we do not start a build but queue a build we need to use the &lt;strong&gt;QueueBuild&lt;/strong&gt; method in the &lt;strong&gt;IBuildServer&lt;/strong&gt; interface.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;IBuildDefinition buildDefinition = bs. GetBuildDefinition("ProjectName", "BuildDefinitionName");&lt;br /&gt;&lt;/p&gt;&lt;p&gt;bs.QueueBuild(buildDefinition);&lt;br /&gt;&lt;/p&gt;&lt;p&gt;One thing I found missing in the current release API was the ability to edit build definition using the &lt;strong&gt;IProjectFile&lt;/strong&gt; interface. The IProjectFile interface wraps the MSBuild project file but it is only available when creating a new build definition.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There is a lot more in the new Team Build API. I have tried to cover the basics in this post.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I hope I'll have some time soon to write the support for Team Build 2008 in TFSBuildManager. I already got some cool ideas using the new API.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-3561343238395427010?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/3561343238395427010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=3561343238395427010&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/3561343238395427010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/3561343238395427010'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/09/team-build-2008-api.html' title='Team Build 2008 API'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-2233072282253807669</id><published>2007-09-06T21:06:00.000+03:00</published><updated>2007-09-06T21:16:48.336+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='branch'/><category scheme='http://www.blogger.com/atom/ns#' term='file collision'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='source control'/><title type='text'>Filename Collision - Another item with the same name exists on the server.</title><content type='html'>At one of our merges we encountered an error saying that there is a file collision and we could not complete the process. The error is raised when you are performing the check in after the merge. The merge itself passes with no error. It seem that it happens when 2 files/folders with the same name and location are added to both branches. While performing the merge the source branch treats the new item as a branch action to the destination branch which results in adding the file in the check in process. The merge process does not check if the file already exists and when you perform the check in you get the error and the only option to resolve it is to delete the local file (the file from the merge action). The problem is that we wanted the file from the merge source branch. To fix this we needed to delete the file in the destination branch (after performing undo pending changes for the merge) and than perform the merge again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-2233072282253807669?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/2233072282253807669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=2233072282253807669&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2233072282253807669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2233072282253807669'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/09/filename-collision-another-item-with.html' title='Filename Collision - Another item with the same name exists on the server.'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-6495406678066104131</id><published>2007-09-05T19:19:00.000+03:00</published><updated>2007-09-05T19:30:02.578+03:00</updated><title type='text'>Terminals Achievements</title><content type='html'>&lt;a href="http://bp2.blogger.com/_TKDljPrjsXI/Rt7Za5kL6cI/AAAAAAAAAEo/ngGTqqko_Ms/s1600-h/GoogleTerminals.Png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5106758083637144002" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TKDljPrjsXI/Rt7Za5kL6cI/AAAAAAAAAEo/ngGTqqko_Ms/s400/GoogleTerminals.Png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;We are celebrating 2 major events in &lt;a href="http://www.codeplex.com/Terminals"&gt;Terminals&lt;/a&gt; life. The first one is that latest release was downloaded 10,000 times. The second one and the sweetest is that the project page is the first result in Google's search for the word Terminals (Out of 37,000,00 pages!!!). This is a result of the posts written regarding the utility and the people that are using it. Thank you all.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;We are working on a new version with lots of features and we added some guys to help us with the development. Hope we can deliver it soon. Enjoy.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-6495406678066104131?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/6495406678066104131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=6495406678066104131&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/6495406678066104131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/6495406678066104131'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/09/terminals-achievements.html' title='Terminals Achievements'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_TKDljPrjsXI/Rt7Za5kL6cI/AAAAAAAAAEo/ngGTqqko_Ms/s72-c/GoogleTerminals.Png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-5903296191155559929</id><published>2007-08-28T11:39:00.000+03:00</published><updated>2007-08-29T08:28:46.757+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver10fulltextcatalog'/><category scheme='http://www.blogger.com/atom/ns#' term='ix_sts_content_tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsworkitemtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='there is a problem on the server'/><category scheme='http://www.blogger.com/atom/ns#' term='rebuild full-text catalog'/><category scheme='http://www.blogger.com/atom/ns#' term='sts_content_tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='query failed'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><title type='text'>Moving Team Foundation Server from a single-server deployment to a dual-server deployment</title><content type='html'>It's been a while since I've posted something. Shame on me!&lt;br /&gt;&lt;br /&gt;The last weeked was dedicated to moving our Team Foundation Server from a single server deployment to a dual server deployment. I have already gone throught the process of moving a server from one hardware configuration to another so I was quite sure that this would work.&lt;br /&gt;&lt;br /&gt;Our previous configuration was a virtual server on an IBM blade with 2GB memory serving about 50 users. We have decided to split the deployment and add a database server which is the number one consumer of resources.&lt;br /&gt;&lt;br /&gt;I've started the process around 21:00 and finished at 02:30. The most problematic part was that for some reason I could not uninstall SQL Server and Visual Studio from the application sevrer (the new deployment requieres uninstall of current Team Foundation Server installation and installing as an application server). I had to use the windwos installer cleanup utility to remove them from windows installer database and then I reinstalled them to their previous state. After that again unistall and installing the Team Foundation Server application tier. You can imagine it took me sometime...&lt;br /&gt;&lt;br /&gt;Some remarks regarding the document (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms404854(VS.80).aspx"&gt;How to: Move from a Single-Server to a Dual-Server Deployment&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In the section named &lt;strong&gt;To modify the Web.Config file to reflect the original Team Foundation data-tier server name:&lt;/strong&gt; In 1.a there is a mistake when refering to the new data-tier server when locating the web.config file of the services. It should be the application-tier server.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In the section named &lt;strong&gt;To restore and verify Report Server on the new Team Foundation Server&lt;/strong&gt;: In 17 you are suppose to execute SetupWarehouse.exe but it won't happen since the TFSAppPull is still down. SetupWarehouse.exe uses the web service to initilize the process of rebuilding the Team System OLAP cube. You need to execute it after you are restarting the services in the section named &lt;strong&gt;To restart services and verify operation&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Another problem I encountered was related to the databases restore. I must say that it was my mistake since I did not follow the process and restored the databases by detaching the new ones and attaching the old ones. The issue was that the 2 databases using full text search catalog (&lt;strong&gt;TfsWorkItemTracking&lt;/strong&gt; and &lt;strong&gt;STS_Content_TFS&lt;/strong&gt;) were attached with the wrong reference to the full text catalog. As a result the catalog could not be rebuilt and backups failed. In addition while searching work items using the Steps to Reproduce field (which is indexed in the catalog) an error raised specifing the query failed and there is a problem on the server.&lt;/p&gt;&lt;p&gt;I did some search using the errors I saw in the event viewer and in database logs and understood that the catalog needs to be rebuilt. When executing the rebuild using the management studio I got no error but the process ran for about 24 hours. I'm not a DBA but this seemed strange so I stopped it and continue searching using this keywords: "&lt;strong&gt;Full-Text Search is not enabled for the current database&lt;/strong&gt;", "&lt;strong&gt;Property FullTextIndexSize is not available for FullTextCatalog&lt;/strong&gt;" and with the names of the catalogs: &lt;strong&gt;ix_STS_Content_TFS&lt;/strong&gt; and &lt;strong&gt;TeamFoundationServer10FullTextCatalog&lt;/strong&gt;. I did not find much (except for this incomplete posts). Anyway, I understood that I have to drop and recreate the catalogs. After doing this the catalogs were rebuild and everything worked.&lt;/p&gt;&lt;p&gt;Here are the steps I took to recreate the catalogs.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;Please notice that this part is done by the Team Foundation Server installation and I did this only because the catalogs were corrupted. If you are not familiar with this stuff I suggest you consult with a Team System advisor or try to reinstall the server. Any way don't forget to backup the database. Since in this case you have problem doing it because the corrupted catalogs disturb the backup I suggest you copy the data files (mdf and logs) to another location (after you stop the system...) or find a way to disable backing up the catalogs (I read about it some where).&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open &lt;strong&gt;Microsoft SQL Server Management Studio&lt;/strong&gt; and connect to the Team Foundation Server database.&lt;/p&gt;&lt;p&gt;For recreating the &lt;strong&gt;ix&lt;/strong&gt;_&lt;strong&gt;STS_Content_TFS&lt;/strong&gt; catalog do the following: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;In the object explorer expand: &lt;strong&gt;Databases&lt;/strong&gt; --&gt; &lt;strong&gt;STS_Content_TFS&lt;/strong&gt; --&gt; &lt;strong&gt;Storage&lt;/strong&gt; and right click the &lt;strong&gt;ix_STS_Content_TFS&lt;/strong&gt; catalog. Select &lt;strong&gt;Delete&lt;/strong&gt; from the menu and press &lt;strong&gt;OK&lt;/strong&gt; button in the &lt;strong&gt;Delete Object&lt;/strong&gt; window. This will drop the corrupted catalog (if your catalog is corrupted you will see error when trying to open it's properties window). &lt;/li&gt;&lt;/ul&gt;&lt;a href="http://bp3.blogger.com/_TKDljPrjsXI/RtTsnpkL6SI/AAAAAAAAADY/c2WXQUrzdD0/s1600-h/Delete.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103964443634297122" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_TKDljPrjsXI/RtTsnpkL6SI/AAAAAAAAADY/c2WXQUrzdD0/s400/Delete.png" border="0" /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Right click the &lt;strong&gt;Full Text Catalogs&lt;/strong&gt; item and select &lt;strong&gt;New Full-Text Catalog...&lt;/strong&gt; from the menu. In the &lt;strong&gt;New Full-Text Catalog - STS_Content_TFS&lt;/strong&gt; enter the name of the catalog: &lt;strong&gt;ix_STS_Catalog_TFS, &lt;/strong&gt;select a location for the files, select &lt;strong&gt;Primary&lt;/strong&gt; in the &lt;strong&gt;Filegroup&lt;/strong&gt; combo box and in the &lt;strong&gt;Owner&lt;/strong&gt; text box select &lt;strong&gt;dbo&lt;/strong&gt;. Press the &lt;strong&gt;OK&lt;/strong&gt; button.&lt;br /&gt;&lt;li&gt;&lt;a href="http://bp2.blogger.com/_TKDljPrjsXI/RtTwRZkL6TI/AAAAAAAAADg/_M-bD4cawbw/s1600-h/New.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103968459428718898" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TKDljPrjsXI/RtTwRZkL6TI/AAAAAAAAADg/_M-bD4cawbw/s400/New.png" border="0" /&gt;&lt;/li&gt;&lt;/a&gt;&lt;a href="http://bp2.blogger.com/_TKDljPrjsXI/RtTwRZkL6TI/AAAAAAAAADg/_M-bD4cawbw/s1600-h/New.png"&gt;&lt;li&gt;&lt;/a&gt;&lt;/li&gt;Double click the newly created catalog in the &lt;strong&gt;Object Explorer&lt;/strong&gt; tree. In the &lt;strong&gt;Full-Text Catalog Properties - ix_STS_Content_TFS&lt;/strong&gt; select the &lt;strong&gt;Tables/Views&lt;/strong&gt; from the left list view. Add the tables: &lt;strong&gt;dbo.Docs&lt;/strong&gt;, &lt;strong&gt;dbo.Lists&lt;/strong&gt;, &lt;strong&gt;dbo.UserData &lt;/strong&gt;and &lt;strong&gt;dbo.UserInfo&lt;/strong&gt; to the &lt;strong&gt;Table/View objects assigned to the catalog&lt;/strong&gt; and start setting the &lt;strong&gt;Eligible colums&lt;/strong&gt; for the tables. &lt;li&gt;For &lt;strong&gt;dbo.Docs&lt;/strong&gt; select the &lt;strong&gt;Content&lt;/strong&gt; and &lt;strong&gt;LeafName&lt;/strong&gt;. For both of them select the language &lt;strong&gt;English&lt;/strong&gt; in the &lt;strong&gt;Language for Word Breaker&lt;/strong&gt; setting column. For &lt;strong&gt;Content&lt;/strong&gt; select &lt;strong&gt;Extension&lt;/strong&gt; in the &lt;strong&gt;Data Type&lt;/strong&gt; Column.&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TKDljPrjsXI/RtT3vJkL6UI/AAAAAAAAADo/xdmNuIIl_vo/s1600-h/Docs.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103976667111221570" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_TKDljPrjsXI/RtT3vJkL6UI/AAAAAAAAADo/xdmNuIIl_vo/s400/Docs.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;For the &lt;strong&gt;dbo.Lists&lt;/strong&gt; table select the &lt;strong&gt;tp_Description&lt;/strong&gt; and &lt;strong&gt;tp_Title columns&lt;/strong&gt;. For both of them select the language &lt;strong&gt;English&lt;/strong&gt; in the &lt;strong&gt;Language for Word Breaker&lt;/strong&gt; setting column.&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_TKDljPrjsXI/RtT3_ZkL6VI/AAAAAAAAADw/dJAkAFVMyqA/s1600-h/Lists1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103976946284095826" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TKDljPrjsXI/RtT3_ZkL6VI/AAAAAAAAADw/dJAkAFVMyqA/s400/Lists1.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5103977010708605282" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_TKDljPrjsXI/RtT4DJkL6WI/AAAAAAAAAD4/Vkx4_7_s1IA/s400/Lists2.png" border="0" /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;For the &lt;strong&gt;dbo.UserData&lt;/strong&gt; table select all the columns except for &lt;strong&gt;tp_Ordering&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_TKDljPrjsXI/RtT4I5kL6XI/AAAAAAAAAEA/TEhTUDJ6fa4/s1600-h/UserData.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103977109492853106" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/_TKDljPrjsXI/RtT4I5kL6XI/AAAAAAAAAEA/TEhTUDJ6fa4/s400/UserData.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;For the &lt;strong&gt;dbo.UserInfo&lt;/strong&gt; table select the &lt;strong&gt;tp_Email&lt;/strong&gt;, &lt;strong&gt;tp_Login&lt;/strong&gt; and &lt;strong&gt;tp_Title&lt;/strong&gt; columns. For all of them select &lt;strong&gt;English&lt;/strong&gt; in the &lt;strong&gt;Language for Word Breaker&lt;/strong&gt; setting column.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5103977169622395266" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TKDljPrjsXI/RtT4MZkL6YI/AAAAAAAAAEI/irR4SCSPHUg/s400/UserInfo.png" border="0" /&gt;&lt;/li&gt;&lt;li&gt;Press the &lt;strong&gt;OK&lt;/strong&gt; button. The catalog should be processed for some time. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For recreating the &lt;strong&gt;TeamFoundationServer10FullTextCatalog&lt;/strong&gt; catalog do the following: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;In the object explorer expand: &lt;strong&gt;Databases&lt;/strong&gt; --&gt; Tfs&lt;strong&gt;WorkItemTracking&lt;/strong&gt; --&gt; &lt;strong&gt;Storage&lt;/strong&gt; and right click the &lt;strong&gt;TeamFoundationServer10FullTextCatalog&lt;/strong&gt; catalog. Select &lt;strong&gt;Delete&lt;/strong&gt; from the menu and press &lt;strong&gt;OK&lt;/strong&gt; button in the &lt;strong&gt;Delete Object&lt;/strong&gt; window. This will drop the corrupted catalog.&lt;a href="http://bp1.blogger.com/_TKDljPrjsXI/RtT9iJkL6ZI/AAAAAAAAAEQ/N_oQs4BHYAM/s1600-h/Delete1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103983040842688914" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_TKDljPrjsXI/RtT9iJkL6ZI/AAAAAAAAAEQ/N_oQs4BHYAM/s400/Delete1.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Right click the &lt;strong&gt;Full Text Catalogs&lt;/strong&gt; item and select &lt;strong&gt;New Full-Text Catalog...&lt;/strong&gt; from the menu. In the &lt;strong&gt;New Full-Text Catalog - TfsWorkItemTracking&lt;/strong&gt; enter the name of the catalog: &lt;strong&gt;TeamFoundationServer10FullTextCatalog&lt;/strong&gt;, select a location for the files, select Primary in the Filegroup combo box and in the Owner text box select dbo. Check the &lt;strong&gt;Set as default catalog&lt;/strong&gt; check box. Press the &lt;strong&gt;OK&lt;/strong&gt; button.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5103984694405097890" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TKDljPrjsXI/RtT_CZkL6aI/AAAAAAAAAEY/Mw-pdebko5Y/s400/New1.png" border="0" /&gt;&lt;/li&gt;&lt;li&gt;Double click the newly created catalog in the &lt;strong&gt;Object Explorer&lt;/strong&gt; tree. In the &lt;strong&gt;Full-Text Catalog Properties - TeamFoundationServer10FullTextCatalog&lt;/strong&gt; select the &lt;strong&gt;Tables/Views&lt;/strong&gt; from the left list view. Add the tables: &lt;strong&gt;dbo.WorkItemLongTexts&lt;/strong&gt; to the &lt;strong&gt;Table/View&lt;/strong&gt; objects assigned to the catalog. In the &lt;strong&gt;Eligible columns&lt;/strong&gt; select the &lt;strong&gt;Words&lt;/strong&gt; column and press the &lt;strong&gt;OK&lt;/strong&gt; button. The catalog should be processed for some time and the window will be closed.&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_TKDljPrjsXI/RtT_FZkL6bI/AAAAAAAAAEg/FI5ZIZnHXvo/s1600-h/WorkItemLongTexts.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103984745944705458" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_TKDljPrjsXI/RtT_FZkL6bI/AAAAAAAAAEg/FI5ZIZnHXvo/s400/WorkItemLongTexts.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That's it. The catalogs were created and you should be able to process them. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-5903296191155559929?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/5903296191155559929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=5903296191155559929&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5903296191155559929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5903296191155559929'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/08/moving-team-foundation-server-from.html' title='Moving Team Foundation Server from a single-server deployment to a dual-server deployment'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_TKDljPrjsXI/RtTsnpkL6SI/AAAAAAAAADY/c2WXQUrzdD0/s72-c/Delete.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-7049124684661030775</id><published>2007-07-17T07:45:00.000+03:00</published><updated>2007-07-17T08:26:06.191+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemFormControl'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemStore'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemType'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='XmlDocument'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemTracking Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='cropper'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><title type='text'>How to Expose the Work Item Editor Control</title><content type='html'>I've used this while writing the Cropper TFS Work Item plugin. I needed a way to edit or create a new work item. The &lt;strong&gt;WorkItemFormControl&lt;/strong&gt; located under the &lt;strong&gt;Microsoft.TeamFoundation.WorkItemTracking.Controls&lt;/strong&gt; namespace is the same control used by Visual Studio work item plugin and also by the process template editor (which was the way I found how to use it).&lt;br /&gt;&lt;br /&gt;Here's an example for creating a new work item with the control.&lt;br /&gt;&lt;br /&gt;First we need to connect to a Team Foundation Server and obtain the WorkItemStore service:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TeamFoundationServer&lt;/strong&gt; tfs = new &lt;strong&gt;TeamFoundationServer&lt;/strong&gt;(serverName);&lt;br /&gt;tfs.EnsureAuthenticated();&lt;br /&gt;&lt;strong&gt;WorkItemStore&lt;/strong&gt; wis = tfs.GetService(typeof(&lt;strong&gt;WorkItemStore&lt;/strong&gt;)) as &lt;strong&gt;WorkItemStore&lt;/strong&gt;;&lt;br /&gt;&lt;br /&gt;After doing so we can now create the WorkItemFormControl:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WorkItemFormControl&lt;/strong&gt; wifc = new &lt;strong&gt;WorkItemFormControl&lt;/strong&gt;();&lt;br /&gt;&lt;br /&gt;The WorkItemFormControl has a string property named FormDefinition. We need to set this property with an XML defining the work item type that we want to use. To do so we use the WorkItemStore service:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WorkItemType&lt;/strong&gt; wit = wis.Projects[teamProjectName].WorkItemTypes["Bug"];&lt;br /&gt;&lt;br /&gt;This will return the the Bug work item type.&lt;br /&gt;&lt;br /&gt;After doing so we can use the WorkItemType to set the FormDefinition property:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;XmlDocument&lt;/strong&gt; xmlDocument = wit.Export(false);&lt;br /&gt;wifc.FormDefinition = xmlDocument.InnerXml;&lt;br /&gt;&lt;br /&gt;Now we can use the WorkItemFormControl with a newly created work item or an existing one:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WorkItem&lt;/strong&gt; wi = new &lt;strong&gt;WorkItem&lt;/strong&gt;("Bug"); or &lt;strong&gt;WorkItem &lt;/strong&gt;wi = wis.GetWorkItem(bugId);&lt;br /&gt;wifc.Item = wi;&lt;br /&gt;&lt;br /&gt;To show the control embed it to a form or a panel on a form.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-7049124684661030775?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/7049124684661030775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=7049124684661030775&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7049124684661030775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7049124684661030775'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/07/how-to-expose-work-item-editor-control.html' title='How to Expose the Work Item Editor Control'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-2629526484217953695</id><published>2007-06-06T15:07:00.001+03:00</published><updated>2007-06-06T15:09:48.718+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Plex'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='attachments'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='cropper'/><category scheme='http://www.blogger.com/atom/ns#' term='attachment'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><title type='text'>CropperTFSPlugin</title><content type='html'>I have uploaded the plugin to CodePlex. Here's the link to the project: &lt;a href="http://www.codeplex.com/CropperTFSPlugin"&gt;http://www.codeplex.com/CropperTFSPlugin&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-2629526484217953695?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/2629526484217953695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=2629526484217953695&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2629526484217953695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2629526484217953695'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/06/croppertfsplugin.html' title='CropperTFSPlugin'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-8926316210001554316</id><published>2007-05-30T11:07:00.001+03:00</published><updated>2007-06-06T15:10:10.691+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemStore'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Plex'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='attachments'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='cropper'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='attachment'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><title type='text'>Cropper TFS Work Item Plugin</title><content type='html'>It's been a while since I wrote here. Anyway, I hope this post will compensate for it. I read this week a post about &lt;a href="http://blogs.msdn.com/bharry/archive/2007/05/24/snagit-integration-with-tfs.aspx"&gt;SnagIt! integration with TFS&lt;/a&gt;. Since I use &lt;a href="http://www.codeplex.com/cropper"&gt;Cropper &lt;/a&gt;I've decided to write a plugin for TFS.&lt;br /&gt;The plugin enables you to capture images directly to a new TFS work item attachments field. You can also add an attachment to an existing work item. You can download it from &lt;a href="http://www.epocalipse.com/dudu/CropperTFSWorkItemPlugin.zip"&gt;here&lt;/a&gt;. Read the read me file for installation guide and how to use it.&lt;br /&gt;The plugin uses the &lt;strong&gt;WorkItemFormControl&lt;/strong&gt; to edit the work item. I will explain in future posts on how to use it.&lt;br /&gt;I'm planning to add the sources to &lt;a href="http://www.codeplex.com/cropperplugins"&gt;Cropper Plugins &lt;/a&gt;project in &lt;a href="http://www.codeplex.com/cropper"&gt;CodePlex&lt;/a&gt;.&lt;br /&gt;The plugin is in it's early stages. I would be happy to hear your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-8926316210001554316?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/8926316210001554316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=8926316210001554316&amp;isPopup=true' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8926316210001554316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8926316210001554316'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/05/cropper-tfs-work-item-plugin.html' title='Cropper TFS Work Item Plugin'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-8623104190150304198</id><published>2007-04-17T09:20:00.001+03:00</published><updated>2007-04-17T09:22:29.242+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='BuildStepData'/><category scheme='http://www.blogger.com/atom/ns#' term='build type'/><category scheme='http://www.blogger.com/atom/ns#' term='build step'/><category scheme='http://www.blogger.com/atom/ns#' term='build management'/><category scheme='http://www.blogger.com/atom/ns#' term='builddata'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='builduri'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><title type='text'>How to Get Build Result Details using TFS API - Part 3</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;&lt;span style="font-family:Georgia;"&gt;The &lt;a href="http://notsosmartbuilder.blogspot.com/2007/04/how-to-get-build-result-details-using.html"&gt;previous post&lt;/a&gt; in this series was about the build steps section of the build report. In this post we will see how to retrieve the associated changesets section details.&lt;br /&gt;&lt;br /&gt;Using the BuildStore object we have created in this &lt;a href="http://notsosmartbuilder.blogspot.com/2007/03/how-to-get-build-result-details-using.html"&gt;post&lt;/a&gt; we can get a list of ChangeSetData objects that contain the needed information (an example on how to get the buildUri parameter value available in this &lt;a href="http://notsosmartbuilder.blogspot.com/2007/03/how-to-get-build-result-details-using.html"&gt;post&lt;/a&gt; also):&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#2b91af;"&gt;ChangeSetData&lt;/span&gt;[] changesets = buildStore.GetChangeSetsForBuild(buildUri);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;ChangeSetData&lt;/span&gt; changeset &lt;span style="color:blue;"&gt;in&lt;/span&gt; buildReport.Changesets)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(changeset.ChangeSetId.ToString());&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(changeset.ChangeSetUri);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(changeset.CheckedInBy);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;.Show(changeset.Comment);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-8623104190150304198?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/8623104190150304198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=8623104190150304198&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8623104190150304198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8623104190150304198'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/04/how-to-get-build-result-details-using_17.html' title='How to Get Build Result Details using TFS API - Part 3'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-253125092982539660</id><published>2007-04-12T11:51:00.001+03:00</published><updated>2007-04-12T11:59:03.747+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemStore'/><category scheme='http://www.blogger.com/atom/ns#' term='StoredQueryCollection'/><category scheme='http://www.blogger.com/atom/ns#' term='attachments'/><category scheme='http://www.blogger.com/atom/ns#' term='WebClient'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItem'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='attachment'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkItemCollection'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='extract'/><category scheme='http://www.blogger.com/atom/ns#' term='StoredQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><title type='text'>Extracting Images from Work Items Attachments</title><content type='html'>&lt;p&gt;In this example I will show how to use the WorkItemStore interface. This example will execute a stored query on the work items database and will extract the attachments from the work items returned from the query. This is a good training for working with the WorkItemStore interface.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;private void ExtractWorkItemsAttachments(string teamFoundationServer, string teamProject, string storedQuery,&lt;/p&gt;&lt;p&gt;string saveTo)&lt;/p&gt;&lt;p&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;{&lt;br /&gt;    //Logon to the server and create the needed objects&lt;br /&gt;    TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(teamFoundationServer);&lt;br /&gt;   tfs.EnsureAuthenticated();&lt;br /&gt;    WorkItemStore store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));&lt;br /&gt;    Project tfsProject = store.Projects[teamProject];&lt;br /&gt;    StoredQueryCollection sqc = tfsProject.StoredQueries;&lt;br /&gt;    string querystring;&lt;br /&gt;    //Search for the query&lt;br /&gt;    foreach (StoredQuery query in sqc)&lt;br /&gt;    {&lt;br /&gt;        if (query.Name == storedQuery)&lt;br /&gt;        {&lt;br /&gt;            //Execute the query&lt;br /&gt;            querystring = query.QueryText;&lt;br /&gt;            querystring = querystring.Replace("@project", "'" + tfsProject.Name + "'");&lt;br /&gt;            WorkItemCollection workItems = store.Query(querystring);&lt;br /&gt;            //Extract the attachments&lt;br /&gt;            foreach (WorkItem workItem in workItems)&lt;br /&gt;            {&lt;br /&gt;                if (workItem.Attachments.Count &amp;gt; 0)&lt;br /&gt;                {&lt;br /&gt;                    foreach (Attachment attachment in workItem.Attachments)&lt;br /&gt;                    {&lt;br /&gt;                        //Using WebClient to download the attachment&lt;br /&gt;                        WebClient webClient = new WebClient();&lt;br /&gt;                        webClient.Credentials = CredentialCache.DefaultCredentials;&lt;br /&gt;                        string fileName = Path.Combine(saveTo, attachment.Name);&lt;br /&gt;                        webClient.DownloadFile(attachment.Uri.AbsoluteUri, fileName);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&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/16754876-253125092982539660?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/253125092982539660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=253125092982539660&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/253125092982539660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/253125092982539660'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/04/extracting-images-from-work-items.html' title='Extracting Images from Work Items Attachments'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-2674965992413957307</id><published>2007-04-10T06:51:00.000+03:00</published><updated>2007-04-10T07:13:26.291+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BuildStepData'/><category scheme='http://www.blogger.com/atom/ns#' term='build step'/><category scheme='http://www.blogger.com/atom/ns#' term='GetBuildDetails'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='team system anual event'/><category scheme='http://www.blogger.com/atom/ns#' term='build type'/><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='build management'/><category scheme='http://www.blogger.com/atom/ns#' term='builddata'/><category scheme='http://www.blogger.com/atom/ns#' term='builduri'/><category scheme='http://www.blogger.com/atom/ns#' term='GetBuildUri'/><title type='text'>How to Get Build Result Details using TFS API - Part 2</title><content type='html'>The &lt;a href="http://notsosmartbuilder.blogspot.com/2007/03/how-to-get-build-result-details-using.html"&gt;previous post&lt;/a&gt; in this series was about the summary section of the build report. In this post we will see how to retrieve the build steps section details.&lt;br /&gt;Using the BuildStore object we have created in the &lt;a href="http://notsosmartbuilder.blogspot.com/2007/03/how-to-get-build-result-details-using.html"&gt;previous post&lt;/a&gt; we can get a list of BuildStepData objects that contain the needed information (an example on how to get the buildUri parameter value available in the &lt;a href="http://notsosmartbuilder.blogspot.com/2007/03/how-to-get-build-result-details-using.html"&gt;previous post&lt;/a&gt; also):&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;BuildStepData&lt;/span&gt;[] buildSteps = buildStore.GetBuildSteps(buildUri);&lt;br /&gt;&lt;br /&gt;Now we can go through all the objects in the collection and retrieve details for each one of them.&lt;br /&gt;&lt;br /&gt;foreach (&lt;span style="color:#339999;"&gt;BuildStepData&lt;/span&gt; in buildSteps)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#339999;"&gt;MessageBox&lt;/span&gt;.Show(buildStep.BuildStepMessage);&lt;br /&gt;&lt;span style="color:#339999;"&gt;MessageBox&lt;/span&gt;.Show(buildStep.BuildStepName);&lt;br /&gt;&lt;span style="color:#339999;"&gt;MessageBox&lt;/span&gt;.Show(buildStep.FinishTime.ToString());&lt;br /&gt;&lt;span style="color:#339999;"&gt;MessageBox&lt;/span&gt;.Show(buildStep.Status.ToString());&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-2674965992413957307?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/2674965992413957307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=2674965992413957307&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2674965992413957307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2674965992413957307'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/04/how-to-get-build-result-details-using.html' title='How to Get Build Result Details using TFS API - Part 2'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-3124152593311167928</id><published>2007-03-29T14:06:00.000+02:00</published><updated>2007-03-29T14:09:38.944+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='auto hide'/><category scheme='http://www.blogger.com/atom/ns#' term='drag and drop'/><category scheme='http://www.blogger.com/atom/ns#' term='dock'/><category scheme='http://www.blogger.com/atom/ns#' term='alway on top'/><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='toolbar'/><title type='text'>How to Dock the Vista Toolbars to the Edge of the Screen</title><content type='html'>I found a way to dock Vista toolbars to the edge of the screen since drag and drop does not work anymore:&lt;br /&gt;1) Create a new folder on the desktop&lt;br /&gt;2) Drag it to on of the edges so it would become a toolbar&lt;br /&gt;3) Right click the toolbar and select the toolbar that you want to show&lt;br /&gt;4) Now you can define the toolbar behaviour (Auto Hide, Alway on Top)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-3124152593311167928?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/3124152593311167928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=3124152593311167928&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/3124152593311167928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/3124152593311167928'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/03/how-to-dock-vista-toolbars-to-edge-of.html' title='How to Dock the Vista Toolbars to the Edge of the Screen'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-2502406386785767683</id><published>2007-03-14T06:40:00.000+02:00</published><updated>2007-03-14T07:20:12.412+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='build type'/><category scheme='http://www.blogger.com/atom/ns#' term='GetBuildDetails'/><category scheme='http://www.blogger.com/atom/ns#' term='build management'/><category scheme='http://www.blogger.com/atom/ns#' term='builddata'/><category scheme='http://www.blogger.com/atom/ns#' term='changeset'/><category scheme='http://www.blogger.com/atom/ns#' term='builduri'/><category scheme='http://www.blogger.com/atom/ns#' term='GetBuildUri'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><category scheme='http://www.blogger.com/atom/ns#' term='team system anual event'/><title type='text'>How to Get Build Result Details using TFS API - Part 1</title><content type='html'>In this series of posts I would explain how to use TFS API in order to retrieve build result details as they appear in the build report.&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TKDljPrjsXI/RfeBK8D1i-I/AAAAAAAAADE/ShEER7K3gW4/s1600-h/BuildReport.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5041640332785454050" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_TKDljPrjsXI/RfeBK8D1i-I/AAAAAAAAADE/ShEER7K3gW4/s400/BuildReport.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In order to retrieve result details for a build we need to create a BuildStore object. There is an example on how to create a BuildStore object on a previous post: &lt;a href="http://notsosmartbuilder.blogspot.com/2006/12/get-build-changes-changesetdata.html"&gt;Get Build Changes&lt;/a&gt;. The example take into consideration that you have already created the BuildStore object and it is named buildStore.&lt;br /&gt;&lt;br /&gt;In this post we will see how to retrive the details under the summary section of the build report. First, we need to get the BuildData object for the build. Here's how to get the BuildData object:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;BuildData&lt;/span&gt; buildData = buildStore.GetBuildDetails(buildStore.GetBuildUri(teamProject, buildNumber));&lt;br /&gt;&lt;br /&gt;Now that we've got the BuildData object we can retrieve the build details that appear in the summary section of the report:&lt;br /&gt;&lt;br /&gt;buildData.BuildNumber&lt;br /&gt;buildData.RequestedBy&lt;br /&gt;buildData.TeamProject&lt;br /&gt;buildData.BuildType&lt;br /&gt;buildData.BuildMachine&lt;br /&gt;buildData.StartTime&lt;br /&gt;buildData.FinishTime&lt;br /&gt;buildData.LastChangedBy&lt;br /&gt;buildData.LastChangedOn&lt;br /&gt;buildData.BuildQuality&lt;br /&gt;buildData.LogLocation&lt;br /&gt;&lt;br /&gt;On the next post for this series I will explain how to retrieve the details for the "Build Steps" section of the report.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-2502406386785767683?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/2502406386785767683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=2502406386785767683&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2502406386785767683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2502406386785767683'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/03/how-to-get-build-result-details-using.html' title='How to Get Build Result Details using TFS API - Part 1'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_TKDljPrjsXI/RfeBK8D1i-I/AAAAAAAAADE/ShEER7K3gW4/s72-c/BuildReport.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-7318925187058787470</id><published>2007-02-25T07:09:00.000+02:00</published><updated>2007-02-25T07:19:16.780+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='build type'/><category scheme='http://www.blogger.com/atom/ns#' term='build management'/><category scheme='http://www.blogger.com/atom/ns#' term='buildprogressform'/><category scheme='http://www.blogger.com/atom/ns#' term='buildparameters'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='start build'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsbuildmanager'/><title type='text'>Start a Team Build Using BuildProgressForm</title><content type='html'>I found out another way for starting a build using the BuildProgressForm. The BuildProgressForm is the same one used by Visual Studio Team Build intergration for starting a build.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_TKDljPrjsXI/ReEbSqbq46I/AAAAAAAAACk/PGxa-lMf2uQ/s1600-h/StartingBuild.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5035335865818866594" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_TKDljPrjsXI/ReEbSqbq46I/AAAAAAAAACk/PGxa-lMf2uQ/s400/StartingBuild.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This method is very useful for my tool &lt;a href="http://www.codeplex.com/TFSBuildManager"&gt;TFSBuildManger&lt;/a&gt;.&lt;br /&gt;Here's an example of how to do so:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;BuildParameters&lt;/span&gt; buildParameters = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;BuildParameters&lt;/span&gt;();&lt;br /&gt;buildParameters.TeamFoundationServer = teamFoundationServer; buildParameters.TeamProject = teamProject;&lt;br /&gt;buildParameters.BuildType = buildType;&lt;br /&gt;buildParameters.BuildMachine = buildmachine;&lt;br /&gt;buildParameters.BuildDirectory = buildDirectory;&lt;br /&gt;&lt;span style="color:#339999;"&gt;BuildProgressForm&lt;/span&gt; frmBuildProgress = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;BuildProgressForm&lt;/span&gt;(buildParameters, teamFoundationServer);&lt;br /&gt;frmBuildProgress.ShowDialog();&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-7318925187058787470?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/7318925187058787470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=7318925187058787470&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7318925187058787470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7318925187058787470'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/02/start-team-build-using.html' title='Start a Team Build Using BuildProgressForm'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_TKDljPrjsXI/ReEbSqbq46I/AAAAAAAAACk/PGxa-lMf2uQ/s72-c/StartingBuild.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-5273261358117538786</id><published>2007-02-21T06:43:00.000+02:00</published><updated>2007-02-22T19:53:37.737+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='build type'/><category scheme='http://www.blogger.com/atom/ns#' term='build management'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Plex'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsbuildmanager'/><title type='text'>TFSBuildManager UI Change (Tabbed View)</title><content type='html'>It been a while since my last post. Anyway, I have published a new release of &lt;a href="http://www.codeplex.com/TFSBuildManager"&gt;TFSBuildManager&lt;/a&gt; under &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt;. The main and only change for this release is that the UI now supports control of multiple build types simultaneously by using tabs. Hope you would like this change. You can download the new version &lt;a href="http://www.codeplex.com/TFSBuildManager/Release/ProjectReleases.aspx?ReleaseId=1962"&gt;here&lt;/a&gt;. I would appreciate your comments on this change and about the application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-5273261358117538786?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/5273261358117538786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=5273261358117538786&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5273261358117538786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5273261358117538786'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/02/tfsbuildmanager-ui-chnage-tabbed-view.html' title='TFSBuildManager UI Change (Tabbed View)'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-5843212306730293625</id><published>2007-01-31T07:19:00.000+02:00</published><updated>2007-01-31T07:33:02.654+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='build type'/><category scheme='http://www.blogger.com/atom/ns#' term='build management'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Plex'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsbuildmanager'/><title type='text'>TFSBuildManager New Version</title><content type='html'>I have released a new version of &lt;a href="http://www.codeplex.com/TFSBuildManager"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;TFSBuildManager&lt;/span&gt;&lt;/a&gt;. You can download it &lt;a href="http://www.codeplex.com/TFSBuildManager/Release/ProjectReleases.aspx"&gt;here&lt;/a&gt;. I made some &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;changes&lt;/span&gt; to the edit build type form and added some advanced properties that are inherited from the imported &lt;strong&gt;Microsoft.TeamFoundation.Build.targets&lt;/strong&gt; file. There are some other cool features like "Execute Without Get" which actually resumes a build from the compilation point disabling the process of creating a workspace. This feature is very handy when you setup a new build machine and the build fails because of errors regarding the machine configuration and not because of source files. For the full feature list see the release change log.&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-5843212306730293625?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/5843212306730293625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=5843212306730293625&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5843212306730293625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5843212306730293625'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/tfsbuildmanager-new-version.html' title='TFSBuildManager New Version'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-946889282855809988</id><published>2007-01-28T22:03:00.002+02:00</published><updated>2007-01-29T20:22:03.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='excel.application'/><category scheme='http://www.blogger.com/atom/ns#' term='export data'/><category scheme='http://www.blogger.com/atom/ns#' term='excel'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='reports'/><title type='text'>Export Data to Excel Sheet</title><content type='html'>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="font-family:'Trebuchet MS','sans-serif';"&gt;I have notice that there is a lot of traffic to my Blog because of a post I have about exporting Excel chart to an image. I thought that it would be good to share more stuff about Excel automation in C#. Below you can find a method to export data into excel sheet. This function uses a list view as the data source.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; System;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; System.Collections.Generic;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; System.Text;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; System.Windows.Forms;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; System.Globalization;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; System.Threading;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; System.Drawing;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;using&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; ExcelAutomation = Microsoft.Office.Interop.Excel;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';color:blue;"  &gt;namespace&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt; ExcelUtils&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 1"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&lt;span style="color:#000000;"&gt; Excel&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 2"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; BorderAroundCell(ExcelAutomation.Range CellRange)&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 2"&gt;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;CellRange.BorderAround(ExcelAutomation.XlLineStyle.xlContinuous,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;ExcelAutomation.XlBorderWeight.xlThin,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;ExcelAutomation.XlColorIndex.xlColorIndexAutomatic,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 4"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Missing);&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 2"&gt;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 2"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 2"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; ReportFromListView(&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; reportName, ListView&lt;br /&gt;listView)&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 2"&gt;&lt;/span&gt;{&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;ExcelAutomation.Application excelApp = &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; ExcelAutomation.ApplicationClass();&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;excelApp.UserControl = &lt;/span&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;&lt;span style="color:#000000;"&gt; oldCultureInfo = &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;&lt;span style="color:#000000;"&gt;.CurrentThread.CurrentCulture;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;&lt;span style="color:#000000;"&gt;.CurrentThread.CurrentCulture = &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"en-US"&lt;/span&gt;&lt;span style="color:#000000;"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;ExcelAutomation.Workbook workbook = excelApp.Workbooks.Add(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Missing);&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;ExcelAutomation.Worksheet worksheet = (ExcelAutomation.Worksheet)workbook.Worksheets.get_Item(1);&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;worksheet.Name = reportName;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;//Headers&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:#000000;"&gt; (ColumnHeader columnHeader &lt;/span&gt;&lt;span style="color:blue;"&gt;in&lt;/span&gt;&lt;span style="color:#000000;"&gt; listView.Columns)&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;worksheet.Cells[1, columnHeader.Index + 1] = columnHeader.Text;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[] letters = &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt;[26]{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"A"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"B"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"C"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"D"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"E"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"F"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"G"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"H"&lt;/span&gt;&lt;span style="color:#000000;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 4"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"I"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"J"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"K"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"L"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"M"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"N"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"O"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"P"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"Q"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"R"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"S"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"T"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"U"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"V"&lt;/span&gt;&lt;span style="color:#000000;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 4"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"W"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"X"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"Y"&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"Z"&lt;/span&gt;&lt;span style="color:#000000;"&gt;};&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; i = 0; i &amp;lt; listView.Columns.Count; i++)&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 4"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; headerCell = letters.GetValue(i) + &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"1"&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;worksheet.get_Range(headerCell, headerCell).Font.Bold = &lt;/span&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;BorderAroundCell(worksheet.get_Range(headerCell, headerCell));&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;worksheet.get_Range(headerCell, headerCell).Interior.ColorIndex = 36;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;//Content&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; i = 0; i &amp;lt; listView.Items.Count; i++)&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 4"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;span style="color:#000000;"&gt; (&lt;/span&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:#000000;"&gt; j = 0; j &amp;lt; listView.Columns.Count; j++)&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 5"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; dataCell = letters.GetValue(j) + (i + 2).ToString();&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 5"&gt;&lt;/span&gt;worksheet.Cells[i + 2, j + 1] = listView.Items[i].SubItems[j].Text;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 5"&gt;&lt;/span&gt;BorderAroundCell(worksheet.get_Range(dataCell, dataCell));&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 4"&gt;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;/span&gt;&lt;span style="mso-tab-count: 2"&gt;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;worksheet.Columns.AutoFit();&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;worksheet.Columns.HorizontalAlignment = ExcelAutomation.XlHAlign.xlHAlignLeft;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;excelApp.Visible = &lt;/span&gt;&lt;span style="color:blue;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="mso-tab-count: 3"&gt;&lt;span style="color:#000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;&lt;span style="color:#000000;"&gt;.CurrentThread.CurrentCulture = oldCultureInfo;&lt;span style="mso-tab-count: 2"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 2"&gt;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-no-proof: yes;font-family:'Courier New';" &gt;&lt;span style="color:#000000;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&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/16754876-946889282855809988?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/946889282855809988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=946889282855809988&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/946889282855809988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/946889282855809988'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/export-data-to-excel-sheet_28.html' title='Export Data to Excel Sheet'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-7995430120995353103</id><published>2007-01-22T11:25:00.000+02:00</published><updated>2007-02-22T19:56:19.356+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Plex'/><category scheme='http://www.blogger.com/atom/ns#' term='Terminals'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Remote Desktop Connection'/><category scheme='http://www.blogger.com/atom/ns#' term='RDP 6'/><category scheme='http://www.blogger.com/atom/ns#' term='RDP'/><category scheme='http://www.blogger.com/atom/ns#' term='Terminal Service'/><category scheme='http://www.blogger.com/atom/ns#' term='0'/><title type='text'>New Terminals Version (Support for RDP 6.0)</title><content type='html'>&lt;p&gt;We have published a new &lt;a href="http://www.codeplex.com/Terminals"&gt;Terminals &lt;/a&gt;version (1.0 Prodcution). You can download it at &lt;a href="http://www.codeplex.com/Terminals/Project/FileDownload.aspx?DownloadId=5914"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Here are the available changes for this release:&lt;/p&gt;&lt;p&gt;1. Support for RDP 6:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;32bit color support.&lt;/li&gt;&lt;li&gt;Supports screen resolutions of up to 4096x2048.&lt;/li&gt;&lt;li&gt;Supports disabling clipboard redirection.&lt;/li&gt;&lt;li&gt;Enable smart card redirection.&lt;/li&gt;&lt;li&gt;Enable plug&amp;amp;play devices redirection.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;2. Save position and size.&lt;/p&gt;&lt;p&gt;3. Nicer about box...&lt;/p&gt;&lt;p&gt;4. Execute before connect (per connection and for all connections).&lt;/p&gt;&lt;p&gt;5. Some additional bugs were fixed.&lt;/p&gt;&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-7995430120995353103?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/7995430120995353103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=7995430120995353103&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7995430120995353103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7995430120995353103'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/new-terminal-version-support-for-rdp-60.html' title='New Terminals Version (Support for RDP 6.0)'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-429239693111309040</id><published>2007-01-17T06:52:00.000+02:00</published><updated>2007-01-29T20:24:11.880+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfswarehouse'/><category scheme='http://www.blogger.com/atom/ns#' term='olap'/><category scheme='http://www.blogger.com/atom/ns#' term='export data'/><category scheme='http://www.blogger.com/atom/ns#' term='excel'/><category scheme='http://www.blogger.com/atom/ns#' term='cube'/><category scheme='http://www.blogger.com/atom/ns#' term='lcd'/><category scheme='http://www.blogger.com/atom/ns#' term='excel integration'/><category scheme='http://www.blogger.com/atom/ns#' term='dashboard'/><title type='text'>Company Dashboard</title><content type='html'>We have installed a 42'' LCD Screen in our &lt;a href="http://www.clarizen.com/"&gt;company&lt;/a&gt; headquarters. This LCD screen will be used for a dashboard &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;displaying&lt;/span&gt; stats on our development process. Currently I'm using Excel reports created with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;TfsWarehouse&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)"&gt;OLAP&lt;/span&gt; cube (I have written about it before and I will post a guide in the future). The Excel reports are processed by a utility I wrote that &lt;a href="http://notsosmartbuilder.blogspot.com/2007/01/export-excel-chart-to-image.html"&gt;extracts the charts from the Excel files to images&lt;/a&gt; in a directory that is displayed in a web site (I used javascript fade effect for it).&lt;br /&gt;&lt;br /&gt;Here are some pictures of the LCD screen:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh3.google.com/image/dudushmaya/Ra2xaL6VapI/AAAAAAAAACI/CetMf416RIg/LCD1.jpg?imgmax=800"&gt;&lt;img style="WIDTH: 400px; CURSOR: hand" alt="" src="http://lh3.google.com/image/dudushmaya/Ra2xaL6VapI/AAAAAAAAACI/CetMf416RIg/LCD1.jpg?imgmax=800" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh4.google.com/image/dudushmaya/Ra2xab6VaqI/AAAAAAAAACQ/t9uSdOTdSeI/LCD2.jpg?imgmax=640"&gt;&lt;img style="WIDTH: 400px; CURSOR: hand" alt="" src="http://lh4.google.com/image/dudushmaya/Ra2xab6VaqI/AAAAAAAAACQ/t9uSdOTdSeI/LCD2.jpg?imgmax=640" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-429239693111309040?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/429239693111309040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=429239693111309040&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/429239693111309040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/429239693111309040'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/company-dashboard.html' title='Company Dashboard'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-5682175478181303783</id><published>2007-01-15T07:41:00.000+02:00</published><updated>2007-01-15T09:25:06.166+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>5 Things That Will Make You Move To Vista</title><content type='html'>I've started using Windows Vista on my desktop. I like it, it's working smooth and it looks good.&lt;br /&gt;I don't think that moving to Vista is essential but I've decided to work with it and find out what will make me consider moving all of my machines to Vista.&lt;br /&gt;So here are the first 5 features that made me smile:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Start&lt;/strong&gt; --&gt; &lt;strong&gt;Run&lt;/strong&gt; is dead. &lt;strong&gt;Start&lt;/strong&gt; --&gt; &lt;strong&gt;Start Search&lt;/strong&gt; is the answer to those who won't leave their keyboards. Press the Windows button and start &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;typing&lt;/span&gt; for searching programs and files. I did not open the programs group since I've installed Vista. It became useless.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;F2&lt;/strong&gt;. This one made me smile the most. When you press &lt;strong&gt;F2&lt;/strong&gt; to rename a file the selected text is only the file name without the extension (for those of you that show file extensions). I wonder how long it took to develop this feature?&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Search&lt;/strong&gt; is now part of the Explorer address bar. Just start typing and it show you the results in the same window. Performance is affected by indexing status.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Burn&lt;/strong&gt; button (Windows Explorer toolbar): Although I like using dedicated programs for CD/DVD burning I found the &lt;strong&gt;Burn&lt;/strong&gt; button very useful. Select files and folders and press the &lt;strong&gt;Burn&lt;/strong&gt; button to burn them.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Restore previous versions&lt;/strong&gt; (Folder, file context menu): If you will enable in system security Shadow Copies or System Restore you can get previous version of a file, folder. Good backup solution.&lt;/li&gt;&lt;/ol&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/16754876-5682175478181303783?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/5682175478181303783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=5682175478181303783&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5682175478181303783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5682175478181303783'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/5-things-that-will-make-you-move-to.html' title='5 Things That Will Make You Move To Vista'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-2882253609090602153</id><published>2007-01-10T08:20:00.000+02:00</published><updated>2007-01-10T08:28:29.031+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='build type'/><category scheme='http://www.blogger.com/atom/ns#' term='build management'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><category scheme='http://www.blogger.com/atom/ns#' term='tfsbuildmanager'/><title type='text'>TFSBuildManager</title><content type='html'>I wrote a utility to manage build types called &lt;a href="http://www.codeplex.com/TFSBuildManager"&gt;TFSBuildManager&lt;/a&gt;. You can download it's first release &lt;a href="javascript:WebForm_DoPostBackWithOptions(new" downloadid="'5420"&gt;here&lt;/a&gt;. It is hosted under &lt;a href="http://www.codeplex,com"&gt;CodePlex&lt;/a&gt;.&lt;br /&gt;Main features of this utility are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start, stop a build&lt;/li&gt;&lt;li&gt;Change build/s quality &lt;/li&gt;&lt;li&gt;Delete, backup build/s&lt;/li&gt;&lt;li&gt;Edit build type&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I wrote it because I needed the ability to manage build types outside Visual Studio environment. Also, I needed some features that are not available through Visual Studio IDE.&lt;/p&gt;&lt;p&gt;I'm planning to add:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Advanced build log &lt;/li&gt;&lt;li&gt;Add new Build Type&lt;/li&gt;&lt;li&gt;Build list filtering &lt;/li&gt;&lt;li&gt;Edit advanced Build Type properties&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Enjoy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-2882253609090602153?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/2882253609090602153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=2882253609090602153&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2882253609090602153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/2882253609090602153'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/tfsbuildmanager.html' title='TFSBuildManager'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-1862553169119664672</id><published>2007-01-08T07:41:00.000+02:00</published><updated>2007-01-08T08:07:43.211+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='excel'/><category scheme='http://www.blogger.com/atom/ns#' term='excel integration'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='chart'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='reports'/><title type='text'>Export Excel Chart To Image</title><content type='html'>I'm working on a dashboard that will display TFS reports. I thought using "SQL Server Business Intelligence Development Studio" for creating reports but found it not so stable. Anyway, I think that using TFS Excel integration for creating reports is the best way (I will write about how to do it in a future post). Now I have some excel reports but I want them to be displayed in our dashboard automatically (soon will be displayed on a 42'' LCD...). The solution for this was to export the excel chart from the report to an image that will be displayed in the dashboard site.&lt;br /&gt;Here's the code to export the image:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Configuration;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Excel = Microsoft.Office.Interop.Excel;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Globalization;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.Threading;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;private static void&lt;/span&gt; ExportExcelChartToImage(&lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; excelFile, &lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; outputFile)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#006600;"&gt;//Object to send in com methods instead of null&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;object&lt;/span&gt; missing = System.Reflection.&lt;span style="color:#339999;"&gt;Missing&lt;/span&gt;.Value;&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Create a new excel application&lt;/span&gt;&lt;br /&gt;Excel.&lt;span style="color:#339999;"&gt;Application&lt;/span&gt; excelApplication = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; Excel.&lt;span style="color:#339999;"&gt;ApplicationClass&lt;/span&gt;();&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Saving the old culture info&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#339999;"&gt;CultureInfo&lt;/span&gt; oldCultureInfo = &lt;span style="color:#339999;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentCulture;&lt;br /&gt;try&lt;br /&gt;{ &lt;span style="color:#339999;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#006600;"&gt;//Setting new culture info is en-us is not default (Disable exception)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentCulture = new &lt;span style="color:#339999;"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color:#990000;"&gt;"en-us"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Open the excel document&lt;br /&gt;&lt;/span&gt;Excel.&lt;span style="color:#339999;"&gt;Workbook&lt;/span&gt; excelWorkbook = excelApplication.Workbooks.Open(excelFile,&lt;br /&gt;missing, missing, missing, missing, missing, missing, missing, missing,&lt;br /&gt;missing, missing, missing, missing, missing, missing);&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Refresh the data from TFS&lt;/span&gt;&lt;br /&gt;excelWorkbook.RefreshAll();&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Taking into consideration that there's only one sheet&lt;/span&gt;&lt;br /&gt;Excel.&lt;span style="color:#339999;"&gt;Worksheet&lt;/span&gt; activeSheet = (Excel.&lt;span style="color:#339999;"&gt;Worksheet&lt;/span&gt;)excelWorkbook.ActiveSheet;&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Again, there's only one chart on the sheet&lt;/span&gt;&lt;br /&gt;Excel.&lt;span style="color:#339999;"&gt;ChartObjects&lt;/span&gt; chartObjects = (Excel.&lt;span style="color:#339999;"&gt;ChartObjects&lt;/span&gt;)activeSheet.ChartObjects(missing);&lt;br /&gt;Excel.&lt;span style="color:#339999;"&gt;ChartObject&lt;/span&gt; chartObject = (Excel.&lt;span style="color:#339999;"&gt;ChartObject&lt;/span&gt;)chartObjects.Item(1);&lt;br /&gt;Excel.&lt;span style="color:#339999;"&gt;Chart&lt;/span&gt; chart = chartObject.Chart;&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Set the filter (bmp, jpg...)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; extension = &lt;span style="color:#339999;"&gt;Path&lt;/span&gt;.GetExtension(outputFile).Replace(".", "");&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Export the image&lt;/span&gt;&lt;br /&gt;chart.Export(outputFile, extension, missing);&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Save and close the workbook&lt;/span&gt;&lt;br /&gt;excelWorkbook.Save();&lt;br /&gt;excelWorkbook.Close(&lt;span style="color:#3333ff;"&gt;false&lt;/span&gt;, excelFile, missing);&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Set the old culture info&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentCulture = oldCultureInfo;&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Close and free the excel application&lt;/span&gt;&lt;br /&gt;excelApplication.Quit();&lt;br /&gt;excelApplication = &lt;span style="color:#339999;"&gt;null&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-1862553169119664672?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/1862553169119664672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=1862553169119664672&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1862553169119664672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1862553169119664672'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/export-excel-chart-to-image.html' title='Export Excel Chart To Image'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-5372142974293114771</id><published>2007-01-02T07:26:00.000+02:00</published><updated>2007-01-02T07:44:34.651+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><title type='text'>Get List of Builds for Deleted Build Types</title><content type='html'>To get a list of builds you can use:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;BuildData&lt;/span&gt;[] GetListOfBuilds(&lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; teamProject, &lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; buildType)&lt;br /&gt;&lt;br /&gt;How to get build types list I have mentions in: &lt;a href="http://notsosmartbuilder.blogspot.com/2006/11/how-to-get-build-types-list.html"&gt;How to Get Build Types List&lt;/a&gt;.&lt;br /&gt;If you deleted a build type and you want to get list of builds from this type then you need to call &lt;strong&gt;GetListOfBuilds&lt;/strong&gt; with &lt;span style="color:#339999;"&gt;String&lt;/span&gt;.Empty as the buildType parameter. This will return a full list of builds for the teamProject.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;public&lt;/span&gt; BuildData[] GetAllBuilds(&lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; server, &lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; project)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#339999;"&gt;TeamFoundationServer&lt;/span&gt; tfs = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;TeamFoundationServer&lt;/span&gt;(server, &lt;span style="color:#339999;"&gt;CredentialCache&lt;/span&gt;.DefaultCredentials);&lt;br /&gt;tfs.EnsureAuthenticated();&lt;br /&gt;&lt;span style="color:#339999;"&gt;BuildStore&lt;/span&gt; bs = (&lt;span style="color:#339999;"&gt;BuildStore&lt;/span&gt;)tfs.GetService(&lt;span style="color:#3333ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#339999;"&gt;BuildStore&lt;/span&gt;));&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;return&lt;/span&gt; bs.GetListOfBuilds(project, String.Empty);&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-5372142974293114771?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/5372142974293114771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=5372142974293114771&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5372142974293114771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/5372142974293114771'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2007/01/get-list-of-builds-for-deleted-build.html' title='Get List of Builds for Deleted Build Types'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-560689031671890083</id><published>2006-12-28T06:58:00.000+02:00</published><updated>2006-12-28T07:10:37.251+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tfs'/><category scheme='http://www.blogger.com/atom/ns#' term='changesetdata'/><category scheme='http://www.blogger.com/atom/ns#' term='changeset'/><category scheme='http://www.blogger.com/atom/ns#' term='change'/><category scheme='http://www.blogger.com/atom/ns#' term='versioncontrolserver'/><category scheme='http://www.blogger.com/atom/ns#' term='teamfoundationserver'/><category scheme='http://www.blogger.com/atom/ns#' term='buildstore'/><title type='text'>Get Build Changes (ChangeSetData, Changeset, Change)</title><content type='html'>To improve our custom build report that I have talked about before (&lt;a href="http://notsosmartbuilder.blogspot.com/2006/12/custom-build-logger-ilogger.html"&gt;Custom Build Logger&lt;/a&gt;) I wanted to add information regarding the users that are involved in this build and the changes that they made to source control.&lt;br /&gt;Here's an example how to go over build changes:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.Client;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.VersionControl.Client;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.Build.Proxy;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#339999;"&gt;TeamFoundationServer&lt;/span&gt; tfs = new &lt;span style="color:#339999;"&gt;TeamFoundationServer&lt;/span&gt;(server);&lt;br /&gt;&lt;span style="color:#339999;"&gt;VersionControlServer&lt;/span&gt; vcs = (&lt;span style="color:#339999;"&gt;VersionControlServer&lt;/span&gt;)tfs.GetService(&lt;span style="color:#3333ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#339999;"&gt;VersionControlServer&lt;/span&gt;));&lt;br /&gt;&lt;span style="color:#339999;"&gt;BuildStore&lt;/span&gt; bs = (&lt;span style="color:#339999;"&gt;BuildStore&lt;/span&gt;)tfs.GetService(&lt;span style="color:#3333ff;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#339999;"&gt;BuildStore&lt;/span&gt;));&lt;br /&gt;&lt;span style="color:#339999;"&gt;ChangeSetData&lt;/span&gt;[] changeSetsData = bs.GetChangeSetsForBuild(bs.GetBuildUri(project, buildNumber));&lt;br /&gt;foreach (&lt;span style="color:#339999;"&gt;ChangeSetData&lt;/span&gt; changeSetData in changeSetsData)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Here you can do something with the ChangeSetData properties&lt;br /&gt;//changeSetData.CheckedInBy...&lt;br /&gt;//Get the ChangeSetData Changeset&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#339999;"&gt;Changeset&lt;/span&gt; changeSet = vcs.GetChangeset(changeSetData.ChangeSetId);&lt;br /&gt;//Go over the Changeset changes&lt;br /&gt;foreach (&lt;span style="color:#339999;"&gt;Change&lt;/span&gt; change in changeSet.Changes)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#006600;"&gt;//Here you can do something with the Change&lt;br /&gt;//change.Item.ServerItem...&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-560689031671890083?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/560689031671890083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=560689031671890083&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/560689031671890083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/560689031671890083'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/12/get-build-changes-changesetdata.html' title='Get Build Changes (ChangeSetData, Changeset, Change)'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-7783014867282218377</id><published>2006-12-25T07:57:00.000+02:00</published><updated>2007-01-29T20:26:02.741+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='file was rejected by digital signature policy'/><category scheme='http://www.blogger.com/atom/ns#' term='visual studio 2005 sp1'/><title type='text'>File was rejected by digital signature policy (VS 2005 SP1 Installation)</title><content type='html'>I'm installing Visual Studio 2005 SP1 on our servers and I got this error while running the installation. It seems to be a memory issue while trying to verify the package. Here's a KB that that was suppose to help solving the problem: &lt;a href="http://support.microsoft.com/kb/925336"&gt;http://support.microsoft.com/kb/925336&lt;/a&gt;. Here's a detailed guide:&lt;br /&gt;1) Open Administrative Tools -&gt; Local Security Policy.&lt;br /&gt;2) Click the "Software Restriction Policies" item on the left tree. If you see on the right side of the window a message that says: "No Software Restriction Policies Defined" then you need to right click the "Software Restriction Policies" item on the left side of the window and select "Create New Policies". Look at the screen shot below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TKDljPrjsXI/RY9qw6B1ZuI/AAAAAAAAAAs/R98M6zo7WRg/s1600-h/SRP.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5012342298729866978" style="WIDTH: 389px; CURSOR: hand; HEIGHT: 217px" height="175" alt="" src="http://bp1.blogger.com/_TKDljPrjsXI/RY9qw6B1ZuI/AAAAAAAAAAs/R98M6zo7WRg/s400/SRP.JPG" width="586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) After doing this (or you did not have to), double click the &lt;strong&gt;"Enforcement"&lt;/strong&gt; item in the right side of the window. In the new opened window select the &lt;strong&gt;"All users except local administrators"&lt;/strong&gt; radio button. and apply the changes. Take a look at the picture below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_TKDljPrjsXI/RY9snaB1ZwI/AAAAAAAAAA8/pVITKr-ybIg/s1600-h/SRP1.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5012344334544365314" style="WIDTH: 421px; CURSOR: hand; HEIGHT: 307px" height="261" alt="" src="http://bp3.blogger.com/_TKDljPrjsXI/RY9snaB1ZwI/AAAAAAAAAA8/pVITKr-ybIg/s400/SRP1.JPG" width="644" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;4) After doing all those still I had the same error. I searched and found another post (&lt;a href="http://blogs.msdn.com/heaths/archive/2006/09/22/Enabling-Large-Patches-to-Install.aspx"&gt;http://blogs.msdn.com/heaths/archive/2006/09/22/Enabling-Large-Patches-to-Install.aspx&lt;/a&gt;) regarding big patches installation and followed these steps:&lt;/p&gt;&lt;p&gt;Set the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;DWORD&lt;/span&gt; value &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;PolicyScope&lt;/span&gt; to 1 in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)"&gt;HKEY&lt;/span&gt;_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3" onclick="BLOG_clickHandler(this)"&gt;CodeIdentifiers&lt;/span&gt; key. Run "net stop &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4" onclick="BLOG_clickHandler(this)"&gt;msiserver&lt;/span&gt;" (without quotes). Install the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5" onclick="BLOG_clickHandler(this)"&gt;EXE&lt;/span&gt; or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6" onclick="BLOG_clickHandler(this)"&gt;MSP&lt;/span&gt; (if you extracted the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7" onclick="BLOG_clickHandler(this)"&gt;MSP&lt;/span&gt; from the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8" onclick="BLOG_clickHandler(this)"&gt;EXE&lt;/span&gt;).&lt;/p&gt;&lt;p&gt;Don't forget to set it back to the old value. &lt;/p&gt;&lt;p&gt;This helped me solve the issue and after few hours of struggling I finished installing the patch. I don't know if you need to do everything I mentioned. Maybe you can apply the last one only and it will work.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-7783014867282218377?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/7783014867282218377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=7783014867282218377&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7783014867282218377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/7783014867282218377'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/12/file-was-rejected-by-digital-signature.html' title='File was rejected by digital signature policy (VS 2005 SP1 Installation)'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_TKDljPrjsXI/RY9qw6B1ZuI/AAAAAAAAAAs/R98M6zo7WRg/s72-c/SRP.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-955501317753952988</id><published>2006-12-14T07:25:00.000+02:00</published><updated>2007-01-29T20:27:08.977+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='srl'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration management'/><category scheme='http://www.blogger.com/atom/ns#' term='team system anual event'/><title type='text'></title><content type='html'>As I mentioned before, yesterday, I spoke at the Team System event is Israel. I have joined &lt;a href="http://blogs.microsoft.co.il/blogs/srlteam/"&gt;SRL&lt;/a&gt; to a lecture on Configuration Management and Build Enhancements. It was a pleasure sharing the knowledge. Here I am:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_TKDljPrjsXI/RYDhOzmsQsI/AAAAAAAAAAU/0QTtI0aCvpk/s1600-h/Event.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5008250430122902210" style="CURSOR: hand" alt="" src="http://bp1.blogger.com/_TKDljPrjsXI/RYDhOzmsQsI/AAAAAAAAAAU/0QTtI0aCvpk/s400/Event.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://bp2.blogger.com/_TKDljPrjsXI/RYDhBDmsQrI/AAAAAAAAAAM/vk77K76PsPA/s1600-h/Event.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-955501317753952988?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/955501317753952988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=955501317753952988&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/955501317753952988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/955501317753952988'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/12/as-i-mentioned-before-yesterday-i-spoke.html' title=''/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_TKDljPrjsXI/RYDhOzmsQsI/AAAAAAAAAAU/0QTtI0aCvpk/s72-c/Event.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-1739350603220036836</id><published>2006-12-12T11:13:00.000+02:00</published><updated>2007-01-29T20:55:43.794+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='winamp'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='drag and drop files'/><title type='text'>Drag and Drop Files Order</title><content type='html'>&lt;p&gt;Check out this &lt;a href="http://yedda.com/questions/9514442018151/"&gt;interesting question&lt;/a&gt; on Yedda&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="BORDER-RIGHT: #e3e4e7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #e3e4e7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #e3e4e7 1px solid; DIRECTION: ltr; PADDING-TOP: 5px; BORDER-BOTTOM: #e3e4e7 1px solid; BACKGROUND-: leftcolor:#fdf3e7;" &gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-size:120;color:#096491;"  &gt;&lt;a href="http://yedda.com/"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; VERTICAL-ALIGN: middle; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="26" alt="Yedda - People.Sharing.Knowledge." src="http://yedda.com/images/OrangeBalloonSmall.gif?gIHoaMvnyAg=" width="30" border="0" /&gt;&lt;/a&gt;&lt;a href="http://yedda.com/questions/9514442018151/"&gt;WinAmp 5.32: playlist&lt;/a&gt;&lt;/span&gt; &lt;p&gt;I love Winamp and I've been using it since version 2 I think, but there's one problem with it that I keep getting: when I drag files from Windows Explorer to the Winamp playlist, the order of the files changes. When will they fix it?&lt;/p&gt;&lt;p&gt;Topics:  &lt;a href="http://yedda.com/questions/tags/software/" rel="tag"&gt;software&lt;/a&gt;, &lt;a href="http://yedda.com/questions/tags/media+players/" rel="tag"&gt;media players&lt;/a&gt;, &lt;a href="http://yedda.com/questions/tags/winamp+5.32/" rel="tag"&gt;winamp 5.32&lt;/a&gt;&lt;/p&gt;&lt;p style="FONT-SIZE: smaller"&gt;Asked by &lt;a href="http://yedda.com/people/6276915601530/"&gt;hubble&lt;/a&gt; on December 11, 2006&lt;/p&gt;&lt;p&gt;View the &lt;a href="http://yedda.com/questions/9514442018151/"&gt;entire discussion&lt;/a&gt; on Yedda&lt;a href="http://yedda.com/"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; VERTICAL-ALIGN: middle; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="13" alt="Yedda - People.Sharing.Knowledge." src="http://yedda.com/images/OrangeBalloonSmall.gif?gIHoaMvnyAg=" width="15" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Check out this &lt;a href="http://yedda.com/questions/9514442018151/#postId1865159865214"&gt;interesting answer&lt;/a&gt; on Yedda&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="BORDER-RIGHT: #e3e4e7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #e3e4e7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #e3e4e7 1px solid; DIRECTION: ltr; PADDING-TOP: 5px; BORDER-BOTTOM: #e3e4e7 1px solid; BACKGROUND-: leftcolor:#fdf3e7;" &gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-size:120;color:#096491;"  &gt;&lt;a href="http://yedda.com/"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; VERTICAL-ALIGN: middle; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="26" alt="Yedda - People.Sharing.Knowledge." src="http://yedda.com/images/OrangeBalloonSmall.gif?gIHoaMvnyAg=" width="30" border="0" /&gt;&lt;/a&gt;&lt;a href="http://yedda.com/questions/9514442018151/#postId1865159865214"&gt;WinAmp 5.32: playlist&lt;/a&gt;&lt;/span&gt; &lt;p&gt;Actually, it's a windows and not WinAmp issue. If you'll do this with Windows Media Player you'll get the same result. I even wrote an application once that had the same behaviour. The reason it happens is that when you start dragging windows consider the file that the mouse cursor is pointing on as the first one in the list. If you will point to the first file in the list you will get the list as it should be but probably (and naturally...) you are pointing to the middle of the list and the files are added not as you wished.&lt;/p&gt;&lt;p&gt;Hope I helped.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Topics:  &lt;a href="http://yedda.com/questions/tags/software/" rel="tag"&gt;software&lt;/a&gt;, &lt;a href="http://yedda.com/questions/tags/media+players/" rel="tag"&gt;media players&lt;/a&gt;, &lt;a href="http://yedda.com/questions/tags/winamp+5.32/" rel="tag"&gt;winamp 5.32&lt;/a&gt;&lt;/p&gt;&lt;p style="FONT-SIZE: smaller"&gt;Answered by &lt;a href="http://yedda.com/people/8627545571216/"&gt;dudushmaya&lt;/a&gt; on December 11, 2006&lt;/p&gt;&lt;p&gt;View the &lt;a href="http://yedda.com/questions/9514442018151/#postId1865159865214"&gt;entire discussion&lt;/a&gt; on Yedda&lt;a href="http://yedda.com/"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; VERTICAL-ALIGN: middle; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="13" alt="Yedda - People.Sharing.Knowledge." src="http://yedda.com/images/OrangeBalloonSmall.gif?gIHoaMvnyAg=" width="15" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-1739350603220036836?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/1739350603220036836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=1739350603220036836&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1739350603220036836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1739350603220036836'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/12/drag-and-drop-files-order.html' title='Drag and Drop Files Order'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-1308847504931995186</id><published>2006-12-11T20:10:00.000+02:00</published><updated>2006-12-12T13:55:40.266+02:00</updated><title type='text'>Microsoft Team System Event in Israel</title><content type='html'>I'm going to speak this &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Wednesday&lt;/span&gt; at the &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032319017&amp;amp;culture=he-IL"&gt;Annual Microsoft Team System Event in Israel&lt;/a&gt;. I will talk about how we see Team System in our organization and present some of the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;enhancements&lt;/span&gt; we did.&lt;br /&gt;Team System Rocks!!! Spread the word...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-1308847504931995186?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/1308847504931995186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=1308847504931995186&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1308847504931995186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/1308847504931995186'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/12/microsoft-team-system-event-in-israel.html' title='Microsoft Team System Event in Israel'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-8288280232771269164</id><published>2006-12-06T13:51:00.000+02:00</published><updated>2006-12-06T13:57:34.997+02:00</updated><title type='text'>Custom Build Logger (ILogger)</title><content type='html'>&lt;p&gt;Developers were complaining that the build log (Build.log) is too complicated to read and they only want so see the log when the build fails and why.&lt;/p&gt;&lt;p&gt;The first thing I though doing was to write a log reader. Wrong!!! I googled "team build logger" and found this page: &lt;a href="http://blogs.msdn.com/gautamg/archive/2006/04/19/578967.aspx"&gt;http://blogs.msdn.com/gautamg/archive/2006/04/19/578967.aspx&lt;/a&gt; which explains how to write a custom build logger (by implementing ILogger interface). I was already familiar with this interface and used it once while writing an MSBuild script executer. The important stuff from this blog was that you can register a custom logger for a team build by adding a line to the TFSBuild.rsp for the build type (/Logger:LoggerClassFullName, AssemblyFileName ).&lt;/p&gt;&lt;p&gt;So, I've implemented a new logger which captures build errors and send them at the end of the build to developers. The thing is that failed tests are treated as warning and do not fail the build (The log view in Visual Studio captures the warnings and mark the build as failed). The worse thing is that there is not logging regarding the failed tests. So we are back where we've started with a log that only says that the tests failed. The next step to try and solve this issue was finding the trx files and parsing them for the test results. In the code below you can see how I did it. Ignore the whole code just look at the SelectNodes and SelectSingleNode lines which retrieve the errors from the trx file. You can download the sources from &lt;a href="http://www.epocalipse.com/dudu/ErrorsMailLogger.zip"&gt;here&lt;/a&gt;. Thank you &lt;a href="http://www.epocalipse.com/blog/"&gt;Eyal&lt;/a&gt; for the free hosting... To make it work you need to update the config file with your settings and add the line: /Logger:BuildLoggers.ErrorsMailLogger, BuildLoggers.dll to the TFSBuild.rsp file.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#3366ff;"&gt;XmlNodeList xmlNodeList = testResultsXmlDoc.SelectNodes("//UnitTestResult[errorInfo]");&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#3366ff;"&gt;xmlNode.SelectSingleNode("testName").InnerText&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#3366ff;"&gt;xmlNode.SelectSingleNode("errorInfo").SelectSingleNode("message").InnerText         &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#3366ff;"&gt;xmlNode.SelectSingleNode("errorInfo").SelectSingleNode("stackTrace").InnerText&lt;/span&gt;&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/16754876-8288280232771269164?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/8288280232771269164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=8288280232771269164&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8288280232771269164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8288280232771269164'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/12/custom-build-logger-ilogger.html' title='Custom Build Logger (ILogger)'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-8941521097778742408</id><published>2006-12-06T11:51:00.000+02:00</published><updated>2006-12-06T11:52:03.825+02:00</updated><title type='text'>Clarizen Secures $7 Million in First-Round Funding Co-Led by Benchmark Capital and Carmel Ventures</title><content type='html'>We had a nice press release yesterday. You can read it here: &lt;a title="http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=" story="/www/story/12-04-2006/0004484503&amp;amp;EDATE=" href="http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=104&amp;STORY=/www/story/12-04-2006/0004484503&amp;amp;EDATE"&gt;http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=104&amp;STORY=/www/story/12-04-2006/0004484503&amp;amp;EDATE=&lt;/a&gt;.&lt;br /&gt;Some other article regarding &lt;a href="http://www.clarizen.com/"&gt;Clarizen&lt;/a&gt;:&lt;br /&gt;&lt;a title="http://www.themarker.com/tmc/article.jhtml?ElementId=" strtosearch="%F7%EC%F8%E9%E6%EF" href="http://www.themarker.com/tmc/article.jhtml?ElementId=gg20061204_989865&amp;amp;strToSearch=%F7%EC%F8%E9%E6%EF"&gt;http://www.themarker.com/tmc/article.jhtml?ElementId=gg20061204_989865&amp;strToSearch=%F7%EC%F8%E9%E6%EF&lt;/a&gt; - Hebrew&lt;br /&gt;&lt;a title="http://www.degardener.com/2006/12/05/clarizen-is-a-first-in-a-number-of-ways/" href="http://www.degardener.com/2006/12/05/clarizen-is-a-first-in-a-number-of-ways/"&gt;http://www.degardener.com/2006/12/05/clarizen-is-a-first-in-a-number-of-ways/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-8941521097778742408?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/8941521097778742408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=8941521097778742408&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8941521097778742408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/8941521097778742408'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/12/clarizen-secures-7-million-in-first.html' title='Clarizen Secures $7 Million in First-Round Funding Co-Led by Benchmark Capital and Carmel Ventures'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116477962126699081</id><published>2006-11-29T07:53:00.000+02:00</published><updated>2006-11-29T07:54:52.903+02:00</updated><title type='text'>Another Terminals Version</title><content type='html'>&lt;p&gt;Again, we have published a new Terminals version. This time we've added a cool feature called: Desktop Share. With this feature you can define a share (should be to your desktop) on the terminal server. When you drag and drop files to your terminal server window those files will be copied to that share. It's a little trick to support easy file copy to the server. If you would like to enable copy and paste of files between the client and the server you can read: &lt;a href="http://support.microsoft.com/kb/309825"&gt;HOW TO: Securely Copy and Paste Files Between the Terminal Services Client and the Terminal Server in Windows 2000&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/16754876-116477962126699081?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116477962126699081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116477962126699081&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116477962126699081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116477962126699081'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/another-terminals-version.html' title='Another Terminals Version'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116468976728431664</id><published>2006-11-28T06:56:00.000+02:00</published><updated>2006-11-28T06:56:07.303+02:00</updated><title type='text'>XPath Nested Queries</title><content type='html'>&lt;p&gt;Xml XPath queries are not so straight forward and each time I'm using them I struggle it.&lt;/p&gt; &lt;p&gt;On one of our inside tools I needed to parse an Xml file but the selected nodes were reflected from their value and not from their name only. I was used to have a SelectSingleNode(nodeName) or SelectNodes(nodeName) that did the job for me but now I needed something else.&lt;/p&gt; &lt;p&gt;Here's an example of the Xml:&lt;/p&gt; &lt;p&gt;&amp;lt;Data&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Table&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Name" Value="object1"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Type" Value="int"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Value" Value="1"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Name" Value="object2"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Type" Value="int"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Value" Value="2"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Name" Value="object3"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Type" Value="string"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Value" Value="aaa"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Name" Value="object4"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Type" Value="string"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Value" Value="bbb"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Name" Value="object5"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Type" Value="int"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name="Value" Value="3"/&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Row&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Table&amp;gt;&lt;br&gt;&amp;lt;/Data&amp;gt;&lt;/p&gt; &lt;p&gt;Now, I would like to select all &amp;lt;Field&amp;gt; nodes that are from type int. So I need to write query that will find all &amp;lt;Field&amp;gt; nodes that have "Name" attribute with the value "Type" and "Value" attribute with the value "int".&lt;/p&gt; &lt;p&gt;Here's how the query should look when you are using &lt;strong&gt;XmlDocument.SelectNodes&lt;/strong&gt; or &lt;strong&gt;XmlDocument.SelectSingleNode&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;"//Field[@Name='Type'][@Value='int']"&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Now, how do I select all the &amp;lt;Row&amp;gt; nodes that correspond to this query? I've tried and found out that a nested query actually works...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;"//Row[Field[@Name='Type'][@Value='int']]"&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Xml XPath queried can be very powerful.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-116468976728431664?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116468976728431664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116468976728431664&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116468976728431664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116468976728431664'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/xpath-nested-queries.html' title='XPath Nested Queries'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116468759042423522</id><published>2006-11-28T06:19:00.000+02:00</published><updated>2006-11-28T06:19:50.430+02:00</updated><title type='text'>Terminals New Version</title><content type='html'>&lt;p&gt;I have posted before about this tool and now it has a new version.&lt;/p&gt; &lt;p&gt;We fixed some bugs and added these features:&lt;br&gt;1) Order toolbar buttons&lt;br&gt;2) Remote server port selection&lt;br&gt;3) Remote sounds&lt;br&gt;4) Connect automatically to local devices (Disk drives, printers, serial ports)&lt;/p&gt; &lt;p&gt;You can download it here: &lt;a title="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=Terminals" href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=Terminals"&gt;http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=Terminals&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/16754876-116468759042423522?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116468759042423522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116468759042423522&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116468759042423522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116468759042423522'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/terminals-new-version.html' title='Terminals New Version'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116331970924954942</id><published>2006-11-12T10:21:00.000+02:00</published><updated>2006-11-12T10:21:49.316+02:00</updated><title type='text'>How to Get a List of Build Statuses</title><content type='html'>&lt;p&gt;I have a TFS build installer utility&amp;nbsp;that uses the BuildStore interface to get list of available fields to install.&amp;nbsp;I wanted to filter the list with the build status field but did not find a function that returns the list so using Reflector I found out the the statuses are inside a class named BuildStatus. This class contains a list of public, static, string properties that each one of them represents a build status. The real string value of the build status property is stored in a resource named BuildTypeResource.&lt;/p&gt; &lt;p&gt;So in order to get the list of build statuses I wrote this method:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;public static string[] GetBuildStatuses()&lt;br&gt;{&lt;br&gt;Type t = typeof(Microsoft.TeamFoundation.Build.Common.BuildConstants.BuildStatus);&lt;br&gt;ArrayList constants = new ArrayList();&lt;br&gt;PropertyInfo[] propertyInfos = t.GetProperties(BindingFlags.Public | BindingFlags.Static |&lt;br&gt;BindingFlags.FlattenHierarchy);&lt;br&gt;List&amp;lt;string&amp;gt; buildStatuses = new List&amp;lt;string&amp;gt;();&lt;br&gt;foreach (PropertyInfo propertyInfo in propertyInfos)&lt;br&gt;{&lt;br&gt;if (propertyInfo.PropertyType == typeof(string))&lt;br&gt;{&lt;br&gt;buildStatuses.Add(propertyInfo.GetValue(null, new object[] { }).ToString());&lt;br&gt;}&lt;br&gt;}&lt;br&gt;return buildStatuses.ToArray();&lt;br&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The method uses reflection in order to go through all the properties of the class and retrive their values. The result list will return:&lt;/p&gt; &lt;p&gt;"Build Initializing", "Getting Sources", "Sync Completed", "Compilation Started", "Compilation Completed", "Testing Started", "Testing Completed", "Successfully Completed", "Failed", "Stopped".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-116331970924954942?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116331970924954942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116331970924954942&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116331970924954942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116331970924954942'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/how-to-get-list-of-build-statuses.html' title='How to Get a List of Build Statuses'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116305681997616794</id><published>2006-11-09T09:20:00.000+02:00</published><updated>2006-11-09T09:21:48.546+02:00</updated><title type='text'>www.clarizen.com</title><content type='html'>&lt;p&gt;I'm working in a company that develops on demand project management application. You can take a look at our web site: &lt;a href="http://www.clarizen.com"&gt;www.clarizen.com&lt;/a&gt; and register to the beta which will be released at Q1 2007.&lt;/p&gt; &lt;p&gt;You can read some interesting stuff from our CEO&amp;nbsp;regarding &lt;a href="http://www.clarizen.com"&gt;Clarizen&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_Service"&gt;SaaS&lt;/a&gt;&amp;nbsp;and project management here: &lt;a title="http://www.clarizen.com/ceo.html" href="http://www.clarizen.com/ceo.html"&gt;http://www.clarizen.com/ceo.html&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Of course our development platform for this&amp;nbsp;project is Microsoft Visual Studio Team System. I look forward to integrate both systems (Clarizen and Team System) to have a complete development process.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-116305681997616794?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116305681997616794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116305681997616794&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116305681997616794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116305681997616794'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/wwwclarizencom.html' title='www.clarizen.com'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116289177205321417</id><published>2006-11-07T11:29:00.000+02:00</published><updated>2006-11-08T21:15:13.643+02:00</updated><title type='text'>How to Get Build Types List</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;There's no method in TFS API that retrieves a list of build types for a project. I looked inside the BuildStore interface and found nothing. Later I saw somewhere that it is not exposed so I wrote my own implementation using source control API. I'm retrieving a list of folders under the TeamBuildTypes folder. &lt;blockquote&gt; &lt;p&gt;using Microsoft.TeamFoundation.Client;&lt;br&gt;using Microsoft.TeamFoundation.VersionControl.Client;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;public string[] GetBuildTypes(string serverName, string teamProject)&lt;br&gt;{&lt;br&gt;TeamFoundationServer tfs = new TeamFoundationServer(serverName, CredentialCache.DefaultCredentials);&lt;br&gt;tfs.EnsureAuthenticated();&lt;br&gt;VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));&lt;br&gt;ItemSet itemSet = vcs.GetItems("$/" + teamProject + "/TeamBuildTypes", VersionSpec.Latest, RecursionType.OneLevel, DeletedState.NonDeleted, ItemType.Folder);&lt;br&gt;List&amp;lt;string&amp;gt; buildTypes = new List&amp;lt;string&amp;gt;();&lt;br&gt;foreach (Item item in itemSet.Items)&lt;br&gt;{&lt;br&gt;string buildType = Path.GetFileName(item.ServerItem);&lt;br&gt;if (buildType != "TeamBuildTypes")&lt;br&gt;{&lt;br&gt;buildTypes.Add(buildType);&lt;br&gt;}&lt;br&gt;}&lt;br&gt;return buildTypes.ToArray();&lt;br&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-116289177205321417?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116289177205321417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116289177205321417&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116289177205321417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116289177205321417'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/how-to-get-build-types-list.html' title='How to Get Build Types List'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116288834830248643</id><published>2006-11-07T10:22:00.000+02:00</published><updated>2006-11-07T11:04:17.156+02:00</updated><title type='text'>Deploymnet Items Not Copied During Build</title><content type='html'>We had a problem when we've integrated the tests into the build process.&lt;br /&gt;In the &lt;strong&gt;TestRunConfig&lt;/strong&gt; file (.testrunconfig) you can configure deployment items to be copied into the test run directory. The thing is that Visual Studio stores the path with ending backslash and because of annoying bug the deployment items are not copied during the TFS build. This does not happen while working inside Visual Studio environment.&lt;br /&gt;The solution was to open the file in a text editor and remove the ending backslash from all the deployment items. We also removed write permissions from this file so nobody will recreate the problematic paths in the file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-116288834830248643?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116288834830248643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116288834830248643&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116288834830248643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116288834830248643'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/deploymnet-items-not-copied-during.html' title='Deploymnet Items Not Copied During Build'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116281402653340060</id><published>2006-11-06T13:45:00.000+02:00</published><updated>2007-09-17T11:58:00.550+02:00</updated><title type='text'>Build's Relevant Associated Changesets using LabelQueryScope</title><content type='html'>We're working with 2 branches and performing builds on each one of them. Today we've noticed that in the &lt;strong&gt;"Associated &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;changests&lt;/span&gt;"&lt;/strong&gt; list we see &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;changsets&lt;/span&gt; from both branches. A little investigation of the &lt;strong&gt;"Microsoft.TeamFoundation.Build.targets"&lt;/strong&gt; file we found that you can override a property named &lt;strong&gt;"&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;LabelQueryScope&lt;/span&gt;"&lt;/strong&gt; to make the build process only &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;changesets&lt;/span&gt; from a specific branch. So in this case if you have a project with 2 sub branches than you need to set the &lt;strong&gt;"&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;LabelQueryScope&lt;/span&gt;"&lt;/strong&gt; property with &lt;strong&gt;"@$/$(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;TeamProject&lt;/span&gt;)/&lt;em&gt;Branch&lt;/em&gt;"&lt;/strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;br /&gt;By changing this property you also change the labeled branch of the build.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-116281402653340060?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116281402653340060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116281402653340060&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116281402653340060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116281402653340060'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/builds-releavant-associated-changesets.html' title='Build&apos;s Relevant Associated Changesets using LabelQueryScope'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-116276168995308392</id><published>2006-11-05T23:10:00.000+02:00</published><updated>2006-11-07T11:02:08.556+02:00</updated><title type='text'>Terminals</title><content type='html'>I know I haven't written for a while. I'm still trying to get used to the idea of blogging.&lt;br /&gt;I've created a new project in &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt; named &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=Terminals"&gt;Terminals&lt;/a&gt;. If you use Remote Desktop Connection to connect to terminal servers/desktops then you would probably like this tool. It's a multi tab remote desktop connection IDE with lots of cool features written, of course, in C#. My partner to this project is &lt;a href="http://www.epocalipse.com/blog"&gt;Eyal Post&lt;/a&gt; one of the greatest toolsmiths mankind has known who has provided us &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=VssConverterGui"&gt;VSSConverter GUI&lt;/a&gt;. BTW, &lt;a href="http://www.codeplex.com"&gt;CodePlex &lt;/a&gt;is a great place to find and join TFS related projects. The cool part is that you actually use TFS to store your projects source files and work items.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-116276168995308392?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/116276168995308392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=116276168995308392&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116276168995308392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/116276168995308392'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/11/terminals.html' title='Terminals'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-115631087715248622</id><published>2006-08-23T08:10:00.000+03:00</published><updated>2006-11-07T11:01:30.450+02:00</updated><title type='text'>Cube Processing Runtime Error</title><content type='html'>I has some bad days with TFS.&lt;br /&gt;After 2 weeks of work on the new server I found that the reports are not generated and you can see only old reports.&lt;br /&gt;I regenerated the warehouse (setupwarehouse.exe)  and running the adapters stopped working.&lt;br /&gt;I read the: &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=154526&amp;SiteID=1"&gt;Warehouse Troubleshooting Guide&lt;/a&gt; but had no success. After going deeper I found that the problem was in the SQL Server Analysis trying to process the TfsWarehouse database. The errors I found in the event viewer and while manualy running it were:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3366ff;"&gt;Cube processing runtime error: \r\nMicrosoft.AnalysisServices.OperationException: The member '[8/22/2006]' was not found in the cube when the string, [Date].[Date].[Date].[8/22/2006], was parsed.&lt;br /&gt;The END SCOPE statement does not match the opening SCOPE statement.&lt;br /&gt;MdxScript(Team System) (66, 1) The END SCOPE statement does not match the opening SCOPE statement.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3366ff;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;I read on another blog about a problem while moving from one server to another and installing SQL Server with a different collation (&lt;a href="http://scottdotnet.blogspot.com/"&gt;Scotty.Net&lt;/a&gt;). His post gave me a good direction but I got into some problems while trying to change the collation. Anyway, I found myself reinstalling the Team Foundation server and with no solution for the problem.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The big advance came when I searched for: &lt;span style="color:#3366ff;"&gt;&lt;strong&gt;"The END SCOPE statement does not match the opening SCOPE statement"&lt;/strong&gt;&lt;span style="color:#000000;"&gt;. I found an MSDN forum post with the same problem I had (&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=550484&amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=550484&amp;amp;SiteID=1&lt;/a&gt;). I understood that the problem was with a table named: dbo.Today under the TfsWarehouse database. It's a single row table which contains dates that are used while running the adapters. Anyway, I've checked the differences of the values with the old server database and found that the values are related to the regional settings of the machine. I've changed them manually and the process finshed successfuly. After a while the row was regenerated and the problem occured again.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The solution to this problem was to change the regional settings of the tfsservice user to the one in the previous installation. I logged in to the server with that user and changed it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-115631087715248622?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/115631087715248622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=115631087715248622&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115631087715248622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115631087715248622'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/08/cube-processing-runtime-error.html' title='Cube Processing Runtime Error'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-115510551683388900</id><published>2006-08-09T09:28:00.000+03:00</published><updated>2006-11-07T11:00:56.983+02:00</updated><title type='text'>"The path xxx is already mapped in workspace xxx."</title><content type='html'>I was struggling with a problem I had when using TFS API I tried to map a file using:&lt;br /&gt;&lt;strong&gt;public void Map(string serverPath, string localPath);&lt;/strong&gt;&lt;br /&gt;I was getting an exception telling me that the file was already mapped in another workspace:&lt;br /&gt;&lt;strong&gt;"The path {File Path} is already mapped in workspace {Workspace Name}."&lt;br /&gt;&lt;/strong&gt;This workspace was deleted beofre.&lt;br /&gt;With the help of friend of mine I found out that TFS save workspace info under the user local settings dir. We found a file named: &lt;strong&gt;VersionControl.config&lt;/strong&gt; under &lt;strong&gt;{User Documents and Settings dir}\Local Settings\Application Data\Microsoft\Team Foundation\1.0\Cache&lt;/strong&gt;.&lt;br /&gt;This file contains all the local mapping of TFS. Probably when you use the Map method and don't use:&lt;br /&gt;&lt;strong&gt;public void DeleteMapping(WorkingFolder mapping);&lt;/strong&gt; before deleting the workspace the mapping information is not removed from this file which is used by TFS to check if you've alreay mapped a specific path.&lt;br /&gt;To resolve this problem delete all the &lt;workspaceinfo&gt;keys from the config file. Don't delete the file because you'll get it again from the server cache. &lt;/workspaceinfo&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-115510551683388900?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/115510551683388900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=115510551683388900&amp;isPopup=true' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115510551683388900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115510551683388900'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/08/path-xxx-is-already-mapped-in.html' title='&quot;The path xxx is already mapped in workspace xxx.&quot;'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-115425011875902867</id><published>2006-07-30T11:41:00.000+03:00</published><updated>2006-11-07T10:59:43.403+02:00</updated><title type='text'>Moving TFS To Another Server</title><content type='html'>This weekend I have moved the Team Foundation server to another server. I used &lt;a href="http://msdn2.microsoft.com/en-us/library/ms404869.aspx"&gt;How to: Move Your Team Foundation Server from One Hardware Configuration to Another&lt;/a&gt; document to do this.&lt;br /&gt;One problem I had that the referenced document: &lt;a href="http://msdn2.microsoft.com/en-us/library/ms404869.aspx"&gt;How to: Restore Team Foundation Server Data to a Different Server&lt;/a&gt; is a little confusing since it is not taking into consideration the possibility that you are moving a single server deployment and you have already done some stuff. I found that some of the things I've done in the main document are repeating in this document.&lt;br /&gt;At the bottom line if you follow the guide it works and smoothly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-115425011875902867?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/115425011875902867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=115425011875902867&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115425011875902867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115425011875902867'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/07/moving-tfs-to-another-server.html' title='Moving TFS To Another Server'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-115219259473074415</id><published>2006-07-06T16:13:00.000+03:00</published><updated>2006-11-07T10:58:24.493+02:00</updated><title type='text'>TFS API</title><content type='html'>Team Foundation API is wide open and straight forward you can do everything you do through the Team Explorer and command line using the API. I'll post some examples using this API using Visual Studio 2005 and C#.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Creating a Team Foundation server&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;You should add reference to: &lt;strong&gt;Microsoft.TeamFoundation.Client.dll&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Team Foundation assemblies are located under: C:\Program Files\Microsoft Visual Studio 8\common\IDE\PrivateAssemblies.&lt;br /&gt;&lt;br /&gt;On the using clause add:&lt;br /&gt;&lt;span style="color:#000099;"&gt;using&lt;/span&gt; Microsoft.TeamFoundation.Client;&lt;br /&gt;&lt;span style="color:#339999;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#33cc00;"&gt;&lt;span style="color:#009900;"&gt;// Create the server object and connect to the server. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#33cc00;"&gt;&lt;span style="color:#339999;"&gt;TeamFoundationServer&lt;/span&gt; &lt;span style="color:#000000;"&gt;teamServer =&lt;/span&gt; &lt;span style="color:#339999;"&gt;TeamFoundationServerFactory&lt;/span&gt;.&lt;span style="color:#000000;"&gt;GetServer(serverName);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;// Check the connection&lt;br /&gt;&lt;/span&gt;teamServer.EnsureAuthenticated();&lt;br /&gt;&lt;br /&gt;Now you have a Team Foundation Server object to work with. Check out the TeamFoundationServer class using Reflector or ObjectExplorer to see other members of the class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-115219259473074415?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/115219259473074415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=115219259473074415&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115219259473074415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115219259473074415'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/07/tfs-api.html' title='TFS API'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-115219139608222835</id><published>2006-07-06T15:57:00.000+03:00</published><updated>2006-11-07T10:57:58.120+02:00</updated><title type='text'>TFS Source Control Strategy</title><content type='html'>&lt;p&gt;I'm considering which startegy to use with Team Foundation source control.&lt;br /&gt;I'm thinking of:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;One main branch for the next release. Most of the work is done on this branch.&lt;/li&gt;&lt;li&gt;One bug fixing branch for a released version. This branch lives until a new version is released.&lt;/li&gt;&lt;li&gt;Temporary branch for changes needed to be enter to the next version prior to the current version release.&lt;/li&gt;&lt;li&gt;Branches for feature development that cannot be implemented in one release&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;Should look like this:&lt;br /&gt;$/{Project}&lt;/p&gt;&lt;ul&gt;&lt;li&gt;main (v2.0 development prior to a release)&lt;/li&gt;&lt;li&gt;v1.1 (v1 bug fixes)&lt;/li&gt;&lt;li&gt;v3.0 (temporary branch until v2 is released)&lt;/li&gt;&lt;li&gt;FeatureBranch (for big developemnt effort that cannot be implemented for the next release)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Developers work on the main branch most of the time&lt;/li&gt;&lt;li&gt;If they have a fix for a released version then they need to merge it to the next versions too&lt;/li&gt;&lt;li&gt;When a temporary branch is opened the main branch should be merged to it often&lt;/li&gt;&lt;li&gt;When a feature is decided to be released it should be merged from the feature branch to the main branch&lt;/li&gt;&lt;li&gt;The main branch should be merged to the feature branch one a week&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-115219139608222835?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/115219139608222835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=115219139608222835&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115219139608222835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115219139608222835'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/07/tfs-source-control-strategy.html' title='TFS Source Control Strategy'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-115218747218527986</id><published>2006-07-06T14:50:00.000+03:00</published><updated>2006-11-07T10:56:44.180+02:00</updated><title type='text'>TFS Installation Guide</title><content type='html'>The installation guide is great! I have never seen such documented step by step guide. If you follow the guide you will have a successful installation of the server.&lt;br /&gt;The most current version of the guide is available from Microsoft:&lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=40042"&gt;http://go.microsoft.com/fwlink/?LinkId=40042&lt;/a&gt;&lt;br /&gt;Since we have small number of users I have installed the single server version of Team Foundation Server. You can get help on deciding how to deploy Team Foundation Server here: &lt;a href="http://msdn.microsoft.com/vstudio/teamsystem/team/quickstarts/tfs_plan/"&gt;http://msdn.microsoft.com/vstudio/teamsystem/team/quickstarts/tfs_plan/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-115218747218527986?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/115218747218527986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=115218747218527986&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115218747218527986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115218747218527986'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/07/tfs-installation-guide.html' title='TFS Installation Guide'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16754876.post-115218660403330885</id><published>2006-07-06T14:46:00.000+03:00</published><updated>2006-11-07T10:57:05.933+02:00</updated><title type='text'>TFS Implementation</title><content type='html'>I've started an implementation of Team Foundation Server in my organization. I will try to document the process and maybe post some good stuff for others that are trying to implement Team Foundation Server too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16754876-115218660403330885?l=notsosmartbuilder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://notsosmartbuilder.blogspot.com/feeds/115218660403330885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16754876&amp;postID=115218660403330885&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115218660403330885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16754876/posts/default/115218660403330885'/><link rel='alternate' type='text/html' href='http://notsosmartbuilder.blogspot.com/2006/07/tfs-implementation.html' title='TFS Implementation'/><author><name>Dudu Shmaya</name><uri>http://www.blogger.com/profile/17205013318951347855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
