<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>tfs2008 &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/tfs2008/</link>
	<description>Feed of posts on WordPress.com tagged "tfs2008"</description>
	<pubDate>Tue, 08 Dec 2009 18:37:10 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Deleted Team Projects still visible in Source Control Explorer]]></title>
<link>http://intovsts.net/2009/11/25/deleted-team-projects-still-visible-in-source-control-explorer/</link>
<pubDate>Wed, 25 Nov 2009 20:42:49 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/11/25/deleted-team-projects-still-visible-in-source-control-explorer/</guid>
<description><![CDATA[Today I bumped into a solution for deleting deleted Team Projects (yip, that&#8217;s right: deleting]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Today I bumped into a solution for deleting <i>deleted</i> Team Projects (yip, that&#8217;s right: deleting Team Projects that should have been already deleted). A while ago we noticed that Team Projects in TFS2008 SP1 that were deleted with <a href="http://msdn.microsoft.com/en-us/library/ms181482(VS.80).aspx" target="_blank">TFSDeleteProject.exe</a> were still visible in the Source Control Explorer and re-running <a href="http://msdn.microsoft.com/en-us/library/ms181482(VS.80).aspx" target="_blank">TFSDeleteProject.exe</a> for the same Team Projects resulted in an error message that the Team Project could not be found on the Team Foundation Server.</p>
<p>But due to <a href="http://social.msdn.microsoft.com/forums/en-US/tfssetup/thread/8dc75f1c-d62a-42d1-af61-1c4578835ea5/" target="_blank">this entry in the TFS forum</a> I was finally able to remove the Team Projects from Source Control Explorer as well.</p>
<p>Solution:</p>
<ul>
<li>Create new Team Project with exactly the same name as the Team Project that wasn&#8217;t completely deleted and specify the option to not create the version control folder.</li>
<li>After the Team Project Creation wizard finishes, you need to run <a href="http://msdn.microsoft.com/en-us/library/ms181482(VS.80).aspx" target="_blank">TFSDeleteProject.exe</a> for the newly created Team Project.</li>
</ul>
<p>No sign anymore of the <i>deleted</i> Team Projects in Version Control! Sounds logical?!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[[TFS2008] HowTo: Copiar el resultado completo de un build (assemblies, test results, etc) a una carpeta determinada]]></title>
<link>http://mdelviso.wordpress.com/2009/11/25/tfs2008-howto-copiar-el-resultado-completo-de-un-build-assemblies-test-results-etc-a-una-carpeta-determinada/</link>
<pubDate>Wed, 25 Nov 2009 15:41:36 +0000</pubDate>
<dc:creator>mdelviso</dc:creator>
<guid>http://mdelviso.wordpress.com/2009/11/25/tfs2008-howto-copiar-el-resultado-completo-de-un-build-assemblies-test-results-etc-a-una-carpeta-determinada/</guid>
<description><![CDATA[1. Para copiar el directorio completo utilizaremos una bibilioteca de tareas para TFS Build: SDC Tas]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>1. Para copiar el directorio completo utilizaremos una bibilioteca de tareas para <a href="http://msdn.microsoft.com/en-us/teamsystem/dd408382.aspx" target="_blank">TFS</a> Build: <a href="http://sdctasks.codeplex.com/" target="_blank"><strong><em>SDC Tasks</em></strong></a>, ya que la tarea <strong><em>Copy</em></strong> que posee <strong><em>MSBuild</em></strong> no es lo suficientemente potente para este escenario.</p>
<p>2. SDC Tasks se puede descargar desde <a title="http://sdctasks.codeplex.com/" href="http://sdctasks.codeplex.com/">http://sdctasks.codeplex.com/</a> y luego debemos copiar el contenido de la release al directorio de <strong><em>MSBuild</em></strong> [<strong><em>C:\Program Files\MSBuild</em></strong>].</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/image_5F00_186E4B9D.png"><img title="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/image_5F00_thumb_5F00_1F2D66EE.png" border="0" alt="image" width="244" height="164" /></a></p>
<p>3. Editamos una definición de build, en este caso llamado [<strong><em>Hola Mundo Build</em></strong>]. <em>Nota: Podemos utilizar </em><a href="http://geeks.ms/blogs/elbruno/archive/2008/06/25/tfs-editando-builds-de-forma-sencilla.aspx" target="_blank"><strong><em>este post</em></strong></a><em> como ejemplo para editar un build.</em></p>
<p>4. En la cabecera importamos el archivo que nos permite utilizar las SDC desde la definición del Build, en este caso la línea 5.</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet"><span style="color:#0000ff;">1: &#60;Project DefaultTargets=&#8221;DesktopBuild&#8221; xmlns=&#8221;http://schemas.microsoft.com/developer/msbuild/2003&#8243; ToolsVersion=&#8221;3.5&#8243;&#62;<br />
2:   &#60;!&#8211; Do not edit this &#8211;&#62;<br />
3:   &#60;Import Project=&#8221;$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets&#8221; /&#62;<br />
4:   &#60;Import Project=&#8221;$(MSBuildBinPath)\Microsoft.Common.targets&#8221; /&#62;<br />
5:   &#60;Import Project=&#8221;$(MSBuildExtensionsPath)\Microsoft.Sdc.Common.tasks&#8221; /&#62;<br />
6:   ..<br />
7: &#60;/Project&#62; </span></div>
</div>
<p>5. Agregamos un nuevo Target, en este caso el que se ejecuta después de copiar los archivos de la compilación; y dentro del mismo utilizamos la tarea Fodler.Copy (línea 13) para copiar el resultado de los tests de una build al directorio FTP, utilizando además el número de la build para identificar los resultados.</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet"><span style="color:#0000ff;">1: &#60;Target Name=&#8221;AfterDropBuild&#8221;&#62;<br />
2:<br />
3:   &#60;BuildStep TeamFoundationServerUrl=&#8221;$(TeamFoundationServerUrl)&#8221;<br />
4:              BuildUri=&#8221;$(BuildUri)&#8221; Name=&#8221;CopyFilesToFtp&#8221;<br />
5:              Message=&#8221;Start copy files to FTP Location from $(DropLocation)\$(BuildNumber)\TestResults&#8221;&#62;<br />
6:     &#60;Output TaskParameter=&#8221;Id&#8221; PropertyName=&#8221;CopyFilesToFtpId&#8221; /&#62;<br />
7:   &#60;/BuildStep&#62;<br />
8:<br />
9:   &#60;CreateItem Include=&#8221;$(DropLocation)\$(BuildNumber)\TestResults&#8221; &#62;<br />
10:     &#60;Output ItemName=&#8221;FolderToCopy&#8221; TaskParameter=&#8221;Include&#8221; /&#62;<br />
11:   &#60;/CreateItem&#62;<br />
12:<br />
13:   &#60;Folder.CopyFolder Source=&#8221;@(FolderToCopy)&#8221; Destination=&#8221;C:\FTP\$(BuildNumber)&#8221; /&#62;<br />
14:<br />
15:   &#60;BuildStep TeamFoundationServerUrl=&#8221;$(TeamFoundationServerUrl)&#8221;<br />
16:              BuildUri=&#8221;$(BuildUri)&#8221; Name=&#8221;EndCopyFiles&#8221; Id=&#8221;$(CopyFilesToFtpId)&#8221;<br />
17:              Message=&#8221;End copy files to FTP location from $(DropLocation)\$(BuildNumber)\TestResults&#8221; </span><span style="color:#0000ff;"> 18:              Status=&#8221;Succeeded&#8221; /&#62;<br />
19:<br />
20: &#60;/Target&#62; </span>
<p>&#160;</p>
</div>
</div>
<p>6. Para mostrar los pasos de ejecución del build, utilizamos BuildSteps (<em>ver líneas 3 y 15; para referencia ver </em><a href="http://geeks.ms/blogs/elbruno/archive/2008/07/10/msbuild-howto-agregar-pasos-a-la-ventana-de-compilacion-un-poco-mas-completo.aspx" target="_blank"><strong><em>este post</em></strong></a>). De esta forma, cuando se ejecuta un build, podemos ver lo siguiente.</p>
<p style="text-align:center;"><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/image_5F00_04047213.png"><img class="aligncenter" title="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/image_5F00_thumb_5F00_684FC04F.png" border="0" alt="image" width="551" height="340" /></a></p>
<p>7. De esta forma, cada vez que se ejecute un build y se generen resultados de tests, los mismos se copiarán a la carpeta <strong><em>C:\FTP</em></strong>.</p>
<p><a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/image_5F00_6918006C.png"><img title="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/elbruno/image_5F00_thumb_5F00_781EB979.png" border="0" alt="image" width="620" height="346" /></a></p>
<h4><a href="http://geeks.ms/blogs/elbruno/archive/2009/09/12/tfs2008-howto-copiar-el-resultado-completo-de-un-build-assemblies-test-results-etc-a-una-carpeta-determinada.aspx#155748">#</a> re: [TFS2008] HowTo: Copiar el resultado completo de un build (assemblies, test results, etc) a una carpeta determinada</h4>
<div>Saturday, September 12, 2009 3:11 PM 			                by <a title="Paulo" rel="nofollow" href="http://www.focuswhere.com/">Paulo</a></div>
<p>También es posible usar de forma mas directa la herramienta robocopy, viene por defecto en W2008 Server (creo que tb en 2003).</p>
<p>Robocopy mucho  mas robusta en la copia, por ejemplo cuando es una unidad de red que pueda estar no siempre compartida, y se quiere reintentar 4 veces la copia, esperando 2 segundos, excluyendo las subcarpetas que se llamen bin se puede usar el siguiente comando</p>
<p><span style="color:#0000ff;">&#60;Target Name=&#8221;PackageBinaries&#8221;&#62;</span></p>
<p><span style="color:#0000ff;">&#60;Exec Command=&#8221;Robocopy.exe $(BinariesRoot)\Release\_PublishedWebsites\carpetaOrigen \\Servidor2\CarpetaDestino /MIR /R:4 /W:2 /TBD /XD bin&#8221; IgnoreExitCode=&#8221;true&#8221; /&#62;</span></p>
<p><span style="color:#0000ff;">&#60;/Target&#62;</span></p>
<p>Se puede usar en evento PackageBinaries, o AfterDropBuild segun las necesidades.</p>
<p>Un saludo y gracias a Bruno. Fuente Oficial:  <a href="http://geeks.ms/blogs/elbruno/archive/2009/09/12/tfs2008-howto-copiar-el-resultado-completo-de-un-build-assemblies-test-results-etc-a-una-carpeta-determinada.aspx">Aquí</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ALM / TFS Books and Documentation]]></title>
<link>http://intovsts.net/2009/11/12/alm-tfs-books-and-documentation/</link>
<pubDate>Thu, 12 Nov 2009 14:27:13 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/11/12/alm-tfs-books-and-documentation/</guid>
<description><![CDATA[This week at TechEd in Berlin, Hans asked for some interesting ALM / TFS books. This is a quick rand]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>This week at TechEd in Berlin, <a href="http://blogs.msdn.com/hans_vb/" target="_blank">Hans</a> asked for some interesting ALM / TFS books. This is a quick random list of the <i>latest</i> books I know about:</p>
<ul>
<li><a href="http://www.amazon.com/Team-Foundation-Server-2008-Action/dp/1933988592" target="_blank">Team foundation Server in Action</a></li>
<li><a href="http://www.amazon.com/Inside-Microsoft%C2%AE-Build-Engine-PRO-Developer/dp/0735626286/ref=pd_bxgy_b_img_b" target="_blank">Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build</a></li>
<li><a href="http://www.amazon.com/Professional-Foundation-Server-Jean-Luc-David/dp/0471919306/ref=pd_bxgy_b_img_c">Professional Team Foundation Server</a></li>
<li><a href="http://www.amazon.com/Software-Engineering-Microsoft-Visual-Studio/dp/0321278720/ref=pd_sim_b_4" target="_blank">Software Engineering with Microsoft Visual Studio Team System</a></li>
<li><a href="http://www.amazon.com/Visual-Studio-Team-System-Development/dp/0321418506/ref=pd_sim_b_2" target="_blank">Visual Studio Team System: Better Software Development for Agile Teams</a></li>
<li><a href="http://www.amazon.com/Managing-Projects-Microsoft-Visual-Pro-Developer/dp/0735622167/ref=pd_sim_b_3" target="_blank">Managing Projects with Microsoft Visual Studio Team System</a></li>
<li><a href="http://www.amazon.com/Visual-Studio-Application-Lifecycle-Management/dp/143021080X/ref=sr_1_4?ie=UTF8&#38;s=books&#38;qid=1258033552&#38;sr=1-4" target="_blank">Pro Visual Studio Team System Application Lifecycle Management</a></li>
<li><a href="http://www.amazon.com/Visual-Studio-System-Database-Professionals/dp/1590599535/ref=sr_1_17?ie=UTF8&#38;s=books&#38;qid=1258033984&#38;sr=1-17" target="_blank">Pro Visual Studio Team System with Team Edition for Database Professionals</a></li>
</ul>
<p>Feel free to add some more books to the list!</p>
<p>Note that there is also a paperback version available of the <i>TFS Guide</i>: <a href="http://www.amazon.com/Development-Visual-Studio-Foundation-Server/dp/0735625719/ref=sr_1_7?ie=UTF8&#38;s=books&#38;qid=1258033552&#38;sr=1-7" target="_blank">Team Development with Visual Studio Team Foundation Server</a>, written by Microsoft Patterns &#38; Practices. The online version can be found at CodePlex: <a href="http://www.codeplex.com/TFSGuide/" target="_blank">TFS Guide</a>.</p>
<p>If you are looking for the online MSDN documentation, point your favorite browser to the <a href="http://msdn.microsoft.com/en-us/library/ms181232.aspx" target="_blank">Team Foundation Server Developer Center</a>.</p>
<p>There will also come some new books on VS2010: <a href="http://www.amazon.com/Professional-Visual-Studio-2010-System/dp/0470484268/ref=sr_1_16?ie=UTF8&#38;s=books&#38;qid=1258033984&#38;sr=1-16" target="_blank">Professional Visual Studio 2010 Team System: with Team Foundation Server 2010</a>, but I think that the name of the book will still change. <a href="http://www.woodwardweb.com/" target="_blank">Martin Woodward</a> also mentioned that he&#8217;s writing on a new Team Build book for VS2010 and I&#8217;m sure that there are others under construction. To be continued!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Feedback VS2010 Beta2?]]></title>
<link>http://intovsts.net/2009/11/06/feedback-vs2010-beta2/</link>
<pubDate>Fri, 06 Nov 2009 21:05:41 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/11/06/feedback-vs2010-beta2/</guid>
<description><![CDATA[So, you are playing around with VS2010/TFS2010 and you have some remarks, suggestions, bugs, &#8230;]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>So, you are playing around with VS2010/TFS2010 and you have some remarks, suggestions, bugs, &#8230; Please go the <a href="http://connect.microsoft.com/" target="_blank">Microsoft Connect site</a> for product feedback and bug reporting.</p>
<p>Today I filed a suggestion for the next release of Team Foundation Server: <a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=508834" target="_blank">Build Definition History</a>. Unfortunately it&#8217;s still not possible to view history of changes made to the Build Defintion: &#8220;Drop Location&#8221;, &#8220;Build Agent&#8221;, &#8220;Trigger&#8221;, &#8230; On the <a href="http://connect.microsoft.com/" target="_blank">Microsoft Connect site</a>, you can easily look up other wanted featured and vote for them &#8230; but first vote for my suggestion!</p>
<p>Since a few weeks, there&#8217;s also a <a href="https://mscuillume.smdisp.net/Collector/Survey.ashx?Name=D10G1" target="_blank">feedback survey</a> running on Microsoft Visual Studio 2010 and the .NET Framework 4 Beta 2. If you care about the product and want your voice heard, please take some minutes to complete this <a href="https://mscuillume.smdisp.net/Collector/Survey.ashx?Name=D10G1" target="_blank">online survey</a>!</p>
<p align="center">
<a href="https://mscuillume.smdisp.net/Collector/Survey.ashx?Name=D10G1" target="_blank"><img src="http://intovsts.wordpress.com/files/2009/11/vs2010feedback.png" border="0" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Local folder already mapped in workspace]]></title>
<link>http://koenwillemse.wordpress.com/2009/10/29/local-folder-already-mapped-in-workspace/</link>
<pubDate>Thu, 29 Oct 2009 09:53:59 +0000</pubDate>
<dc:creator>koenwillemse</dc:creator>
<guid>http://koenwillemse.wordpress.com/2009/10/29/local-folder-already-mapped-in-workspace/</guid>
<description><![CDATA[I&#8217;ve got a small server at home where I also run TFS on for my personal projects and for playi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;ve got a small server at home where I also run TFS on for my personal projects and for playing around with it to try some stuff.</p>
<p>Since TFS 2010 Beta 2 is available I wanted to work with VS2010 and TFS 2010. As I&#8217;m just a geek who wants to play around with it at home, I didn&#8217;t plan how to do this change etc. Because I didn&#8217;t care much about the history in source control, I decided to simply reinstall my server (I was already planning to do this as I wanted to use SQL Server 2008).</p>
<p>All went pretty well when installing and configuring. But then yesterday I wanted to add all the source I had on my local machine to the source control. And then the probleem started.<br />
I got the message stating that I already had a workspace mapping for the local directory. WOOPS&#8230;. And I couldn&#8217;t connect to my old TFS server anymore because I destroyed that completely <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
So I hadn&#8217;t got a clue what to do, because for as far as I know, the workspace mappings were registered at the server, not locally. I already removed the source control bindings from the solution, but that was not enough. Still getting the error.<br />
It took me quite some time to find that the workspace mappings are also cached on your local machine. I finally found the mapping mentioned in the folder <strong>C:\Users\[USER]\AppData\Local\Microsoft\Team Foundation\2.0\Cache\versioncontrol.config</strong>. I deleted it from there and I could finally add my source to source control again.</p>
<p>Lesson learned: Think twice before doing a format on my server and try to do some planning / impact analysis before throwing things away, even when I do it on my &#8216;playing around environment&#8217;.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[MSBuild error “C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(1993,9): error MSB3091: Task failed because "sgen.exe" was not found, or the correct Microsoft Windows SDK is not installed. The task is looking for "sgen.exe" in the "bin" subdirectory beneath the location specified in the InstallationFolder value of the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A. You may be able to solve the problem by doing one of the following:  1) Install the Microsoft Windows SDK for Windows Server 2008 and .NET Framework 3.5.  2) Install Visual Studio 2008.  3) Manually set the above registry key to the correct location.  4) Pass the correct location into the "ToolPath" parameter of the task.”]]></title>
<link>http://bogdanbrinzarea.wordpress.com/2009/08/04/msbuild-error-cwindowsmicrosoft-netframeworkv3-5microsoft-common-targets19939-error-msb3091-task-failed-because-sgen-exe-was-not-found-or-the-correct-microsoft-wind/</link>
<pubDate>Tue, 04 Aug 2009 15:20:38 +0000</pubDate>
<dc:creator>bogdanbrinzarea</dc:creator>
<guid>http://bogdanbrinzarea.wordpress.com/2009/08/04/msbuild-error-cwindowsmicrosoft-netframeworkv3-5microsoft-common-targets19939-error-msb3091-task-failed-because-sgen-exe-was-not-found-or-the-correct-microsoft-wind/</guid>
<description><![CDATA[I fought for a couple of minutes with this error and I thought to share with you my solution. The er]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I fought for a couple of minutes with this error and I thought to share with you my solution.</p>
<p>The error was on my build machine which wasn’t having Windows SDK and I wasn’t planning to install it either.</p>
<p>I was having HKLM\SOFTWARE\Microsoft\Microsoft SDKs\.NETFramework\v2.0 key and the InstallationFolder key with the value C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\ so I thought about adding the key that was normally generated by Windows SDK.</p>
<p>So, I added HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0A key with the InstallationFolder key pointing to the same value as above and copied the missing sgen.exe into the bin\ folder under the above mention location.</p>
<p>I queued a new build a everything worked like a charm.</p>
<p>I hope this helps,   <br />Bogdan</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[TFS2008 build fail because data.coverage is being used]]></title>
<link>http://koenwillemse.wordpress.com/2009/07/14/tfs2008-build-fail-because-data-coverage-is-being-used/</link>
<pubDate>Tue, 14 Jul 2009 07:21:20 +0000</pubDate>
<dc:creator>koenwillemse</dc:creator>
<guid>http://koenwillemse.wordpress.com/2009/07/14/tfs2008-build-fail-because-data-coverage-is-being-used/</guid>
<description><![CDATA[Today we ran into a strange problem. The nightly build had failed when trying to empy the working fo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Today we ran into a strange problem. The nightly build had failed when trying to empy the working folder on the build server with a message like &#8220;cannot remove file &#8216;data.coverage&#8217; because it is being used by another process&#8221;.</p>
<p>Very strange because nothing special was going on on the build server. For some reason the process VSPerfMon.exe had continued running. I killed the process and started the build again. Now the build runs again and didn&#8217;t have the problem anymore.<br />
Strange&#8230; Looks like the test host just crashed or something like that. No idea (yet) why that happend. I&#8217;ll update the post if I find out why this happened.</p>
<p>If you have the same problem, just kill the VSPerfMon process and clean the directory. Probably the build will run again then.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[VSTS/TFS Customer Testimonial - Adam Software]]></title>
<link>http://intovsts.net/2009/06/22/vststfs-customer-testimonial-adam-software/</link>
<pubDate>Mon, 22 Jun 2009 21:28:11 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/06/22/vststfs-customer-testimonial-adam-software/</guid>
<description><![CDATA[&nbsp;About a year ago I performed a VSTS/TFS assignment for Adam Software, a global software vendor]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />About a year ago I performed a VSTS/TFS assignment for <a href="http://www.adamsoftware.net" target="_blank">Adam Software</a>, a global software vendor of marketing platform technologies that provide the ability to manage, structure and deliver media between people, processes and systems. This assignment was really fun to do and the customer was really pleased with the result. A few weeks ago, a Microsoft case study was published to put Visual Studio Team System and Team Foundation Server in the spotlight.<br />
<br />
In case you still wonder : setting up a robust and reliable enterprise software development environment with Team Foundation Server may be a big investment, but it always pays off. Not only financially! Your development team will also be working with the best tools and processes to do their job. In the long run you might even attract or repel developers just because of the type of development environment you provide as an organisation! For those who worked already in a TFS environment with Version Control, Work Item Tracking and Automated Builds &#8230; would you want to go back in time and work with Visual SourceSafe to deliver quality software enterprise applications?<br />
<br />
Still looking for a challenging development job where you are able to use the best tools and processes : <a href="http://www.adamsoftware.net/about/jobs.asp" target="_blank">Adam Software is hiring</a>!<br />
<br />
Read more :</p>
<ul>
<li><a href="http://blogs.adamsoftware.net/Files/2ab301d76c5e4b7e8f1f823cd94a074c.pdf" target="_blank">customer testimonial (pdf &#8211; english)</a> </li>
<li><a href="http://blogs.adamsoftware.net/Announcements/UsingTeamSystematAdamSoftware.aspx" target="_blank">blogpost Michael Vanhoutte</a> (Senior Software Architect Adam Software)l</a> </li>
<li><a href="http://blogs.msdn.com/hans_vb/archive/2009/06/22/belgian-vsts-case-study.aspx" target="_blank">blogpost Hans Verbeeck (Partner Evangelist Microsoft Belgium)</a> </li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Slides of ALM Roadshow]]></title>
<link>http://intovsts.net/2009/05/12/slides-of-alm-roadshow/</link>
<pubDate>Tue, 12 May 2009 19:19:27 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/05/12/slides-of-alm-roadshow/</guid>
<description><![CDATA[&nbsp;As promised to the participants of the ALM Roadshow today in Gent, I&#8217;ve uploaded the sli]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />As promised to the participants of the ALM Roadshow today in Gent, I&#8217;ve uploaded the slides I presented :</p>
<ul>
<li><a href="http://www.sparkles.be/documents/ALMRoadshow/ALMRoadshow_WorkItemManagement.pdf" target="_blank">Planning your team’s work with VSTS</a></li>
<li><a href="http://www.sparkles.be/documents/ALMRoadshow/ALMRoadshow_VersionControl.pdf" target="_blank">Source Control done the right way with TFS</a></li>
<li><a href="http://www.sparkles.be/documents/ALMRoadshow/ALMRoadshow_Test.pdf" target="_blank">Test your code in variouw ways with VSTS</a></li>
</ul>
<p>Note that these presentations target Visual Studio Team System 2008 (current technology) and not yet the new upcoming release of Visual Studio Team System 2010.</p>
<p>I&#8217;ve also uploaded the <a href="http://www.sparkles.be/documents/ALMRoadshow/MicrosoftVSTS2008ProductGuide.pdf" target="_blank">Product Guide for Visual Studio Team System 2008</a>. This may be interesting for example to know which feature belongs to which client edition of Visual Studio Team System. I always get a lot of questions concerning this topic &#8230;</p>
<p>Another general question I got concerning licenses : is it required to have a Client Access License (CAL) to connect to a Team Foundation Server Workgroup Edition? Also taken from the product guide :</p>
<blockquote><p>
Workgroup Edition is provided with Visual Studio Team System 2008 Client Products with MSDN Premium Subscriptions. In addition, CALs are not required for accessing Workgroup Edition.</p></blockquote>
<p>Feel free to contact me would you require further information!</p>
<p><font color="red"><b>Update [June 18, 2009]</b></font><br />
Video screencasts of the sessions have been uploaded on <a href="http://www.microsoft.com/belux/msdn/nl/chopsticks" target="_blank">MSDN Chopsticks</a> :</p>
<ul>
<li><a href="http://www.microsoft.com/belux/msdn/nl/chopsticks/default.aspx?id=1229" target="_blank">Part 1</a></li>
<li><a href="http://www.microsoft.com/belux/msdn/nl/chopsticks/default.aspx?id=1230" target="_blank">Part 2</a></li>
<li><a href="http://www.microsoft.com/belux/msdn/nl/chopsticks/default.aspx?id=1231" target="_blank">Part 3</a></li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Summary 07.05.2009]]></title>
<link>http://bogdanbrinzarea.wordpress.com/2009/05/07/summary/</link>
<pubDate>Thu, 07 May 2009 11:52:48 +0000</pubDate>
<dc:creator>bogdanbrinzarea</dc:creator>
<guid>http://bogdanbrinzarea.wordpress.com/2009/05/07/summary/</guid>
<description><![CDATA[ASP.NET MVC CoNatural continue their series on asynchronous search with ASP.NET MVC and JQuery. Phil]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h4>ASP.NET MVC</h4>
<p>CoNatural continue their series on <a href="http://blogs.conatural.com/2009/05/async-search-with-aspnet-mvc-jquery-conatural-part-ii/">asynchronous search with ASP.NET MVC and JQuery</a>.</p>
<p>Phil has an excellent article about another hidden gem of ASP.NET that allows us to mingle with the page parsing process: <a href="http://haacked.com/archive/2009/05/05/page-view-lockdown.aspx">PageParseFilter</a>.</p>
<p>Scott Allen show <a href="http://odetocode.com/Blogs/scott/archive/2009/05/05/12801.aspx">how to build a custom model binder</a> and what are the different issues the arise in different implementations.</p>
<p>Maarten Balliauw adds to the previous <a href="http://blog.maartenballiauw.be/post/2009/05/06/More-ASPNET-MVC-Best-Practices.aspx" target="_blank">list of best practices</a> his very own.</p>
<p>David Hayden has a nice article about <a href="http://davidhayden.com/blog/dave/archive/2009/05/06/ControllerActionInvokerCreateActionResultImplicitActionResults.aspx" target="_blank">working with custom ControllerActionInvoker and overriding CreateActionResult</a>() in order to return JSON results.</p>
<h4>Visual Studio 2010</h4>
<p>The WebDev Team just published a great article on how we can have <a href="http://blogs.msdn.com/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx">a web.config file for each staging environment based on the new transformation features available in Visual Studio 2010</a>.</p>
<p>Channel 9 has another webcast on <a href="http://channel9.msdn.com/shows/10-4/10-4-Episode-18-Functional-UI-Testing/">functional UI testing</a>.</p>
<h4>CLR</h4>
<p>For a deep dive into <a href="http://blogs.msdn.com/clrteam/archive/2009/04/28/threadabortexception.aspx">ThreadAbortException</a> and how to make it stop using catch clause and Thread.ResetAbort(), go check the CLR Team’s post!</p>
<p>Eric Lippert has another great article that explains that <a href="http://blogs.msdn.com/ericlippert/archive/2009/05/04/the-stack-is-an-implementation-detail-part-two.aspx" target="_blank">value types being stored on the stack is just an optimization detail performed by the CLR</a>.</p>
<h4>C#</h4>
<p>Eric Lippert explains how <a href="http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx" target="_blank">events</a> are raised properly and what are the risks involved with using them inappropriately.</p>
<h4>Architecture</h4>
<p>Vittorio has another great article about <a href="http://blogs.msdn.com/vbertocci/archive/2009/05/05/what-goes-into-claims.aspx">claims and how they work</a>.</p>
<h4>Debugging</h4>
<p>The Microsoft Support Team has a very cool article about <a href="http://blogs.msdn.com/webtopics/archive/2009/05/05/how-to-view-what-asp-net-requests-are-doing-at-runtime-on-iis-6-0.aspx">debugging ASP.NET requests at runtime in IIS 6.0</a>.</p>
<h4>ASP.NET AJAX 4.0</h4>
<p>Bertrand Le Roy has another great tip on how to use JQuery to instantiate Microsoft AJAX components.</p>
<h4>Methodologies</h4>
<p>The SRLTeam has a great post about <a href="http://blogs.microsoft.co.il/blogs/srlteam/archive/2009/05/06/bugs-life-how-to-manage-bugs-part-2.aspx">bug management</a>.</p>
<h4>TDD</h4>
<p>Simon Segal has a great post about <a href="http://www.simonsegal.net/blog/2009/05/06/entity-framework-repository-testing-addendum/">mocking Entity Framework repositories with Moq</a>.</p>
<h4>Team Foundation Server</h4>
<p>If you are looking for customizing different aspects of TFS, keep an eye on this <a href="http://teamfoundation.blogspot.com/">blog</a> as it very useful information. Currently they have a nice series of posts on <a href="http://teamfoundation.blogspot.com/2009/05/work-item-customization-tidbits-limits.html">work item customization</a>.</p>
<h4>Enterprise Library</h4>
<p>Grigori Melnik has some greats news about <a href="http://entlibcontrib.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26680" target="_blank">EntLibContrib</a>: <a href="http://blogs.msdn.com/agile/archive/2009/05/05/entlibcontrib-may-2009-release-and-future-plans.aspx" target="_blank">a new release is available</a> (based on the EL 3.1 core) and the future plans include upgrade to the core of EL 4.1.</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fbogdanbrinzarea.wordpress.com%2f2009%2f05%2f07%2fsummary%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fbogdanbrinzarea.wordpress.com%2f2009%2f05%2f07%2fsummary%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Solution file error MSB5009: Error parsing the nested project section in solution file.]]></title>
<link>http://bogdanbrinzarea.wordpress.com/2009/04/28/solution-file-error-msb5009-error-parsing-the-nested-project-section-in-solution-file/</link>
<pubDate>Tue, 28 Apr 2009 13:45:34 +0000</pubDate>
<dc:creator>bogdanbrinzarea</dc:creator>
<guid>http://bogdanbrinzarea.wordpress.com/2009/04/28/solution-file-error-msb5009-error-parsing-the-nested-project-section-in-solution-file/</guid>
<description><![CDATA[After merging the solution file while getting the latest version and checking back in, the TFS autom]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>After merging the solution file while getting the latest version and checking back in, the TFS automatic build triggered by the check-in failed.</p>
<p>The solution was quite simple:</p>
<ol>
<li>I added a dummy file to the solution and checked-in the solution with the new dummy file.</li>
<li>I had a successful automatic build.</li>
<li>I removed the dummy file and checked-in again the solution without the dummy file.</li>
<li>I had another successful automatic build.</li>
</ol>
<p>I hope this will help others too!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[DYK #4 : unshelve with local pending changes]]></title>
<link>http://intovsts.net/2009/04/05/unshelve-with-local-pending-changes/</link>
<pubDate>Sun, 05 Apr 2009 18:20:29 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/04/05/unshelve-with-local-pending-changes/</guid>
<description><![CDATA[&nbsp;You might already have been in the situation where you wanted to unshelve a stored shelveset w]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />You might already have been in the situation where you wanted to unshelve a stored shelveset when having local changes to files that were also changed in the stored shelveset. Out-of-the-box with TFS 2008, this is not possible and you will get the following error dialog :</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/unshelveerror.jpg" border="0" /></p>
<p>Your local workspace may not contain pending changes on files that are included in the shelveset. However, there is a way to <strong>unshelve with local pending changes</strong>. Therefore, you need to have the <a href="http://msdn.microsoft.com/en-us/teamsystem/bb980963.aspx" target="_blank">Power Tools</a> installed for Team Foundation Server.</p>
<p>From the command-line you can execute the <em>tfpt unshelve</em> command with the name of the shelveset to accomplish that.</p>
<blockquote><p>tfpt unshelve allows a shelveset to be unshelved into a workspace with pending changes. Merges content between local and shelved changes. Allows migration of shelved changes from one branch into another by rewriting server paths.</p></blockquote>
<p><img src="http://intovsts.files.wordpress.com/2009/07/unshelvetfpt.jpg" border="0" /></p>
<p>Like in a normal <em>get latest</em> scenario, you will be asked to resolve conflicts and eventually be redirected to the well known TFS merge window.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/unshelveconflicts.jpg" border="0" /></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[DYK #3 : retain build indefinitely]]></title>
<link>http://intovsts.net/2009/03/17/did-you-know-3/</link>
<pubDate>Tue, 17 Mar 2009 19:52:42 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/03/17/did-you-know-3/</guid>
<description><![CDATA[&nbsp;If you hold on to a specific Team Build retention policy (new since TFS2008), you might lose a]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />If you hold on to a specific <b>Team Build retention policy</b> (new since TFS2008), you might lose all valuable build information of a particular build that you actually wanted to keep.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/buildretentionpolicy.jpg" border="0" /></p>
<p>There&#8217;s an option available via the Build Explorer to <b>retain builds indefinitely</b>!</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/buildretentionpolicy2.jpg" border="0" /></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[DYK #2 : TFS auto-connection]]></title>
<link>http://intovsts.net/2009/03/05/did-you-know-2/</link>
<pubDate>Thu, 05 Mar 2009 21:39:39 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/03/05/did-you-know-2/</guid>
<description><![CDATA[&nbsp; By default, Team Explorer always tries to automatically connect at startup to the latest know]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />
By default, <b>Team Explorer</b> always tries to automatically connect at startup to the <i>latest known</i> Team Foundation Server. In my case I often start Visual Studio Team System at home when I was previously connected to the Team Foundation Server at work. So, when disconnected from work, I always get the TF30331 error &#8230;</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/tfsconnectionerror.jpg" /></p>
<p>Today, this error hit me for the last time! On the <a href="http://blogs.msdn.com/dstfs/" target="_blank">Developer Support Team Foundation Server blog</a> I found how to <b>disable the auto-connection</b>! Sweet!</p>
<blockquote><p>
To make this happen, add a DWORD value called &#8220;AutoLoadServer&#8221; under HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\TeamFoundation (for 2005 – change this to 9.0 for Orcas).  A setting of Zero means do not reconnect automatically.
</p></blockquote>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[DYK #1 : IIS not required for Team Build]]></title>
<link>http://intovsts.net/2009/02/22/did-you-know-1/</link>
<pubDate>Sun, 22 Feb 2009 09:26:44 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/02/22/did-you-know-1/</guid>
<description><![CDATA[&nbsp;DYK = Did You Know? Internet Information Server (IIS) is not required to be installed for a TF]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />DYK = Did You Know?</p>
<blockquote><p>Internet Information Server (IIS) is not required to be installed for a TFS 2008 Team Build machine</p></blockquote>
<p>The application server for <b>TFS 2005</b> still used <i>.NET Remoting</i> to communicate with the Team Build machine, but as from <b>TFS 2008</b> the communication is set up with <i>Windows Communication Foundation</i>. The WCF service runs in a managed Windows Service (TfsBuildService.exe).</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Drill through merges in TFS2010]]></title>
<link>http://intovsts.net/2009/01/05/drill-through-merges-in-tfs2010/</link>
<pubDate>Mon, 05 Jan 2009 21:59:00 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/01/05/drill-through-merges-in-tfs2010/</guid>
<description><![CDATA[&nbsp;In the current available versions of Team Foundation Server [TFS2005 and TFS2008] it&#8217;s h]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />In the current available versions of Team Foundation Server [TFS2005 and TFS2008] it&#8217;s hard to look up changes that originated in another branch. Let me explain this by an example.</p>
<p>I have a <strong>Main branch</strong> and <strong>two feature branches</strong> that were both branched from Main. Now let&#8217;s assume certain changes are made to FeatureBranch1. These changes are merged (reverse integration) to Main and at a later stage a release branch (1.1) is split off to the Release folder (from Main). Some time later the code file is being inspected in the 1.1 branch (release folder) where the code change of FeatureBranch1 was executed. In the Annotate window [a new feature in TFS2008] you would be able to see that on line x a change was made by person y on time z. So far so good! The question that now pops up is : &#8220;What do you really want to see in the changeset details?&#8221;. The best answer of course is that you immediately want to see that those changes originated from the FeatureBranch1, but at this moment TFS2008 won&#8217;t provide you with this information. You will have to manually drill down the branch hierarchy to find out that this change came from a check-in into the FeatureBranch1 by person x. <strong>TFS 2008</strong> only gives you the information (via the annotate feature) that the change came from a merge (Main branch). This is not ideal, because you will have to step into the history and dig deeper to find out the original changeset in FeatureBranch1.</p>
<p><strong>TFS 2010</strong> will come to the rescue in the future and will provide you with the details you are really looking for in that type of situation. In the tooltip of changeset 74, TFS drills down through all merges and loads the details of the initial check-in at FeatureBranch1. Note that the screenshot is taken in the source of code in the 1.1 release branch.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/changesetinfo1.jpg" border="0" /></p>
<p>Right-clicking on the changeset 74 hyperlink will even give you the option to view the original changeset details of the FeatureBranch1 check-in or to view the history &#8230;</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/changesetinfo2.jpg" border="0" /></p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/changesetinfo3.jpg" border="0" /></p>
<p>The history window as seen above will now give you a hierarchical view on how the changeset came into the release 1.1 branch. To top it off, you can also track the 74 changeset visually by right-clicking &#8230;</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/changesetinfo4.jpg" border="0" /></p>
<p>The first view in the screenshots below is a <strong>timeline view</strong> where you can follow the merge history of changeset 74 and the second view is a <strong>hierachical view</strong> where you can detect the hierarchical dependencies between branches.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/changesetinfo5.jpg" border="0" /></p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/changesetinfo6.jpg" border="0" /></p>
<p>Very nice features I wish I had already at my disposal right now &#8230;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Source Server for TFS Builds]]></title>
<link>http://intovsts.net/2008/10/23/source-server-for-tfs-builds/</link>
<pubDate>Thu, 23 Oct 2008 21:38:20 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2008/10/23/source-server-for-tfs-builds/</guid>
<description><![CDATA[&nbsp;This is not yet a widely known practice in the field, but setting up a Source Server for TFS B]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />This is not yet a widely known practice in the field, but setting up a Source Server for TFS Builds in an enterprise development environment can be extremely valuable. </p>
<p>My friend and ex-colleague <a href="http://jelle.druyts.net/" target="_blank">Jelle Druyts</a> wrote a few months ago an excellent blog post about <a href="http://jelle.druyts.net/2007/12/09/SettingUpSourceServerForTFSBuilds.aspx" target="_blank">how to set up a Source Server for TFS Builds</a>.</p>
<p>Anyone who will reference assemblies that are built with a <em>source server enabled</em> TFS Build will be able to debug those assemblies in the original source code &#8230; great for framework code for instance!</p>
<blockquote><p>
When an assembly is &#8220;source server-enabled&#8221;, the pdb file will contain the full path and the exact version of the file in source control that was used to build that assembly. If the debugger then enters a method, Visual Studio automatically downloads that correct file, places it in a local cache, and opens it for debugging. This is super sweet!
</p></blockquote>
<p>If you follow the guidelines of Jelle, you need to add the custom target <em>RunSourceServerIndexing</em> somewhere in your Team Build script, but he doesn&#8217;t specify exactly where you need to include this. </p>
<p>Well, you have two options : you can do this in your TFSBuild.proj file or you can also put this custom target in an underlying .targets file to make it more reusable. The TFSBuild.proj file is the easiest option, but I would recommend an underlying .targets file. In fact it&#8217;s always a good practice to make an underlying .targets file for all your <em>common</em> Team Builds. The idea is to make your .proj file as clean as possible and put all the logic and commands in an underlying .targets file.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/compuwaretarget.jpg" border="0" /></p>
<p>In the image above you can see that I&#8217;ve created a specific target for all Compuware Team Builds on the Build Server. This .targets file must be imported in all TFSBuild.proj files and to enable source server for my Team Builds, I&#8217;ll just need to create a boolean variable in my TFSBuild.proj and pass it to the Compuware.targets file.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/sourceserverindexingboolean.jpg" border="0" /></p>
<p>The Compuware.targets file will do all the required steps in the background. Note that the default is set to false for the variable SourceServerIndexing.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/sourceserverindexingtarget.jpg" border="0" /></p>
<p>If you follow this pattern for other build tasks, you will end up with a clean TFSBuild.proj file and you will only need to pass booleans (and/or other variables) to the underlying .targets file that will contain all the reusable build tasks. Note that automatically all TFSBuild.proj files will import the default Microsoft.TeamFoundation.Build.targets file. Make sure that you never edit this master file, because it may jeopardize the working of your Team Builds when you need to migrate to another version of MSBuild. </p>
<p>Another small issue I came across when following the guidelines : the location where to drop the TFIndex.cmd file may be different than pointed out in the document (due to a different default location of the Debugging Tools). If that&#8217;s the case you must also check the location of this file when you set the custom target <em>RunSourceServerIndexing</em>.</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/locationtfsindex.jpg" border="0" /></p>
<p>If you haven&#8217;t taken the time to explore the possibilites of a Source Server for your TFS Builds, please do so now! You won&#8217;t regret!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[TFS with FQDN]]></title>
<link>http://intovsts.net/2008/10/18/tfs-with-fqdn/</link>
<pubDate>Sat, 18 Oct 2008 22:00:23 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2008/10/18/tfs-with-fqdn/</guid>
<description><![CDATA[&nbsp;From Wikipedia &#8230; A fully qualified domain name (or FQDN) is an unambiguous domain name t]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />From <a href="http://en.wikipedia.org/wiki/FQDN" target="_blank">Wikipedia</a> &#8230;</p>
<blockquote><p>
A fully qualified domain name (or FQDN) is an unambiguous domain name that specifies the exact location in the Domain Name System&#8217;s tree hierarchy through to a top-level domain and finally to the root domain. Technically, a FQDN has a trailing dot (for example: somehost.example.com.), but most DNS resolvers will treat any domain name that already has a dot as being an FQDN and add the final dot needed for the root of the DNS tree.
</p></blockquote>
<p>A lot of companies will use FQDN what means that Team Foundation Server won&#8217;t work with the default installation procedure. At first sight, you might think it works, but for Windows SharePoint Services and Reporting Services it won&#8217;t! There&#8217;s a pretty good blogpost from Buck Hodges available that guides you how to modify the default TFS configuration. Here&#8217;s what I did to get TFS working with FQDN :</p>
<ul>
<li>Run <em>tfsadminutil activateat MyFQDN</em>. This command (tfsadminutil can be found in the Tools folder of the TFS installation folder) will activate the FQDN computer as the TFS application-tier server. One of the executed tasks is the modification of the global TFS web.config (config file can be found in the Web Services folder of the TFS installation folder). You may verify the TFSNameUrl setting in the configuration file. I also manually added the appsetting TfsUrlPublic with as value the http://*FQDN*:8080 to force FQDN references in e-mail notifications. Another task the command does is changing the TFS service interface. You may verify this in the tbl_service_interface table of the TfsIntegration database. All urls should now match the FQDN. Before all urls contained the netbiosname of the computer.</li>
<li>Update registry settings <em>BaseReportsUrl</em> and <em>ReportsService</em> with my FQDN at HKLM\SOFTWARE\Microsoft\VisualStudio\9.0\TeamFoundation\ReportServer\80\Sites.</li>
<li>For WSS 3.0 to work with TFS 2008, I still had to add an alternate access mapping (see <a href="http://blogs.msdn.com/buckh/archive/2007/03/31/configuring-team-foundation-server-to-use-fully-qualified-domain-names.aspx" target="_blank">blogpost Buck Hodges</a> how to cope with that).</li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[No code coverage result with Team Build?]]></title>
<link>http://intovsts.net/2008/10/10/no-code-coverage-result-with-team-build/</link>
<pubDate>Fri, 10 Oct 2008 21:15:46 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2008/10/10/no-code-coverage-result-with-team-build/</guid>
<description><![CDATA[&nbsp;When creating a new Team Build with the Build Wizard in TFS 2008, it may be possible that you ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;<br />When creating a new Team Build with the Build Wizard in TFS 2008, it may be possible that you won&#8217;t have code coverage results while you have this option enabled in your testrun configuration file. This depends on how you selected your tests to run &#8230;</p>
<p><img src="http://intovsts.files.wordpress.com/2009/07/tfscodecoverage.jpg" border="0" /></p>
<ol>
<li>If you have chosen to run tests that are listed in a Test List, then there won&#8217;t be any problem : code coverage results will be available because all testrun configuration settings will be picked up in the testrun configuration file via the .vsmdi file.</li>
<li>If you have chosen to run tests with the TestContainer option, then the testrun configuration file is not picked up because there won&#8217;t be any trace of a .vsmdi file in your build project file. You may fix this by manually adding the following line to your .proj file.
<p><code>&#60;RunConfigFile&#62;$(SolutionRoot)\$filename$.testrunconfig&#60;/RunConfigFile&#62;</code></p>
<p>This line (to be added in PropertyGroup of .proj file) will pick up the test run configuration file and will control the way tests are run.
</li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[TFS 2008 SP1 RTM installation problem, reason and solution]]></title>
<link>http://blog.jemm.net/2008/08/13/tfs-2008-sp1-rtm-installation-problem-reason-and-solution/</link>
<pubDate>Wed, 13 Aug 2008 11:20:19 +0000</pubDate>
<dc:creator>jemm</dc:creator>
<guid>http://blog.jemm.net/2008/08/13/tfs-2008-sp1-rtm-installation-problem-reason-and-solution/</guid>
<description><![CDATA[While VS 2008 SP1 and SQL Server 2008 were relatively painless to install, I run into some issues wi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>While <strong>VS 2008 SP1</strong> and <strong>SQL Server 2008</strong> were relatively painless to install, I run into some issues with the TFS 2008 SP1.</p>
<p>I’ll tell briefly my case so you can avoid this or find the solution, should you have the same reason for the problem.</p>
<p>The TFS 2008 is installed on a single Windows Server 2008 machine (except SharePoint) and uses SQL Server 2005 SP2.</p>
</p>
<p>When I tried to install the <strong>KB949786</strong> (TFS SP1), the first part went always fine (TFS Build), but it ended in Fatal Error during the update of the actual TFS. TFS got into unusable state (clients couldn’t connect etc)</p>
<p>The errors in the Event Log were:</p>
<blockquote><p>“Product: Microsoft Visual Studio 2008 Team Foundation Server &#8211; ENU &#8211; Update &#8216;KB949786&#8242; could not be installed. <strong>Error code 1603</strong>. Additional information is available in the log file &#60;file&#62;”</p>
</blockquote>
<p>and</p>
<blockquote><p>“Product: Microsoft Visual Studio 2008 Team Foundation Server &#8211; ENU &#8212; <strong>Error 29003.TF 230001: The error mode for the Team Foundation Server Web application could not be configured properly. This problem occurred because the application root for the Team Foundation Server Web application does not exist.</strong> For more information, see the Microsoft Windows Installer (MSI) log.”</p>
</blockquote>
<p>After some googling, I found <a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3733286&#38;SiteID=1">similar symptoms</a> from the <a href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=68&#38;SiteID=1">MSDN Forums</a>. Logins etc were alright in my case, so the reason was elsewhere. (<strong>Tip</strong>: don’t change TFS service accounts unless you have a very good reason and if you do, use the tools mentioned in the forum)</p>
<p>Finally I just had to go through the installation log and from there I found the reason:</p>
<blockquote><p><strong>08/13/08 10:51:15 DDSet_Status: Commandline: &#34;C:\Windows\system32\inetsrv\appcmd.exe&#34; set config &#34;Team Foundation Server&#34; -section:httpErrors -existingResponse:PassThrough -commitpath:apphost       <br /></strong>08/13/08 10:51:15 DDSet_Status: IgnoreExitCode: 0      <br />08/13/08 10:51:15 DDSet_Status: Silent: 0      <br />08/13/08 10:51:15 DDSet_Status: ActionStart: 0      <br />08/13/08 10:51:15 DDSet_Status: Cost: 0      <br />08/13/08 10:51:15 DDSet_Status: WorkingDirectory:       <br />08/13/08 10:51:15 DDSet_Status: HideCmdLine: 0      <br /><strong>ERROR ( message:Cannot find SITE object with identifier &#34;Team Foundation Server&#34;. )       <br /></strong>08/13/08 10:51:16 DDSet_Status: Process returned 1168      <br />08/13/08 10:51:16 DDSet_Status: Found the matching error code&#160; for return value &#8216;1168&#8242; and it is: &#8216;29003&#8242;      <br />08/13/08 10:51:16 DDSet_Error:&#160; 1168      <br />MSI (s) (B8!94) [10:51:16:127]: Product: Microsoft Visual Studio 2008 Team Foundation Server &#8211; ENU &#8212; Error 29003.TF 230001: The error mode for the Team Foundation Server Web application could not be configured properly. This problem occurred because the application root for the Team Foundation Server Web application does not exist. For more information, see the Microsoft Windows Installer (MSI) log.</p>
</blockquote>
<p>I have the habit of putting server port in the names of the web sites in the IIS and <strong>I had renamed the “Team Foundation Server” to “Team Foundation Server – 8080”</strong>. The patch was obviously looking for the original name and failed because it didn’t find a web site with exactly the same name. </p>
<p>I just renamed the web site hosting the web services back to “Team Foundation Server”, run the patch again (without uninstalling it first) and everything went fine. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Microsoft, you could modify that part of the patch to search the web site with partial match or better: with some kind of unique ID of the web site instead of the name.</p>
<p>TFS is still very new product and it relies on so many other services and products that there are many places where something can go wrong. This is why it is better not to mess with <em>anything</em> directly without using official tools.</p>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px;"><a href="http://www.dotnetkicks.com/kick/?url=http://blog.jemm.net/2008/08/13/tfs-2008-sp1-rtm-installation-problem-reason-and-solution/"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://blog.jemm.net/2008/08/13/tfs-2008-sp1-rtm-installation-problem-reason-and-solution/&#38;bgcolor=0066FF&#38;fgcolor=FFFFFF&#38;border=000000&#38;cbgcolor=D4E1ED&#38;cfgcolor=000000"/></a></div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Upgrading to Team Foundation Server 2008]]></title>
<link>http://tranxcoder.wordpress.com/2008/06/23/upgrading-to-team-foundation-server-2008/</link>
<pubDate>Mon, 23 Jun 2008 01:09:49 +0000</pubDate>
<dc:creator>Mats</dc:creator>
<guid>http://tranxcoder.wordpress.com/2008/06/23/upgrading-to-team-foundation-server-2008/</guid>
<description><![CDATA[This weekend I finally pulled the trigger on upgrading our TFS environment from TFS 2005 to 2008. By]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>This weekend I finally pulled the trigger on upgrading our TFS environment from TFS 2005 to 2008. By and large this was a pretty painless upgrade with the notable exception of TFS Build which has turned out to be a royal pain.</p>
<p>Don&#8217;t get me wrong, feature-wise TFS Build 2008 is far superior to the 2005 version, but it was pretty discouraging to find that the build types created for a set of Visual C++ 2005 solutions just completely stopped working. I eventually gave up on the existing build types and started over with a fresh build type and by numerous searches, I&#8217;ve been able to get most things working.</p>
<h3>Building VS 2005 Solutions</h3>
<p>For various reasons, we have one project that we can&#8217;t upgrade to Visual Studio 2008 quite yet, so I had to keep the solution files as VS 2005 solution files, but still be able to build them with TFS Build 2008. After poking around a bit, these blog posts told me how to configure that:</p>
<ul>
<li><a href="http://blogs.msdn.com/aaronhallberg/archive/2008/03/25/overriding-the-toolsversion-for-your-projects-in-team-build.aspx">Overriding the ToolsVersion for Your Projects in Team Build</a> </li>
<li><a href="http://blogs.msdn.com/aaronhallberg/archive/2007/10/30/building-vc-2005-projects-with-team-build-2008.aspx">Building VC++ 2005 Projects With Team Build 2008</a> </li>
</ul>
<p>In my TFSBuild.proj, I specified the solutions to build as:</p>
<p><span style="font-family:consolas;font-size:x-small;">&#60;SolutionToBuild Include=&#34;&#60;solution path&#62;&#34;&#62;      <br />&#160;&#160;&#160; &#60;Targets&#62;&#60;/Targets&#62;       <br />&#160;&#160;&#160; &#60;Properties&#62;ProjectToolsVersion=2.0;VCBuildToolPath=$(ProgramFiles)\Microsoft Visual Studio 8\vc\vcpackages&#60;/Properties&#62;       <br />&#60;/SolutionToBuild&#62;</span></p>
<p>The property ProjectToolsVersion tells TFS Build to target .NET 2.0 and the VCBuildToolPath tells it to use the specified path to find VCBuild.exe which is used to build Visual C++ projects.</p>
<div id='extendedEntryBreak'></div>
</p>
<h3>Generating Custom Build Numbers</h3>
<p>We already had functionality to automatically update the product and file versions of our binaries as part of the build so that every build generated binaries with a unique version number. TFS Build 2008, however, offers the possibility to customize the build number. I thought it would be useful to let the build number match the file version generated by the build, making it easier to identify a particular build just by looking at the version number.</p>
<p>Again, there were several blog posts that talked about how to generate custom build numbers:</p>
<ul>
<li><a href="http://www.woodwardweb.com/tfs/000417.html">Aligning Build Numbers with Assembly Versions in TFS2008</a> </li>
<li><a href="http://blogs.msdn.com/aaronhallberg/archive/2008/05/12/orcas-sp1-tfs-build-changes-part-2.aspx">Orcas SP1 TFS Build Changes, Part 2</a> </li>
</ul>
<p>I wound up using a slightly different approach than the above. I&#8217;m still using a file containing the version number of the previous build (e.g. 1.2.3.4), but I wanted my file to be version controlled which posed a problem since the build number must be generated at the very beginning of the build, before all the source files to use for the build have been retrieved.</p>
<p>Since all I had available to me were the files that are located in my build type directory, I simply moved my version file to the build type directory which ensures it&#8217;s available to me. Next, I used the Version task from the <a href="http://msbuildtasks.tigris.org/">MSBuild Community Tasks</a> project to update this file:</p>
<p><font size="1"><span class="kwrd">&#60;</span><span class="html">Target</span> <span class="attr">Name</span><span class="kwrd">=&#34;BuildNumberOverrideTarget&#34;</span><span class="kwrd">&#62;</span></font></p>
<p><span class="rem"><font color="#008000" size="1">&#60;!&#8211; Update the product version number &#8211;&#62;</font></span></p>
<p><font size="1"><span class="kwrd">&#60;</span><span class="html">Version</span> <span class="attr">VersionFile</span><span class="kwrd">=&#34;$(TxProductVersionFile)&#34;</span> <span class="attr">BuildType</span><span class="kwrd">=&#34;None&#34;</span> <span class="attr">RevisionType</span><span class="kwrd">=&#34;Increment&#34;</span><span class="kwrd">&#62;        <br /></span></font><font size="1"><span class="kwrd">&#160; &#60;</span><span class="html">Output</span> <span class="attr">TaskParameter</span><span class="kwrd">=&#34;Major&#34;</span> <span class="attr">PropertyName</span><span class="kwrd">=&#34;TxMajorVersion&#34;</span> <span class="kwrd">/&#62;        <br /></span></font><font size="1"><span class="kwrd">&#160; &#60;</span><span class="html">Output</span> <span class="attr">TaskParameter</span><span class="kwrd">=&#34;Minor&#34;</span> <span class="attr">PropertyName</span><span class="kwrd">=&#34;TxMinorVersion&#34;</span> <span class="kwrd">/&#62;        <br /></span></font><font size="1"><span class="kwrd">&#160; &#60;</span><span class="html">Output</span> <span class="attr">TaskParameter</span><span class="kwrd">=&#34;Build&#34;</span> <span class="attr">PropertyName</span><span class="kwrd">=&#34;TxPatchVersion&#34;</span> <span class="kwrd">/&#62;        <br /></span></font><font size="1"><span class="kwrd">&#160; &#60;</span><span class="html">Output</span> <span class="attr">TaskParameter</span><span class="kwrd">=&#34;Revision&#34;</span> <span class="attr">PropertyName</span><span class="kwrd">=&#34;TxBuildVersion&#34;</span> <span class="kwrd">/&#62;        <br /></span></font><font size="1"><span class="kwrd">&#60;/</span><span class="html">Version</span><span class="kwrd">&#62;</span></font></p>
<p><font size="1"><span class="kwrd">&#60;</span><span class="html">CreateProperty</span> <span class="attr">Value</span><span class="kwrd">=&#34;$(TxMajorVersion).$(TxMinorVersion).$(TxPatchVersion).$(TxBuildVersion)&#34;</span><span class="kwrd">&#62;        <br />&#160; </span></font><font size="1"><span class="kwrd">&#60;</span><span class="html">Output</span> <span class="attr">TaskParameter</span><span class="kwrd">=&#34;Value&#34;</span> <span class="attr">PropertyName</span><span class="kwrd">=&#34;TxCompleteVersion&#34;</span><span class="kwrd">/&#62;        <br /></span></font><font size="1"><span class="kwrd">&#60;/</span><span class="html">CreateProperty</span><span class="kwrd">&#62;</span></font></p>
<p><font size="1"><span class="kwrd">&#60;</span><span class="html">CreateProperty</span> <span class="attr">Value</span><span class="kwrd">=&#34;$(TxMajorVersion),$(TxMinorVersion),$(TxPatchVersion),$(TxBuildVersion)&#34;</span><span class="kwrd">&#62;        <br />&#160; </span></font><font size="1"><span class="kwrd">&#60;</span><span class="html">Output</span> <span class="attr">TaskParameter</span><span class="kwrd">=&#34;Value&#34;</span> <span class="attr">PropertyName</span><span class="kwrd">=&#34;TxCompleteVersionRc&#34;</span><span class="kwrd">/&#62;        <br /></span></font><font size="1"><span class="kwrd">&#60;/</span><span class="html">CreateProperty</span><span class="kwrd">&#62;</span></font></p>
<p><font size="1"><span class="rem"><font color="#008000">&#60;!&#8211; Define the build version number –&#62;          <br /></font></span><span class="kwrd">&#60;</span><span class="html">PropertyGroup</span></font><font size="1"><span class="kwrd">&#62;        <br />&#160; </span><span class="kwrd">&#60;</span><span class="html">BuildNumber</span><span class="kwrd">&#62;</span>$(TeamProject)_$(BuildDefinitionName)_$(TxCompleteVersion)<span class="kwrd">&#60;/</span><span class="html">BuildNumber</span></font><font size="1"><span class="kwrd">&#62;        <br /></span><span class="kwrd">&#60;/</span><span class="html">PropertyGroup</span><span class="kwrd">&#62;</span></font></p>
<p><font size="1"><span class="kwrd">&#60;/</span><span class="html">Target</span><span class="kwrd">&#62;</span></font></p>
<p>This gives me my custom build number, but I also need to check the changed version number file back in. The easiest way to do this was to override the AfterGet target:</p>
<p><font size="1"><font face="con"><span class="kwrd">&#60;</span><span class="html">Target</span> <span class="attr">Name</span><span class="kwrd">=&#34;AfterGet&#34;</span><span class="kwrd">&#62;          <br />&#160; </span>&#160;<span class="kwrd">&#60;</span><span class="html">Message</span> <span class="attr">Text</span><span class="kwrd">=&#34;Updating the version-controlled product version file&#34;</span><span class="kwrd">/&#62;          <br />&#160; </span>&#160;<span class="kwrd">&#60;</span><span class="html">CallTarget</span> <span class="attr">Targets</span><span class="kwrd">=&#34;UpdateVersionedProductVersionFile&#34;</span><span class="kwrd">/&#62;</span>         <br />&#160; </font></font><font size="1"><font face="con"><span class="kwrd">&#60;</span><span class="html">Message</span> <span class="attr">Text</span><span class="kwrd">=&#34;Updating the product version information in preparation for the build.&#34;</span> <span class="kwrd">/&#62;</span>         <br />&#160; <span class="kwrd">&#60;</span><span class="html">CallTarget</span> <span class="attr">Targets</span><span class="kwrd">=&#34;SetProductVersionForBuild&#34;</span> <span class="kwrd">/&#62;</span>         <br /><span class="kwrd">&#60;/</span><span class="html">Target</span><span class="kwrd">&#62;</span></font></font></p>
<p>Where the definition of UpdateVersionedProductVersionFile is:</p>
<p><font size="1"><font face="Consolas"><span class="kwrd">&#60;</span><span class="html">PropertyGroup</span><span class="kwrd">&#62;</span>         <br />&#160; <span class="kwrd">&#60;</span><span class="html">UpdateVersionedProductVersionFileDependsOn</span><span class="kwrd">&#62;</span>         <br />&#160; <span class="kwrd">&#60;/</span><span class="html">UpdateVersionedProductVersionFileDependsOn</span><span class="kwrd">&#62;</span>         <br /><span class="kwrd">&#60;/</span><span class="html">PropertyGroup</span><span class="kwrd">&#62;</span>         <br /><span class="kwrd">&#60;</span><span class="html">Target</span> <span class="attr">Name</span><span class="kwrd">=&#34;UpdateVersionedProductVersionFile&#34;</span> <span class="attr">DependsOnTargets</span><span class="kwrd">=&#34;$(UpdateVersionedProductVersionFileDependsOn)&#34;</span><span class="kwrd">&#62;</span>         <br />&#160; <span class="rem"><font color="#008000">&#60;!&#8211; Check out the product version file we now have available to us after the source files have been retrieved. –&#62;</font></span>         <br />&#160; <span class="kwrd">&#60;</span><span class="html">Exec</span> <span class="attr">WorkingDirectory</span><span class="kwrd">=&#34;$(SolutionRoot)&#34;</span> <span class="attr">Command</span><span class="kwrd">=&#34;$(TxTf) checkout &#38;quot;$(TxVersionedProductVersionFile)&#38;quot;&#34;</span><span class="kwrd">/&#62;</span> </font></font></p>
<p><font size="1" face="Consolas">&#160; <font color="#008000"><span class="rem">&#60;!&#8211; Copy the previously updated product version file to the version-controlled product version file –&#62;</span>         <br /></font>&#160; <span class="kwrd">&#60;</span><span class="html">Copy</span> <span class="attr">SourceFiles</span><span class="kwrd">=&#34;$(TxProductVersionFile)&#34;</span> <span class="attr">DestinationFiles</span><span class="kwrd">=&#34;$(TxVersionedProductVersionFile)&#34;</span><span class="kwrd">/&#62;</span> </font></p>
<p><font size="1"><font face="Consolas">&#160; <font color="#008000"><span class="rem">&#60;!&#8211; And finally check the file back in so it&#8217;s available for the next build. –&#62;</span>           <br /></font>&#160; <span class="kwrd">&#60;</span><span class="html">Exec</span> <span class="attr">WorkingDirectory</span><span class="kwrd">=&#34;$(SolutionRoot)&#34;</span> <span class="attr">Command</span><span class="kwrd">=&#34;$(TxTf) checkin /override:&#38;quot;Automated build check-in, no associated work items&#38;quot; /comment:&#38;quot;Checking in the updated product version file for build $(BuildNumber)&#38;quot; &#38;quot;$(TxVersionedProductVersionFile)&#38;quot;&#34;</span><span class="kwrd">/&#62;</span>         <br /><span class="kwrd">&#60;/</span><span class="html">Target</span><span class="kwrd">&#62;</span></font></font></p>
<p>TxProductVersionFile defines the fully qualified path of the version number file in the BuildType directory created by TFS Build when the build is initiated and TxVersionedProductVersionFile the fully qualified path of the same file in the Sources directory (which of course means that I have configured my build type so that the build type itself is included in the workspace, this is easy to do in the new build type editor).</p>
<h3>More Stuff</h3>
<p>The above is what I&#8217;ve come up with so far. I still have to figure out why my code signing is failing (this is my fault, I changed the user account used to run TFS build, so I have to move the certificate to the appropriate certificate store) and my unit tests don&#8217;t appear to run properly yet.</p>
<p>I&#8217;ll post an update once I get that sorted out.</p>
<h3>Update</h3>
<p>I did manage to get the code signing sorted out. It turns out I was trying to import the code-signing certificate in a .spc format which isn&#8217;t good enough for code-signing purposes. The certificate needed to be in .pfx format to be imported and used properly for code-signing (the certificate would still show up in the Certificates MMC console, but SignFile task would fail with the error message that no certificate was found that matched all criteria).</p>
<p>Another item I found is that there now are several new targets you can override for the build, see <a href="http://msdn.microsoft.com/en-us/library/aa337604.aspx">Customizable Team Foundation Build Targets</a> for more information. For our needs, the AfterCompileConfiguration target comes in handy since that lets us conveniently create a single build that builds the code, signs the binaries, builds the installer and then finally sings the installer.</p>
<p>That said, I still haven&#8217;t figured out why my unit tests won&#8217;t run&#8230;</p>
<p><strong>Another Update</strong></p>
<p>After having upgraded our solution to VS2008, the unit tests are now running just fine on our build server. I didn&#8217;t spend a whole lot of time researching the issue while the solution was still using VS2005 as moving it to VS2008 was one of our short term goals anyway.</p>
<p>Here are the definitions of the TxProductVersionFile and TxVersionedProductFile properties.</p>
<p><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#60;!&#8211;        <br /></span></span></p>
<div><span style="color:#008000;font-size:x-small;"><span style="color:#008000;font-size:x-small;">Define the names of the files containing the product version information.        <br />TxProductVersionFile is the file stored in the build type directory. This file is         <br />copied to the build directory before all the source files are copied to the temporary         <br />workspace. This file has the version number incremented and the resulting version         <br />number is then used to generate the build number.<span style="color:#008000;font-size:x-small;"><span style="color:#008000;font-size:x-small;">TxVersionedProductVersionFile is only available to us after we&#8217;ve retrieved the            <br />source files required for the build. This file is checked out, updated so that             <br />it contains the same information as TxProductVersionFile and then checked back in             <br />so that we&#8217;re assured of having the updated version number available to us for             <br />the next time the build type is invoked.</span></span></span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#8211;&#62;        <br />&#60;</span></span><span style="color:#a31515;font-size:x-small;"><span style="color:#a31515;font-size:x-small;">TxProductVersionFile</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#62;</span></span><span style="font-size:x-small;">$(SolutionRoot)\..\BuildType\ProductVersion.txt</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#60;/</span></span><span style="color:#a31515;font-size:x-small;"><span style="color:#a31515;font-size:x-small;">TxProductVersionFile</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#62;        <br />&#60;</span></span><span style="color:#a31515;font-size:x-small;"><span style="color:#a31515;font-size:x-small;">TxVersionedProductVersionFile</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#62;</span></span><span style="font-size:x-small;">$(SolutionRoot)\TeamBuildTypes\Main\ProductVersion.txt</span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#60;/</span></span><span style="color:#a31515;font-size:x-small;"><span style="color:#a31515;font-size:x-small;">TxVersionedProductVersionFile</span></span><span style="color:#0000ff;font-size:x-small;"><span style="color:#0000ff;font-size:x-small;">&#62;</span></span></div>
<p><strong>More Build Definitions</strong></p>
<p>In response to <a href="http://tranxcoder.wordpress.com/2008/06/23/upgrading-to-team-foundation-server-2008/#comment-64">Stephen&#8217;s questions</a>:</p>
<p>1. $(TxTf) is defined as:</p>
<pre class="code">    <span style="color:blue;">&#60;!-- </span><span style="color:green;">The fully qualified path of tf.exe, used to check in/out items during the build </span><span style="color:blue;">--&#62;
    &#60;</span><span style="color:#a31515;">TxTf</span><span style="color:blue;">&#62;</span><span style="color:red;">&#38;quot;</span>$(TeamBuildRefPath)\..\tf.exe<span style="color:red;">&#38;quot;</span><span style="color:blue;">&#60;/</span><span style="color:#a31515;">TxTf</span><span style="color:blue;">&#62;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Basically it defines the fully qualified path of tf.exe which I use to run TFS-related commands that don&#8217;t have a convenient existing MSBuild target (keep in mind that I did fairly minimal work on this build script as part of the update, there may have been new targets added that I just haven&#8217;t looked for yet in TFS 2008).</p>
<p>2. That was a typo I introduced when copying the code from the .targets file to WordPress, the extra quotes have to be XML encoded, I&#8217;ve updated that code above.</p>
<p>3. The definitions of SetProductVersionForBuild target (and dependent targets) are:</p>
<pre class="code">  <span style="color:blue;">&#60;!--
    </span><span style="color:green;">SetProductVersionForBuild increments the version number in the global version number
    file and updates the product version information in all .rc files accordingly.
  </span><span style="color:blue;">--&#62;
  &#60;</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">SetProductVersionForBuildDependsOn</span><span style="color:blue;">&#62;
      </span>IncrementRcProductVersions;
      IncrementRcFileVersions;
    <span style="color:blue;">&#60;/</span><span style="color:#a31515;">SetProductVersionForBuildDependsOn</span><span style="color:blue;">&#62;
  &#60;/</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
  &#60;</span><span style="color:#a31515;">Target </span><span style="color:red;">Name</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">SetProductVersionForBuild</span>&#34; <span style="color:red;">DependsOnTargets</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(SetProductVersionForBuildDependsOn)</span>&#34;<span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">Message </span><span style="color:red;">Text</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">Updated the version information in preparation for the build.</span>&#34;<span style="color:blue;">/&#62;
  &#60;/</span><span style="color:#a31515;">Target</span><span style="color:blue;">&#62;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code">  <span style="color:blue;">&#60;!--
    </span><span style="color:green;">IncrementRcProductVersions updates the ProductVersion information in all
    .rc files in the project.
  </span><span style="color:blue;">--&#62;
  &#60;</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">IncrementRcProductVersionsDependsOn</span><span style="color:blue;">&#62;
      </span>CheckOutRcFiles;
    <span style="color:blue;">&#60;/</span><span style="color:#a31515;">IncrementRcProductVersionsDependsOn</span><span style="color:blue;">&#62;
  &#60;/</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
  &#60;</span><span style="color:#a31515;">Target </span><span style="color:red;">Name</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">IncrementRcProductVersions</span>&#34; <span style="color:red;">DependsOnTargets</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(IncrementRcProductVersionsDependsOn)</span>&#34;<span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">FileUpdate </span><span style="color:red;">Files</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">@(TxRcFiles)</span>&#34; <span style="color:red;">Encoding</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">ASCII</span>&#34; <span style="color:red;">Regex</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">PRODUCTVERSION\s+\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*\d+</span>&#34; <span style="color:red;">ReplacementText</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">PRODUCTVERSION $(TxMajorVersion),$(TxMinorVersion),$(TxPatchVersion),$(TxBuildVersion)</span>&#34;<span style="color:blue;">/&#62;
    &#60;</span><span style="color:#a31515;">FileUpdate </span><span style="color:red;">Files</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">@(TxRcFiles)</span>&#34; <span style="color:red;">Encoding</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">ASCII</span>&#34; <span style="color:red;">Regex</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">VALUE\s+</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">ProductVersion</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">\s*,\s*</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">\d+\s*[\.,]\s*\d+\s*[\.,]\s*\d+\s*[\.,]\s*\d+\s*(\)*</span><span style="color:red;">&#38;quot;</span>&#34; <span style="color:red;">ReplacementText</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">VALUE </span><span style="color:red;">&#38;quot;</span><span style="color:blue;">ProductVersion</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">, </span><span style="color:red;">&#38;quot;</span><span style="color:blue;">$(TxMajorVersion).$(TxMinorVersion).$(TxPatchVersion).$(TxBuildVersion)</span><span style="color:red;">&#38;quot;</span>&#34;<span style="color:blue;">/&#62;
  &#60;/</span><span style="color:#a31515;">Target</span><span style="color:blue;">&#62;

  &#60;!--
    </span><span style="color:green;">IncrementRcFileVersions updates the ProductVersion information in all
    .rc files in the project.
  </span><span style="color:blue;">--&#62;
  &#60;</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">IncrementRcFileVersionsDependsOn</span><span style="color:blue;">&#62;
      </span>CheckOutRcFiles;
    <span style="color:blue;">&#60;/</span><span style="color:#a31515;">IncrementRcFileVersionsDependsOn</span><span style="color:blue;">&#62;
  &#60;/</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
  &#60;</span><span style="color:#a31515;">Target </span><span style="color:red;">Name</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">IncrementRcFileVersions</span>&#34; <span style="color:red;">DependsOnTargets</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(IncrementRcFileVersionsDependsOn)</span>&#34;<span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">FileUpdate </span><span style="color:red;">Files</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">@(TxRcFiles)</span>&#34; <span style="color:red;">Encoding</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">ASCII</span>&#34; <span style="color:red;">Regex</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">FILEVERSION\s+\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*\d+</span>&#34; <span style="color:red;">ReplacementText</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">FILEVERSION $(TxMajorVersion),$(TxMinorVersion),$(TxPatchVersion),$(TxBuildVersion)</span>&#34;<span style="color:blue;">/&#62;
    &#60;</span><span style="color:#a31515;">FileUpdate </span><span style="color:red;">Files</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">@(TxRcFiles)</span>&#34; <span style="color:red;">Encoding</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">ASCII</span>&#34; <span style="color:red;">Regex</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">VALUE\s+</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">FileVersion</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">\s*,\s*</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">\d+\s*[\.,]\s*\d+\s*[\.,]\s*\d+\s*[\.,]\s*\d+\s*(\)*</span><span style="color:red;">&#38;quot;</span>&#34; <span style="color:red;">ReplacementText</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">VALUE </span><span style="color:red;">&#38;quot;</span><span style="color:blue;">FileVersion</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">, </span><span style="color:red;">&#38;quot;</span><span style="color:blue;">$(TxMajorVersion).$(TxMinorVersion).$(TxPatchVersion).$(TxBuildVersion)</span><span style="color:red;">&#38;quot;</span>&#34;<span style="color:blue;">/&#62;
  &#60;/</span><span style="color:#a31515;">Target</span><span style="color:blue;">&#62;

  &#60;!--
    </span><span style="color:green;">CheckOutRcFiles checks out all .rc files in the Source directory in preparation
    for them to be updated with new version information.
  </span><span style="color:blue;">--&#62;
  &#60;</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">CheckOutRcFilesDependsOn</span><span style="color:blue;">&#62;
      </span>FindAllRcFiles;
    <span style="color:blue;">&#60;/</span><span style="color:#a31515;">CheckOutRcFilesDependsOn</span><span style="color:blue;">&#62;
  &#60;/</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
  &#60;</span><span style="color:#a31515;">Target </span><span style="color:red;">Name</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">CheckOutRcFiles</span>&#34; <span style="color:red;">DependsOnTargets</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(CheckOutRcFilesDependsOn)</span>&#34;<span style="color:blue;">&#62;
    &#60;!-- </span><span style="color:green;">Note that this command is run in our Source directory so we don't check out files from the Extern directory </span><span style="color:blue;">--&#62;
    &#60;</span><span style="color:#a31515;">Exec </span><span style="color:red;">WorkingDirectory</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(TxSourceDir)</span>&#34; <span style="color:red;">Command</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(TxTf) checkout /recursive $(TxRcSpec)</span>&#34;<span style="color:blue;">/&#62;
  &#60;/</span><span style="color:#a31515;">Target</span><span style="color:blue;">&#62;

  &#60;!--
    </span><span style="color:green;">CheckOutRcFiles checks in all .rc files in the Source directory that were
    updated with the new version information.
  </span><span style="color:blue;">--&#62;
  &#60;</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">CheckInRcFilesDependsOn</span><span style="color:blue;">&#62;
    &#60;/</span><span style="color:#a31515;">CheckInRcFilesDependsOn</span><span style="color:blue;">&#62;
  &#60;/</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
  &#60;</span><span style="color:#a31515;">Target </span><span style="color:red;">Name</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">CheckInRcFiles</span>&#34; <span style="color:red;">DependsOnTargets</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(CheckInRcFilesDependsOn)</span>&#34;<span style="color:blue;">&#62;
    &#60;!-- </span><span style="color:green;">Note that this command is run in our Source directory so we don't check out files from the Extern directory </span><span style="color:blue;">--&#62;
    &#60;</span><span style="color:#a31515;">Exec </span><span style="color:red;">WorkingDirectory</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(TxSourceDir)</span>&#34; <span style="color:red;">Command</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(TxTf) checkin /override:</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">Automated build check-in, no associated work items</span><span style="color:red;">&#38;quot; </span><span style="color:blue;">/comment:</span><span style="color:red;">&#38;quot;</span><span style="color:blue;">Checking in the updated resource files for build $(BuildNumber)</span><span style="color:red;">&#38;quot; </span><span style="color:blue;">/recursive $(TxRcSpec)</span>&#34;<span style="color:blue;">/&#62;
  &#60;/</span><span style="color:#a31515;">Target</span><span style="color:blue;">&#62;

  &#60;!--
    </span><span style="color:green;">The FindAllRcFiles target finds all .rc files under $(SolutionRoot) and
    stores that information in the $(TxRcFiles) property.
  </span><span style="color:blue;">--&#62;
  &#60;</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">FindAllRcFilesDependsOn</span><span style="color:blue;">&#62;
    &#60;/</span><span style="color:#a31515;">FindAllRcFilesDependsOn</span><span style="color:blue;">&#62;
  &#60;/</span><span style="color:#a31515;">PropertyGroup</span><span style="color:blue;">&#62;
  &#60;</span><span style="color:#a31515;">Target </span><span style="color:red;">Name</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">FindAllRcFiles</span>&#34; <span style="color:red;">DependsOnTargets</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(FindAllRcFilesDependsOn)</span>&#34;<span style="color:blue;">&#62;
    &#60;</span><span style="color:#a31515;">CreateItem </span><span style="color:red;">Include</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">$(TxSourceDir)\**\$(TxRcSpec)</span>&#34;<span style="color:blue;">&#62;
      &#60;</span><span style="color:#a31515;">Output </span><span style="color:red;">ItemName</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">TxRcFiles</span>&#34; <span style="color:red;">TaskParameter</span><span style="color:blue;">=</span>&#34;<span style="color:blue;">Include</span>&#34;<span style="color:blue;">/&#62;
    &#60;/</span><span style="color:#a31515;">CreateItem</span><span style="color:blue;">&#62;
  &#60;/</span><span style="color:#a31515;">Target</span><span style="color:blue;">&#62;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
