<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Code Smart Not Hard</title>
  <link rel="alternate" type="text/html" href="http://codesmartnothard.com/" />
  <link rel="self" href="http://codesmartnothard.com/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2010-03-04T09:14:43.010625-06:00</updated>
  <author>
    <name>Michael Douglas</name>
  </author>
  <subtitle>Team Foundation Server, Frameworks, and Code Generation</subtitle>
  <id>http://codesmartnothard.com/</id>
  <generator uri="http://www.dasblog.net" version="1.9.6264.0">DasBlog</generator>
  <entry>
    <title>Building and Deploying ClickOnce Applications with TFS 2008</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/BuildingAndDeployingClickOnceApplicationsWithTFS2008.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,aafe4ba2-ebc5-474e-974f-4e548637f9b9.aspx</id>
    <published>2010-03-04T11:20:00-06:00</published>
    <updated>2010-03-04T09:14:43.010625-06:00</updated>
    <category term="ClickOnce" label="ClickOnce" scheme="http://codesmartnothard.com/CategoryView,category,ClickOnce.aspx" />
    <category term="Team Build" label="Team Build" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BBuild.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is Part 4 of my Deployments with TFS series. It has been awhile since I started
putting this information together but I haven’t found time to finish this.  
A question about building ClickOnce deployments with Team Build 2008 on the MSDN forums
was just what I needed to get this posted.
</p>
        <h3>What is ClickOnce?
</h3>
        <p>
ClickOnce is a deployment technology that enables you to create self-updating windows
based applications that can be installed and run with minimal user interaction. 
For a complete overview of ClickOnce, please visit this the <a href="http://msdn.microsoft.com/en-us/library/142dbbz4.aspx" target="_blank">ClickOnce
Deployment Overview</a> article on MSDN.
</p>
        <h3>Our Requirements
</h3>
        <p>
Our requirements contained a couple items that made our deployment more complicated. 
The first one is one a configuration management issue that I strongly pushed. 
Basically there were two environments, Test and Production.  The ClickOnce was
to be built and deployed to the Test server, tested and accepted, and finally pushed
to production.  The problem is that Test used different config files than Production. 
The thing we didn't want to do is to have to rebuild the application to update the
config files, recreate the manifest, and publish to the production.  This had
the potential to introduce something different than was tested.Fortunately our Production
Release build script was able to copy in the new config files and recreate the manifest
and push to production.  The helped ensure the same version of the assemblies
tested.  Of course nothing is perfect, we could have still had problems in our
config files. :)
</p>
        <p>
The next issue is that we wanted to run Test and Production at the same time to compare
if there were problems.  ClickOnce thought these were the same applications so
we were unable to run them both.  The solution for this was to use a different
key for each environment.  In Test we used a test certificate key that we created,
in Production, we used our issued certificate key.  With this, the assemblies
could be the same or different versions and ClickOnce treated them as two separate
applications.
</p>
        <h3>The Solution
</h3>
        <p>
The solution consisted of 4 build scripts
</p>
        <ol>
          <li>
Build and Stage to Test – This builds the application, creates the ClickOnce manifest,
and then publishes it to a folder share, ready to be deployed to Test (but not yet). 
</li>
          <li>
Deploy to Test – This script copies the ClickOnce application to the web server so
the application is available to the testers.  This script also deployed a WCF
Windows service. 
</li>
          <li>
Stage to Production – This script copied the production config file into the manifest
folder, recreated the manifest (with production certificate), and copied the ClickOnce
application to a staging folder on a production (so it could be deployed at a later
time). 
</li>
          <li>
Deploy to Production – This script copies the ClickOnce application from the production
staging folder to the production web server. 
</li>
        </ol>
        <p>
The “staging” builds could be combined with the “deployment” builds but I believe
by separating these it offers the most flexibility.  I will now highlight some
of the unique things I had to do to get this all to work.  Unfortunately it wasn’t
as simple as using the MSBUILD task.  I think this would work for a demo or simple
scenario but not a real world scenario.  There wasn’t any way to change any of
the settings.  This offers more options.
</p>
        <h4>Build and Stage To Test
</h4>
        <p>
The first part is the properties.  Here I set all of the ClickOnce properties
that will be used later on in the build.
</p>
        <blockquote>
          <p>
&lt;PropertyGroup&gt; 
<br />
  &lt;TF&gt;&amp;quot;$(TeamBuildRefPath)\..\tf.exe&amp;quot;&lt;/TF&gt; 
<br />
  &lt;PublishUrl&gt;\\myserver\deployments\coolapp\current\ClickOnceStage\&lt;/PublishUrl&gt; 
<br />
  &lt;ClickOnceAppName&gt;MyCompany.CoolApp&lt;/ClickOnceAppName&gt; 
<br />
  &lt;ClickOnceExeFile&gt;MyCompany.CoolApp.exe&lt;/ClickOnceExeFile&gt; 
<br />
  &lt;ClickOnceProduct&gt;Cool Application&lt;/ClickOnceProduct&gt; 
<br />
  &lt;Company&gt;My Company&lt;/Company&gt; 
<br />
  &lt;ClickOnceDescription&gt;&lt;/ClickOnceDescription&gt; 
<br />
  &lt;ClickOnceUrl&gt;<a href="http://testserver.mycompany.com/">http://testserver.mycompany.com/</a>&lt;/ClickOnceUrl&gt; 
<br />
  &lt;SigningCert&gt;$(SolutionRoot)\MyCompany.CoolApp\CoolApp_1_TemporaryKey.pfx&lt;/SigningCert&gt; 
<br />
  &lt;SigningCertPassword&gt;1234&lt;/SigningCertPassword&gt; 
<br />
&lt;/PropertyGroup&gt;
</p>
        </blockquote>
        <p>
The first trick is to edit project file and update the publish url.   This
allows the build to edit it but not check out the file and need to check it in. 
Do this before the build by overriding the BeforeCompile target.
</p>
        <blockquote>
          <p>
&lt;Target Name ="BeforeCompile"&gt; 
<br />
  &lt;Message Text="Making csproj file writable"/&gt; 
<br />
  &lt;Exec Command="attrib -R &amp;quot;$(SolutionRoot)\MyCompany.CoolApp\MyCompany.CoolApp.csproj&amp;quot;"/&gt; 
</p>
          <p>
  &lt;Message Text="Replacing PublishUrl"/&gt; 
<br />
  &lt;File.RegEx 
<br />
    Path="$(SolutionRoot)\MyCompany.CoolApp\MyCompany.CoolApp.csproj" 
<br />
    RegularExpression="&amp;lt;PublishUrl&amp;gt;(.*?)&amp;lt;/PublishUrl&amp;gt;" 
<br />
    NewValue="&amp;lt;PublishUrl&amp;gt;$(PublishUrl)&amp;lt;/PublishUrl&amp;gt;" 
<br />
     /&gt; 
<br />
&lt;/Target&gt;
</p>
        </blockquote>
        <p>
Take the publish.htm file from a manual ClickOnce publish change the version to a
tag that can be replaced by the updated version number and check it in to the solution. 
After the compile, use the modified version of the publish.htm file copy it to the
staging location and then replace it with the version.  MaxVersion is the variable
the represents the new version.  I like to keep the assembly version the same
as the ClickOnce version.
</p>
        <blockquote>
          <p>
&lt;Target Name="AfterCompile" Condition="'$(IsDesktopBuild)'!='true'"&gt; 
<br />
  &lt;!-- Copy modified publish htm file to staging publish location --&gt; 
<br />
  &lt;Copy SourceFiles="$(SolutionRoot)\publish.htm" DestinationFolder="$(PublishUrl)"
/&gt; 
</p>
          <p>
  &lt;ItemGroup&gt; 
<br />
    &lt;WebPage Include="$(PublishUrl)\publish.htm" /&gt; 
<br />
  &lt;/ItemGroup&gt; 
</p>
          <p>
  &lt;RegEx 
<br />
    Condition="Exists(@(WebPage))" 
<br />
    Path="@(WebPage)" 
<br />
    RegularExpression="#VERSION#" 
<br />
    NewValue="$(MaxVersion)" 
<br />
    Force="true"/&gt; 
<br />
&lt;/Target&gt;
</p>
        </blockquote>
        <p>
Next, I used a couple of custom tasks I created.  The first was to get the framework
version.  I couldn’t figure out a way to do this.  Basically this just returns
the .net framework path so I can call Mage.exe.  The second one takes the name
of the app and the version to create the manifest folder.  Then it does the heavy
lifting to create the ClickOnce application.  We have to do each step to make
this work.  There is one thing you will probably noticed is that the setup.exe
is renamed to CoolAppSetup.exe.  This was done because there was a policy that
users couldn’t run setup.exe. I left out the copying of the files to the staging location
before running all of this below.  I had to copy the files individually because
this build script also built the WCF service.  You will need to add the appropriate
process to copy these.
</p>
        <ol>
          <li>
Generate the application manifest 
</li>
          <li>
Sign the application manifest 
</li>
          <li>
Rename the source files to .deploy 
</li>
          <li>
Generate the deployment manifest 
</li>
          <li>
Sign the application manifest (one more time) 
</li>
          <li>
Create the bootstrapper 
</li>
        </ol>
        <blockquote>
          <p>
&lt;Target Name="AfterEndToEndIteration"&gt; 
<br />
  &lt;GetFrameworkPath&gt; 
<br />
    &lt;Output TaskParameter="FrameworkPath" PropertyName="FrameworkPath"
/&gt; 
<br />
  &lt;/GetFrameworkPath&gt; 
<br />
  &lt;CreateManifestName ExecutableName="MyCompany.CoolApp" ExecutableVersion="$(MaxVersion)"&gt; 
<br />
    &lt;Output TaskParameter="ManifestName" PropertyName="ManifestName"
/&gt; 
<br />
  &lt;/CreateManifestName&gt; 
<br />
  &lt;PropertyGroup&gt; 
<br />
    &lt;ClickOnceApplicationUrl&gt;$(ClickOnceUrl)$(ClickOnceAppName).application&lt;/ClickOnceApplicationUrl&gt; 
<br />
    &lt;PublishDir&gt;$(PublishUrl)&lt;/PublishDir&gt; 
<br />
    &lt;AppPublishDir&gt;$(PublishDir)Application Files\$(ManifestName)&lt;/AppPublishDir&gt; 
<br />
    &lt;SdkPath&gt;$(FrameworkPath)\&lt;/SdkPath&gt; 
<br />
    &lt;VersionNumber&gt;$(MaxVersion)&lt;/VersionNumber&gt; 
<br />
  &lt;/PropertyGroup&gt; 
</p>
          <p>
  &lt;Message Text="FrameworkPath = $(FrameworkPath)" /&gt; 
<br />
  &lt;BuildStep 
<br />
    TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
<br />
    BuildUri="$(BuildUri)" 
<br />
    Message="Building $(ClickOnceAppName) ClickOnce version: $(VersionNumber)"&gt; 
<br />
    &lt;Output TaskParameter="Id" PropertyName="StepId"
/&gt; 
<br />
  &lt;/BuildStep&gt; 
</p>
          <p>
  &lt;!-- 
<br />
************************************************ 
<br />
Generate application manifest 
<br />
************************************************ 
<br />
--&gt; 
<br />
  &lt;Exec 
<br />
  Command="mage.exe -New Application -TrustLevel FullTrust -ToFile &amp;quot;$(AppPublishDir)\$(ClickOnceExeFile).manifest&amp;quot;
-Name &amp;quot;$(ClickOnceAppName)&amp;quot; -Version &amp;quot;$(VersionNumber)&amp;quot;
-FromDirectory &amp;quot;$(AppPublishDir)" 
<br />
  WorkingDirectory="$(SdkPath)"/&gt; 
</p>
          <p>
  &lt;!-- 
<br />
************************************************ 
<br />
Sign application manifest 
<br />
************************************************ 
<br />
--&gt; 
<br />
  &lt;!--&lt;Exec Condition="'$(SigningCertPassword)'==''" 
<br />
    Command="mage.exe -Sign &amp;quot;$(AppPublishDir)\$(ClickOnceExeFile).manifest&amp;quot;
-CertFile &amp;quot;$(SigningCert)&amp;quot;" 
<br />
    WorkingDirectory="$(SdkPath)"  /&gt;--&gt; 
</p>
          <p>
  &lt;Exec Condition="'$(SigningCertPassword)'!=''" 
<br />
      Command="mage.exe -Sign &amp;quot;$(AppPublishDir)\$(ClickOnceExeFile).manifest&amp;quot;
-CertFile &amp;quot;$(SigningCert)&amp;quot; -Password &amp;quot;$(SigningCertPassword)&amp;quot;" 
<br />
      WorkingDirectory="$(SdkPath)"/&gt; 
</p>
          <p>
  &lt;!-- 
<br />
************************************************ 
<br />
Rename source files to .deploy 
<br />
************************************************ 
<br />
--&gt; 
<br />
  &lt;ItemGroup&gt; 
<br />
    &lt;SourceFilesToRename Include="$(AppPublishDir)\**\*.*" 
<br />
                        
Exclude="$(AppPublishDir)\*.manifest;$(AppPublishDir)\*.htm"/&gt; 
<br />
    &lt;SourceFilesToDelete Include="$(AppPublishDir)\**\*.*" 
<br />
                        
Exclude="$(AppPublishDir)\*.application;$(AppPublishDir)\*.manifest;$(AppPublishDir)\*.htm"/&gt; 
<br />
  &lt;/ItemGroup&gt; 
</p>
          <p>
  &lt;Copy 
<br />
      SourceFiles="@(SourceFilesToRename)" 
<br />
      DestinationFiles="@(SourceFilesToRename-&gt;'$(AppPublishDir)\%(RecursiveDir)%(Filename)%(Extension).deploy')" 
<br />
      /&gt; 
</p>
          <p>
  &lt;Delete Files="@(SourceFilesToDelete)"/&gt; 
</p>
          <p>
  &lt;!-- 
<br />
************************************************ 
<br />
Generate deployment manifest 
<br />
************************************************ 
<br />
--&gt; 
<br />
  &lt;CreateItem Include="$(AppPublishDir)\$(ClickOnceExeFile).manifest"
AdditionalMetadata="TargetPath=Application Files\$(ManifestName)\$(ClickOnceExeFile).manifest"&gt; 
<br />
    &lt;Output TaskParameter="Include" ItemName="ApplicationManifest"/&gt; 
<br />
  &lt;/CreateItem&gt; 
</p>
          <p>
  &lt;Message Text="@(ApplicationManifest)" /&gt; 
</p>
          <p>
  &lt;GenerateDeploymentManifest 
<br />
    MapFileExtensions="true" 
<br />
    AssemblyName="$(ClickOnceAppName).application" 
<br />
    AssemblyVersion="$(VersionNumber)" 
<br />
    Description="$(ClickOnceDescription)" 
<br />
    Product="$(ClickOnceProduct)" 
<br />
    Publisher="$(Company)" 
<br />
    SupportUrl="$(SupportUrl)" 
<br />
    EntryPoint="@(ApplicationManifest)" 
<br />
    Install="false" 
<br />
    UpdateEnabled="true" 
<br />
    UpdateInterval="7" 
<br />
    UpdateMode="Foreground" 
<br />
    OutputManifest="$(PublishDir)\$(ClickOnceAppName).application"/&gt; 
</p>
          <p>
  &lt;!-- 
<br />
************************************************ 
<br />
Sign application manifest 
<br />
************************************************ 
<br />
--&gt; 
<br />
  &lt;!--&lt;Exec Condition="'$(SigningCertPassword)'==''" 
<br />
      Command="mage.exe -Sign &amp;quot;$(PublishDir)\$(ClickOnceAppName).application&amp;quot;
-CertFile &amp;quot;$(SigningCert)&amp;quot;" 
<br />
      WorkingDirectory="$(SdkPath)"/&gt;--&gt; 
<br />
  &lt;Exec Condition="'$(SigningCertPassword)'!=''" 
<br />
      Command="mage.exe -Sign &amp;quot;$(PublishDir)\$(ClickOnceAppName).application&amp;quot;
-CertFile &amp;quot;$(SigningCert)&amp;quot; -Password &amp;quot;$(SigningCertPassword)&amp;quot;" 
<br />
      WorkingDirectory="$(SdkPath)"/&gt; 
</p>
          <p>
  &lt;!-- 
<br />
************************************************ 
<br />
Generate Bootstrapper 
<br />
************************************************ 
<br />
--&gt; 
<br />
  &lt;ItemGroup&gt; 
<br />
    &lt;BootstrapperFile Include="Microsoft.Net.Framework.3.5"&gt; 
<br />
      &lt;ProductName&gt;Microsoft .NET Framework 3.5&lt;/ProductName&gt; 
<br />
    &lt;/BootstrapperFile&gt; 
<br />
    &lt;BootstrapperFile Include="Microsoft.Windows.Installer.3.1"&gt; 
<br />
      &lt;ProductName&gt;Windows Installer 3.1&lt;/ProductName&gt; 
<br />
    &lt;/BootstrapperFile&gt; 
<br />
  &lt;/ItemGroup&gt; 
</p>
          <p>
  &lt;GenerateBootstrapper 
<br />
    ApplicationFile="$(ClickOnceAppName).application" 
<br />
    ApplicationName="$(ClickOnceAppName)" 
<br />
    ApplicationUrl="$(ClickOnceUrl)" 
<br />
    BootstrapperItems="@(BootstrapperFile)" 
<br />
    Culture="en" 
<br />
    FallbackCulture="en-US" 
<br />
    CopyComponents="true" 
<br />
    Validate="false" 
<br />
    OutputPath="$(PublishDir)"/&gt; 
</p>
          <p>
  &lt;Copy SourceFiles="$(PublishDir)\Setup.exe" DestinationFiles="$(PublishDir)\CoolAppSetup.exe"
/&gt; 
<br />
  &lt;Delete Files="$(PublishDir)\Setup.exe" /&gt; 
</p>
          <p>
  &lt;BuildStep 
<br />
    TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
<br />
    BuildUri="$(BuildUri)" 
<br />
    Id="$(StepId)" 
<br />
    Status="Succeeded"/&gt; 
</p>
          <p>
  &lt;OnError ExecuteTargets="MarkBuildStepAsFailed" /&gt; 
<br />
&lt;/Target&gt; 
</p>
          <p>
&lt;!-- 
<br />
************************************************ 
<br />
Mark the buildstep as failed 
<br />
************************************************ 
<br />
--&gt; 
<br />
&lt;Target Name="MarkBuildStepAsFailed"&gt; 
<br />
  &lt;BuildStep 
<br />
    TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
<br />
    BuildUri="$(BuildUri)" 
<br />
    Id="$(StepId)" 
<br />
    Status="Failed"/&gt; 
<br />
&lt;/Target&gt; 
</p>
        </blockquote>
        <p>
The Deploy Builds are simply a Copy task to copy the files to the web server. 
Do this by creating a share to the same location so you can use a UNC.  The production
stage build is basically all of the above again but with the production certificate
key and copy the new config file(s) to the production stage location.
</p>
        <p>
Looking back on this it seems complex but this is what the publish wizard is doing
behind the scenes and offers complete customizing to fit your needs.  I sliced,
diced, and renamed items in the scripts above.  I tried to make sure everything
is correct.  If there is a typo or something missing, please let me know and
will update it.
</p>
        <p>
Enjoy!
</p>
        <p>
Mike
</p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=aafe4ba2-ebc5-474e-974f-4e548637f9b9" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Setting up a Team Foundation Server 2010 Farm using NLB</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/SettingUpATeamFoundationServer2010FarmUsingNLB.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,2fb0b2ea-0953-4c38-9af6-99038dbb37dd.aspx</id>
    <published>2010-02-27T20:04:00-06:00</published>
    <updated>2010-02-27T18:06:53.62-06:00</updated>
    <category term="SQL Server 2008" label="SQL Server 2008" scheme="http://codesmartnothard.com/CategoryView,category,SQL%2BServer%2B2008.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <category term="TFS 2010" label="TFS 2010" scheme="http://codesmartnothard.com/CategoryView,category,TFS%2B2010.aspx" />
    <category term="Visual Studio 2010" label="Visual Studio 2010" scheme="http://codesmartnothard.com/CategoryView,category,Visual%2BStudio%2B2010.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In previous versions of Team Foundation Server there was not a way to install and
configure TFS to be run in a completely high available environment.  TFS 2008
supports the data tier running in a SQL Server Cluster.  If the TFS application
tier server crashed, there could be a “warm standby” configured to take over but required
a manual process to do this.   TFS 2010 supports running multiple Application
tier servers using Network Load Balancing (NLB).  Last year I first heard of
topology improvements in TFS 2010 in Brian Harry’s post about the <a href="http://blogs.msdn.com/bharry/archive/2009/04/30/tfs-2010-admin-operations-setup-improvements.aspx" target="_blank">Administrator,
Operations,and Setup Improvements in Team Foundation Server 2010</a>.  I think
this is an extremely important feature as companies are utilizing more features in
Team Foundation Server and expecting these services to always be available.
</p>
        <p>
In this post I am going to explain:
</p>
        <ul>
          <li>
Configuring the second TFS application tier</li>
          <li>
Enabling and configuring Network Load Balancing in Windows Server 2008 R2</li>
          <li>
Testing TFS using the NLB Application tier severs</li>
          <li>
Lessons learned 
</li>
        </ul>
        <p>
 
</p>
        <h3>Team Foundation Server 2010 Farm Network Topology Diagram
</h3>
        <p>
This is a diagram shows the topology of the TFS configuration I created to demonstrate
the NLB option.
</p>
        <p>
 
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/image_thumb_2.png" width="600" height="243" />
          </a>
        </p>
        <p>
 
</p>
        <p>
I set up this environment on a laptop.  I installed Windows Server 2008 R2 x64
on the laptop as the host OS to utilize Hyper-V.   I added Active Directory
Domain Services (ADDS) and DNS to this machine and configured it as the domain controller. 
I installed SQL Server 2008 R2 x64 on it also to be the data tier for the TFS installation. 
Both TFS Application Tier Servers were created as Hyper-V virtual machines with Windows
2008 R2 x64.  To make this configuration 100% redundant I would have needed to
install the reporting services on both of the TFS Servers, used a SharePoint 2007
Farm for the portal, and a SQL Server cluster for the data tier.  In fact, now
that I have all of this working, I am going to uninstall everything and try to get
WSS and SSRS installed on both application tiers also utilizing the NLB.  This
would allow for 100% redundant and high availability for all of the TFS 2010 Components
with only 4 servers (creating a 2 server SQL Server Cluster). I will post a follow
up on how this goes..
</p>
        <p>
 
</p>
        <h3>Team Foundation Server Installation
</h3>
        <p>
The TFS installation and configuration for the first server (TFS2010A) was done just
as if it was going to be the only server.  Here are the settings after I installed
the first server.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/oneserver_apptiersettings_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="oneserver_apptiersettings" border="0" alt="oneserver_apptiersettings" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/oneserver_apptiersettings_thumb.jpg" width="454" height="182" />
          </a>
        </p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/oneserver_datatiersettings_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="oneserver_datatiersettings" border="0" alt="oneserver_datatiersettings" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/oneserver_datatiersettings_thumb.jpg" width="454" height="109" />
          </a>
        </p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/oneserver_reportingserversettings_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="oneserver_reportingserversettings" border="0" alt="oneserver_reportingserversettings" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/oneserver_reportingserversettings_thumb.jpg" width="454" height="79" />
          </a>
        </p>
        <p>
 
</p>
        <p>
For the second server (TFS2010B), the only pre-requisites that were required were
IIS 7 and SQL Client connectivity tools.    Below are the steps for
configuring the second TFS Server.
</p>
        <p>
In the TFS configuration, choose the “Application-Tier Only” installation option. 
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly" border="0" alt="configure_apptieronly" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly_thumb.jpg" width="454" height="342" />
          </a>
        </p>
        <p>
The first step was the Welcome step.  There were no options on this step. 
The next step is to specify the configuration database that was created when the first
server was configured.  
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly3_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly3" border="0" alt="configure_apptieronly3" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly3_thumb.jpg" width="454" height="342" />
          </a>
        </p>
        <p>
Next, specify the service account for the the new application tier.  I chose
to use the same domain account that I used for the first server.
</p>
        <p>
 <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly4_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly4" border="0" alt="configure_apptieronly4" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly4_thumb.jpg" width="454" height="342" /></a></p>
        <p>
This screen shows the summary of the settings that were chosen before the verification
is run.
</p>
        <p>
 <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly5_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly5" border="0" alt="configure_apptieronly5" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly5_thumb.jpg" width="454" height="342" /></a></p>
        <p>
After the first time I ran the verification I received two errors.  One was that
.Net 3.5sp1 wasn’t installed.  I’m not sure why I reported this error. 
When I checked it, it was installed.  It could be related to other error. 
The other error, TF255040, was that I didn’t have Reporting Services or SQL Server
Connectivity tools installed.
</p>
        <p>
 <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly6_error_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly6_error" border="0" alt="configure_apptieronly6_error" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly6_error_thumb.jpg" width="454" height="342" /></a></p>
        <p>
I installed the connectivity tools and reran the verification process and it passed
this time.
</p>
        <p>
 <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly7_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly7" border="0" alt="configure_apptieronly7" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly7_thumb.jpg" width="454" height="342" /></a></p>
        <p>
The configuration completed successfully.
</p>
        <p>
 <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly9_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly9" border="0" alt="configure_apptieronly9" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly9_thumb.jpg" width="454" height="342" /></a></p>
        <p>
The TFS administrative console now shows both application tier servers.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly10_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="configure_apptieronly10" border="0" alt="configure_apptieronly10" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_apptieronly10_thumb.jpg" width="454" height="278" />
          </a> 
</p>
        <p>
 
</p>
        <h3>Setting up Network Load Balancing in Windows 2008 R2 and Hyper-V
</h3>
        <p>
Now that both servers are installed and configured correctly, the next step is to
set up Network Load Balancing (NLB).  This will allows users to connect to TFS
through a single endpoint and allow NLB to balance the traffic and route all of the
traffic to one server if the other is unavailable.  This provides high availability
in the event of an outage or when the servers need to be updated.
</p>
        <p>
The first thing to do before setting up NLB is to pick a static IP address and create
a DNS (A) Record for the shared name.  In this example, TFS2010 is the endpoint
that clients such as Visual Studio 2010.  Here is a snapshot of the A records.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_nlb5_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="configure_nlb5" border="0" alt="configure_nlb5" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_nlb5_thumb.jpg" width="454" height="85" />
          </a>
        </p>
        <p>
 
</p>
        <p>
Here is an article I used to help enable and configure NLB in Windows Server 2008
R2.  Below are the steps I performed to configure it. 
<br /><a title="http://technet.microsoft.com/en-us/library/cc731695.aspx" href="http://technet.microsoft.com/en-us/library/cc731695.aspx">http://technet.microsoft.com/en-us/library/cc731695.aspx</a></p>
        <p>
For each TFS Application Tier server, install Network Load Balancing by going to Server
Manager &gt; Features &gt; Add Features &gt; Network Load Balancing
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_nlb_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="configure_nlb" border="0" alt="configure_nlb" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_nlb_thumb.jpg" width="454" height="336" />
          </a>
        </p>
        <p>
Once NLB is installed on all of the App Tiers, run the Network Load Balancing Manager
by typing <strong>nlbmgr</strong> at the command prompt.  Then connect to one
of the hosts.  I chose <strong>TFS2010a</strong> first.  Right click on
the Network Load Balance node and choose “Add New Cluster”.  Add the current
server to the node by walking through the wizard.  You should be able to leave
the defaults unless you want to limit the NLB to just port 8080. The last step of
the wizard is to assign the Cluster a shared IP Address.  This IP Address is
how all of the clients will access and see it.  Make sure this is different than
the IP addresses of the any of the nodes in the cluster.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_nlb2_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="configure_nlb2" border="0" alt="configure_nlb2" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/configure_nlb2_thumb.jpg" width="454" height="353" />
          </a> 
</p>
        <p>
Next, add the other host to the cluster by right clicking on the cluster and choosing
“Add Host to Cluster”.  Enter the name of the Host to be added to the cluster.
</p>
        <p>
Here is what the Cluster looks like when it is configured.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/nlb_configured_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="nlb_configured" border="0" alt="nlb_configured" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/nlb_configured_thumb.jpg" width="504" height="114" />
          </a>
        </p>
        <p>
 
</p>
        <h3>Connect to TFS from Visual Studio 2010
</h3>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/connect_tfs_nlb_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="connect_tfs_nlb" border="0" alt="connect_tfs_nlb" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/connect_tfs_nlb_thumb.jpg" width="454" height="298" />
          </a>
        </p>
        <p>
 
</p>
        <h3>Testing the high availability servers
</h3>
        <p>
To test the high availability configuration, I am going to take down one of the TFS
application tier servers and then both.  First I created the team project while
both servers were available.
</p>
        <p>
Then I created a C# windows project, checked it in, and then checked out one of the
files.
</p>
        <p>
Next, I disabled the NIC on TFS2010a.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/disabled_tfs2010a_nic_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="disabled_tfs2010a_nic" border="0" alt="disabled_tfs2010a_nic" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/disabled_tfs2010a_nic_thumb.jpg" width="304" height="209" />
          </a>
        </p>
        <p>
I did a Undo checkout on the file
</p>
        <p>
NLB rerouted the traffic to TFS2010B and it worked perfect.
</p>
        <p>
Next, I Disabled the NIC on TFS2010b so now both are disabled and it should error.
</p>
        <p>
Tried to check out a file and got a TFS not available error as expected.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/both_tfs_servers_nic_disabled_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="both_tfs_servers_nic_disabled" border="0" alt="both_tfs_servers_nic_disabled" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/both_tfs_servers_nic_disabled_thumb.jpg" width="454" height="236" />
          </a> 
</p>
        <p>
Last, I re-enabled the NIC on TFS2010A
</p>
        <p>
I performed the check out again and worked perfect.
</p>
        <p>
The NLB worked as expected.
</p>
        <p>
 
</p>
        <h3>Lessons Learned
</h3>
        <p>
I’m a developer.  I started my IT career as a server and desktop administrator
but that was a long time ago.  So setting up a domain to test this scenario was
fun but I ran into a few unexpected problems.   Here are a couple things
that slowed me down.
</p>
        <ul>
          <li>
Installed DHCP and DNS with dynamic IP.  Make sure you assign a static IP address
to the virtual internal network card on the DC.  Actually now that I have assigned
static IP addresses to both of the TFS Servers, DHCP doesn’t even need to be installed. 
</li>
          <li>
I couldn’t reach SQL Server 2008 R2 from the TFS Servers.  I got an TF255049
error in the TFS configuration.  I installed the SQL Server Management Studio
and couldn’t connect using that.  I set up aliases and toggled named pipes on
and off.  Still couldn’t connect.  Finally I stumbled upon the network protocol
configuration for SQL.  TCP and Named Pipes were disabled.   Seems
very strange but probably a security precaution.  I enabled TCP/IP and it worked
perfect. 
</li>
        </ul>
        <p>
 
</p>
        <p>
          <strong>NLB Issue</strong>
        </p>
        <p>
I ran into an issue trying to configure NLB on Windows Server 2008 R2 using Hyper-V
</p>
        <blockquote>
          <p>
“The interface is misconfigured”
</p>
          <p>
Cluster IP address (IP) not added to TCPIP properties
</p>
          <p>
Dedicated IP address (IP) not added to TCPIP properties
</p>
        </blockquote>
        <p>
Fix is to enable MAC spoofing in the settings of each VM in Hyper-V.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/enable_mac_spoofing_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="enable_mac_spoofing" border="0" alt="enable_mac_spoofing" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SettingupaTeamFoundationServer2010Farmwi_EB10/enable_mac_spoofing_thumb.jpg" width="354" height="212" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Enjoy!
</p>
        <p>
Mike
</p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=2fb0b2ea-0953-4c38-9af6-99038dbb37dd" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Deliveron Updates &amp;ndash; January 2010</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/DeliveronUpdatesNdashJanuary2010.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,7004c120-d3f4-48df-8177-3ada3b03ef2d.aspx</id>
    <published>2010-01-30T00:23:00-06:00</published>
    <updated>2010-01-29T22:25:35.8215459-06:00</updated>
    <category term="Biztalk" label="Biztalk" scheme="http://codesmartnothard.com/CategoryView,category,Biztalk.aspx" />
    <category term="Deliveron" label="Deliveron" scheme="http://codesmartnothard.com/CategoryView,category,Deliveron.aspx" />
    <category term="SharePoint" label="SharePoint" scheme="http://codesmartnothard.com/CategoryView,category,SharePoint.aspx" />
    <category term="SQL Server 2008" label="SQL Server 2008" scheme="http://codesmartnothard.com/CategoryView,category,SQL%2BServer%2B2008.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
We have a lot of exciting things going on at Deliveron Consulting Services. I wanted
to post a few of the updates.
</p>
        <h3>Get Social with Deliveron 
</h3>
        <p>
          <a href="http://www.facebook.com/pages/Deliveron-Consulting-Services/92712059791" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="Deliveron Consulting Services on FaceBook" src="http://www.deliveron.com/Images/facebook_logo.png" width="32" height="32" />
          </a> 
Become a Facebook fan of Deliveron: <a title="http://www.facebook.com/pages/Deliveron-Consulting-Services/92712059791" href="http://www.facebook.com/pages/Deliveron-Consulting-Services/92712059791">http://www.facebook.com/pages/Deliveron-Consulting-Services/92712059791</a></p>
        <p>
          <a href="http://www.twitter.com/deliveron" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="" src="http://twitter-badges.s3.amazonaws.com/t_logo-a.png" width="32" height="32" />
          </a> 
Follow Deliveron on Twitter: <a href="http://www.twitter.com/deliveron">http://www.twitter.com/deliveron</a></p>
        <p>
 <a href="http://www.linkedin.com/groups?about=&amp;gid=2573249" target="_blank"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="Linked In" src="http://www.deliveron.com/Images/LinkedIn.png" /></a> 
Join the LinkedIn <a href="http://www.linkedin.com/groups?about=&amp;gid=2573249" target="_blank">Deliveron
Consulting Services Network</a> group.
</p>
        <p>
 
</p>
        <h3>Deliveron Website Updates
</h3>
        <p>
We have implemented a few website updates.  These include:
</p>
        <ul>
          <li>
            <a href="http://www.deliveron.com/consulting_services_jumpstart.htm" target="_blank">Deliveron
Jumpstart Solutions</a> including the TFS Jumpstart information and flyer. (I am very
excited about this!!) 
</li>
          <li>
            <a href="http://www.deliveron.com/about_us_thestory.htm" target="_blank">“The Deliveron
Story”</a>
          </li>
          <li>
            <a href="http://www.deliveron.com/consulting_services_focus.htm" target="_blank">Areas
of Expertise</a>
          </li>
          <li>
            <a href="http://www.deliveron.com/about_us_partners.htm" target="_blank">Our Partners</a> and <a href="http://www.deliveron.com/about_us_memberships.htm" target="_blank">Memberships</a></li>
        </ul>
        <p>
View the first edition of the <a href="http://www.deliveron.com/newsletters.htm" target="_blank">Deliveron
Monthly Newsletter</a>.  Sign up on the website to receive future newsletters
and announcements.
</p>
        <p>
 
</p>
        <h3>Upcoming Events
</h3>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>2/3</strong> – Omaha <em>SQL/BI User Group</em> - Solution Consultant Moe
Elatta from Deliveron will be presenting on <strong>SQL Server Reporting Services
2008 scale-out configuration and new charting enhancements</strong>. <a href="http://www.omahamtg.com/Default.aspx">Register
here...</a></p>
        <p>
          <strong>2/18</strong> - <em>MSDN Webinar</em> - <strong>Enhancing the Business Process
Automation Capabilities of SharePoint</strong><a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032441157&amp;EventCategory=4&amp;culture=en-US&amp;CountryCode=US">Register
here...</a></p>
        <p>
          <strong>2/25</strong> - <em>Lunch and Learn</em> - <strong>SharePoint Features You
Need</strong><a href="http://ant.to/training/event-registration/">Register here...</a></p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=7004c120-d3f4-48df-8177-3ada3b03ef2d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>InstallShield Limited Edition for Visual Studio 2010 Walkthrough</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/InstallShieldLimitedEditionForVisualStudio2010Walkthrough.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,be3fbe67-01ea-4f75-8a0a-ad14d9ddd302.aspx</id>
    <published>2010-01-05T00:28:00-06:00</published>
    <updated>2010-01-05T08:42:10.158375-06:00</updated>
    <category term="Team Build 2010" label="Team Build 2010" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BBuild%2B2010.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <category term="TFS 2010" label="TFS 2010" scheme="http://codesmartnothard.com/CategoryView,category,TFS%2B2010.aspx" />
    <category term="Visual Studio 2008" label="Visual Studio 2008" scheme="http://codesmartnothard.com/CategoryView,category,Visual%2BStudio%2B2008.aspx" />
    <category term="Visual Studio 2010" label="Visual Studio 2010" scheme="http://codesmartnothard.com/CategoryView,category,Visual%2BStudio%2B2010.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
To me there has always been a feeling a of excitement to be able to build an application
and then deliver it to someone that wants it. When I first started programming over
20 years ago with GW-BASIC on my Tandy 1000 EX, it was limiting that what I built
could only be run within GW-BASIC since it was an interpreted language environment
and not compiled. When I bought Quick Basic 4.5, I could finally compile my applications
into an EXE and run them outside of the interpreter. Then I felt like I hit the big
time when I was able to build my first setup package in Visual Basic 4. I remember
I built a Hello World caliber application and created a setup package that took 3
or 4 floppy disks. I didn’t think it could get any better than this :) Over the years
the the excitement about delivering applications became more from the what was built
and not how it would be delivered. Visual Studio has always included functional, no
frills setup projects. 3rd Party vendors have created easier to use and more power
tools for creating deployment projects such as InstallShield. Developers who didn’t
purchase a 3rd Party tool were limited to using the OOB (out of the box) setup projects
within Visual Studio. While this is functional, the developer has to know where and
how to do things and the usability is not very intuitive. It requires many steps to
creating a MSI that I have blogged about in <a href="http://codesmartnothard.com/DeploymentsWithTFSPart2HowToCreateAnAutomatedDeploymentMSI.aspx" target="_blank">Deployments
with TFS Part 2: How to create an automated deployment MSI</a>. In Visual Studio 2010
there is finally an easy to solution without purchasing an additional production.
</p>
        <p>
Last week I saw this post from Somasegar on <a href="http://blogs.msdn.com/somasegar/archive/2009/12/14/building-setup-and-deployment-packages-in-vs-2010.aspx" target="_blank">Building
setup and deployment packages in VS 2010</a>. Microsoft has partnered with Flexera,
makers of InstallShield to create InstallShield Limited Edition for Visual Studio
2010. This brings the InstallShield graphical interface to Visual Studio. In addition
to providing a highly intuitive interface for building setup packages, this product
allows setup packages to be built from with TFS Team Builds. This has been a major
pain point for automated deployments and SCM (Software Configuration Management) processes.
I downloaded and installed InstallShield 2010 LE and here is a walkthrough of the
tool.
</p>
        <h3>Download and Installation
</h3>
        <p>
Read Somasegar’s blog post on how to download and install it. (see link above)
</p>
        <p>
        </p>
        <h3>InstallShield 2010 LE Setup project
</h3>
        <p>
Once it is installed and you create a InstallShield Setup project, the Project Assignment
view is the default view. As you can see, the graphic is a guide that explains the
parts of the MSI and the steps to create the package. At the bottom of the screen
are the steps to the installation project. In addition to the steps at the bottom
of the guide, there are also intuitive steps to the right that keep all of the package
settings cleanly organized. 
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb.png" width="804" height="479" />
          </a>
        </p>
        <p>
This first step is to fill out the basic information about the application that is
going to be deployed.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_2.png" width="804" height="481" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
In the second step, required operating systems and prerequisite applications can be
specified and enforced when installing the application. Custom prerequisites can be
defined by choosing “Create a custom software condition” under “More Options”.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_10.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_4.png" width="804" height="481" />
          </a>
        </p>
        <p>
The installation Architecture section step is disabled in the Limited Edition. In
the other editions different features can be defined for users to choose what sections
they want installed.
</p>
        <p>
        </p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_12.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_5.png" width="804" height="481" />
          </a>
        </p>
        <p>
The next step is the Application Files. Here the application’s files can be added
to the installation. The “Add Project Outputs” is the primary button for adding the
application files. I found this dialog window to be a lot easier to use than the Visual
Studio setup project.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_14.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_6.png" width="804" height="481" />
          </a>
        </p>
        <p>
        </p>
        <p>
The Application Shortcuts step is where desktop and start menu shortcuts can be defined. 
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_18.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_8.png" width="804" height="481" />
          </a>
        </p>
        <p>
If the application requires any registry entries, they can be defined in the Application
Registry step.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_20.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_9.png" width="804" height="481" />
          </a>
        </p>
        <p>
The last step is the Installation Interview. This step asks a series of questions
that drive what dialogs the user running the installation will see. Custom dialogs
are not supported in the InstallShield Limited Edition. Custom dialogs are supported
in the Visual Studio setup projects. For the automated deployment MSIs, I create a
dialog that allows the user to specify the environment.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_22.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_10.png" width="804" height="481" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Custom Actions are non-standard activities that can be performed at different points
of the installation process. The Limited Edition supports VBScript, JScript, and Exe
custom actions. However, as shown in the following image, there are only a couple
points in the process where custom actions can be defined. The Premier and Professional
editions also support InstallScript, a powerful scripting tool to create more advanced
customizations to the installation process.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_26.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_12.png" width="804" height="481" />
          </a>
        </p>
        <p>
After I built the MSI, I ran package to install it. Users will see this message box
that the installation was created with a beta version of InstallShield. 
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_23.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_1.png" width="404" height="152" />
          </a>
        </p>
        <h3>InstallShield 2010 LE for Visual Studio 2008
</h3>
        <p>
The InstallShield 2010 LE Installation also installs a version that works within Visual
Studio 2008. This interface looks the same in Visual Studio 2008 as it does in Visual
Studio 2010.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_15.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/InstallShieldLimitedEditionforVisualStud_B816/image_thumb_3.png" width="640" height="484" />
          </a>
        </p>
        <h3>
        </h3>
        <h3>Building MSIs with Team Build 2010
</h3>
        <p>
This is the feature I am most looking forward to in InstallShield 2010 LE. Standard
Visual Studio 2008 setup projects can not be built within Team Build without some
tricks. Unfortunately TFS Source Control and Team Build integration is not available
in this beta version. I verified this with Flexera. They are currently working on
it. As soon as an updated version is available with this enabled I will do a follow
up post detailing the TFS Source Control and Team Build experience. I’m interested
to see the following in action:
</p>
        <ul>
          <li>
Triggering a build and having the MSI compile with the updated assemblies.</li>
          <li>
Curious to see if the InstallShield Setup project build can detect new dependencies
added. My tests will include adding a reference to the primary output application.
Then do a new build to see if the MSI will automatically include it. It might be expecting
too much but this would be very beneficial.</li>
        </ul>
        <p>
        </p>
        <p>
        </p>
        <h3>Overall
</h3>
        <ul>
          <li>
The Project Assistant is a very simple to use series of steps to create a complete
setup project. As users feel more comfortable with the too, they will probably jump
to the specific screens they are looking for in the navigation pane on the right.
Both are highly intuitive and significant improvements over the the standard Visual
Studio setup projects. 
</li>
          <li>
Most things that are supported in the standard Visual Studio setup project can be
accomplished with InstallShield 2010 Limited Edition. For most installation packages,
these limitations will not be problem. However, I will not be able to create automated
deployment MSIs because of the limitations of no custom dialogs and not being able
to create custom properties. 
</li>
          <li>
Being able to rebuild the MSIs during each Team Build is a huge benefit. Once this
feature is available, I think it will become my favorite feature. 
</li>
          <li>
I believe Microsoft and Flexera will both win with this product. Microsoft’s Visual
Studio 2010 will include an improved tool for creating installation packages without
having to reinvent the wheel. Flexera has built an amazing and easy to use product
that will work for the majority of scenarios, but many will want to upgrade to the
Express, Professional, or Premier editions to get the full power of InstallShield.</li>
          <li>
The final product should be great, but this beta version is not ready to be used for
more than evaluation purposes. Between the beta message box that is displayed when
the user installs it and the fact that the TFS Source Control and Team Build integration
features are not available yet, I recommend waiting until the final version is released. 
</li>
        </ul>
        <p>
Mike
</p>
        <p>
        </p>
        <p>
          <a href="http://www.deliveron.com" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" src="http://www.codesmartnothard.com/images/deliveron_banner.gif" />
          </a>
        </p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=be3fbe67-01ea-4f75-8a0a-ad14d9ddd302" />
      </div>
    </content>
  </entry>
  <entry>
    <title>The Biggest Little Features in Team Build 2010</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/TheBiggestLittleFeaturesInTeamBuild2010.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,037fa71c-4188-4e48-93e2-64fb0d6ba9a4.aspx</id>
    <published>2009-12-12T06:10:00-06:00</published>
    <updated>2009-12-12T00:12:52.7671193-06:00</updated>
    <category term="Team Build" label="Team Build" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BBuild.aspx" />
    <category term="Team Build 2010" label="Team Build 2010" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BBuild%2B2010.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <category term="TFS 2010" label="TFS 2010" scheme="http://codesmartnothard.com/CategoryView,category,TFS%2B2010.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
There is a lot of information about the major updates of TFS 2010 and Team Build 2010
including changing from MSBuild to Workflow and Gated Check-Ins to name a couple. 
In using TFS and Team Build 2010 beta 2, there are a lot little features and improvements
that help make these two products complete and polished.  Here are a few of the
features and I keep discovering new ones each time I use it.
</p>
        <p>
 
</p>
        <h3>New Build Definition will default name and solution to build
</h3>
        <p>
if you have a solution open in Visual Studio 2010 when you create a new build definition,
the build name will default to the solution name.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_thumb.png" width="454" height="79" />
          </a>
        </p>
        <p>
 
</p>
        <p>
An open solution will also automatically be populated as the Project to Build
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_thumb_1.png" width="584" height="60" />
          </a>
        </p>
        <p>
 
</p>
        <h3>The build retention policy is not set to “Keep All” by default.
</h3>
        <p>
Finally, the default retention policy for the builds is not set to “Keep All” anymore. 
Primarily all results will default to keep the last 10 builds.  In Visual Studio
2008, I always recommended that this should be changed.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_thumb_2.png" width="504" height="214" />
          </a>
        </p>
        <p>
 
</p>
        <h3>TFS Build notifies you about successful and failed builds
</h3>
        <p>
The Team Foundation Build Notification tool used to be part of the power tools. 
Now it is included with the standard installation and alerts you to the success or
failure of the build.   This supports continuous integration and gated check-in
builds.  The notification dialog window also has an option for unshelving failed
gated check-ins.
</p>
        <p>
This dialog displays for a successful Gated Check-in build
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/GatedCheckinResults_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="GatedCheckinResults" border="0" alt="GatedCheckinResults" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/GatedCheckinResults_thumb.jpg" width="244" height="104" />
          </a>
        </p>
        <p>
 
</p>
        <p>
This dialog is display when a Gated Check-In fails.  Notice the Unshelve Changes
option to retrieve the changeset that was be attempted to be checked-in.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/FailedGatedCheckin_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="FailedGatedCheckin" border="0" alt="FailedGatedCheckin" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/FailedGatedCheckin_thumb.jpg" width="244" height="105" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <h3>Build Parameters are now strongly typed and visible
</h3>
        <p>
In Team Build 2008, parameters could be passed in to a build when it was being queued.  
However the format was command line argument style passed into a textbox similar to
this:
</p>
        <blockquote>
          <p>
/p:IsThisCool=”false”
</p>
        </blockquote>
        <p>
In Team Build 2010, the build parameters are displayed as strongly typed properties.  
This will allow for type checking and eliminate the misspelling of parameters.
</p>
        <p>
          <a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/SomeoftheLittleImprovementsinTFS2010_14771/image_thumb_3.png" width="454" height="253" />
          </a>
        </p>
        <p>
 
</p>
        <p>
Enjoy all of the great new features in Team Build 2010 including these smaller but
helpful features!
</p>
        <p>
Mike
</p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=037fa71c-4188-4e48-93e2-64fb0d6ba9a4" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Steps to Modify a Work Item Template in Team Foundation Server 2008</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/StepsToModifyAWorkItemTemplateInTeamFoundationServer2008.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,8c1db28a-5d38-49d1-b416-53345fbfec04.aspx</id>
    <published>2009-11-27T10:56:00-06:00</published>
    <updated>2009-11-27T08:15:26.56575-06:00</updated>
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <content type="html">&lt;p&gt;
Earlier this week at the Omaha Team System User Group someone asked about how to add
new statuses to a work item in TFS. I mentioned I had the steps documented that I
would send him. After reviewing the steps I thought it would be useful if I posted
this for everyone. 
&lt;/p&gt;
&lt;h3&gt;Download and Install the TFS Power Tools
&lt;/h3&gt;
&lt;p&gt;
Unless you prefer editing XML and running command line utilities to GUI editing, the
first thing you should do is download the latest edition of TFS Power Tools. The Power
Tools are a must have Team Foundation Server add-on that Microsoft has used to add
functionality since the release of TFS Power Tools. There has been several updates
with October 2008 being the latest release. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBD14EEA-781F-45A1-8C46-9F6BA2F68BF0&amp;displaylang=en" target="_blank"&gt;Download
Visual Studio Team System 2008 Team Foundation Server Power Tools - October 2008 Release&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Work Item Template Process Editor
&lt;/h3&gt;
&lt;p&gt;
After the TFS Power Tools are installed, Process Editor is now available under the
Tools menu item.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb.png" width="644" height="245" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3&gt;Opening a Work Item Template for One Team Project 
&lt;/h3&gt;
&lt;p&gt;
To edit a Work Item Template (WIT) there are a couple options. To modify the template
for one project, you can open the WIT directly from the project, edit it, and save
it back to that project by choosing the “Open WIT from Server” option. 
&lt;br /&gt;
When you choose “Open WIT from Server”, it will display a dialog with all of the team
projects and the templates. In this example, the Bug WIT from the SampleScrum template
is chosen.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_1.png" width="264" height="311" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3&gt;Opening a Work Item Template for Multiple Team Projects
&lt;/h3&gt;
&lt;p&gt;
To edit a WIT for multiple team projects, you will want to export the template to
a file, edit the changes and then import that change into each of the team projects. 
&lt;br /&gt;
To Export the WIT, choose Export WIT. This displays the dialog to select the WIT.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_2.png" width="264" height="311" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Save the WIT to a location on your local machine.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_3.png" width="454" height="336" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
It will prompt you if you would like to include the Global List definition. You can
choose No. 
&lt;br /&gt;
Next open the saved WIT by choosing “Open WIT from File” and selecting the saved file
(Bug.xml). 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3&gt;Editing the Work Item Template 
&lt;/h3&gt;
&lt;p&gt;
The Work Item Template Editor has three tabs. In this example we don’t change any
of the fields or the layout of the work item, so we can ignore these tabs.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_4.png" width="644" height="320" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
To add statuses to the Work Item, we will modify the Workflow tab. Adding a status
is more than just adding the option to a list. The statuses of a work item are part
of the workflow. Basically each status is only available when it is enabled in the
workflow. For example, you might have a “Fixed” status and a “In Test” status. In
the workflow, you can define it so that “In Test” won’t be available to select until
it has been marked “Fixed” first.
&lt;/p&gt;
&lt;p&gt;
Here is an example of the workflow tab
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_5.png" width="644" height="271" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The different Statuses in Red and the arrows show the flow of one status to the next.
Once it is decided when the new statuses will appear and what statuses will be available
after the new status, we can add the statuses and connect them to the other statuses.
&lt;/p&gt;
&lt;p&gt;
Add a Status by selecting the State item in the Toolbox (if the Toolbox is not visible,
choose View -&gt; Toolbox from the menu.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_14.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_6.png" width="424" height="176" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Drag the State item to the canvas in an area where it will be easier to connect it
to the other States. If the workflow becomes cluttered, you can right click on it
and choose “Reset Layout”
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_16.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_7.png" width="160" height="148" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
When you have added the status to the canvas it will look similar to this
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_8.png" width="133" height="49" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Give the status a name by typing over the State1 text
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_20.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_9.png" width="120" height="46" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Now, connect this to the previous status. For this example the bug will go from “In
Progress” to “Fixed” to “Ready For Test”. Do this by clicking on the Transaction Link
from the Toolbox, this will change your cursor to the link cursor. Click and hold
on the starting Status and drag the line to the target Status. This will add the line
between the two and create a Transition box.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_22.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_10.png" width="360" height="237" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
For the new status to be valid, you must give the Transition a Reason. This is just
a textual explanation why it would move to this status from the previous. Expand the
Transition box so it shows the Reasons, Actions, and Fields. Right click on the box
and choose “Open Details”. A Workflow Transition dialog box will display. Choose the
Reasons tab and modify the Value to display the text you would like.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_24.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_11.png" width="324" height="193" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Add a second Transaction Link from the new status (Fixed) to the Target status (Ready
for Retest) and give it a reason. 
&lt;br /&gt;
Once this is added, you can validate your workflow by right clicking on the canvas
and choosing “Validate All”.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_26.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_12.png" width="124" height="104" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
If there are any errors in the validation they will be displayed in the Error List.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_28.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_13.png" width="324" height="236" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
If there are no errors the Output tab will look similar to this
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_30.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_14.png" width="644" height="157" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Click the save button in the toolbar to save the WIT. If you have opened the WIT from
the server then this saves it back to the Team Project and is available. If this was
a File then you must import it into the appropriate Team Project(s). 
&lt;br /&gt;
To Import the Work Item Template, choose “Import WIT” from the menu. This dialog will
display. Select the file that was edited (Bug.xml) and then select the team project
and click OK.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_32.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_15.png" width="284" height="201" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Repeat to add to the other Team Projects.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h3&gt;Applying Change to Process Template
&lt;/h3&gt;
&lt;p&gt;
&lt;br /&gt;
Now that the work item is modified, if you want this change to be in new projects
created you must update the source and re-upload the templates. 
&lt;br /&gt;
Copy the bug.xml and bug.wit to the source template folder on the TFS Server. The
Default location is 
&lt;br /&gt;
&lt;strong&gt;C:\Program Files\Conchango\Scrum for Team System\ProcessTemplate\AgileSoftwareDevelopmentwithScrum\WorkItemTracking\TypeDefinitions&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_34.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_16.png" width="644" height="325" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
To upload the template, right click on the TFS root node in the Team Explorer and
choose “Process Template Manager”.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_36.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_17.png" width="324" height="196" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
A dialog will display that contains a list of the installed templates. Click on the
Upload and browse to: 
&lt;br /&gt;
&lt;strong&gt;C:\Program Files\Conchango\Scrum for Team System\ProcessTemplate\AgileSoftwareDevelopmentwithScrum&lt;/strong&gt; 
&lt;br /&gt;
Open the &lt;strong&gt;ProcessTemplate.xml&lt;/strong&gt; file.
&lt;/p&gt;
&lt;p&gt;
It will next prompt you if you want to overwrite. Choose &lt;strong&gt;Yes&lt;/strong&gt; and
it will upload the changes. If you do not wish to overwrite it, then you must change
the name by opening the same ProcessTemplate.xml with the Process Editor.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_38.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://codesmartnothard.com/content/binary/WindowsLiveWriter/StepstoModifyaWorkItemTemplateinTeamFoun_13BA0/image_thumb_18.png" width="424" height="158" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
That completes the steps to modify the Work Item Templates, apply the changes to one
or multiple team projects, and also back to the template for future projects created
with the the process template.
&lt;/p&gt;
&lt;p&gt;
Mike
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.deliveron.com" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" src="http://www.codesmartnothard.com/images/deliveron_banner.gif" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=8c1db28a-5d38-49d1-b416-53345fbfec04" /&gt;</content>
  </entry>
  <entry>
    <title>Presentation Slides for Getting Agile with TFS 2010</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/PresentationSlidesForGettingAgileWithTFS2010.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,91bd0cf5-adba-4ee1-bd5d-aa3002cd2102.aspx</id>
    <published>2009-11-26T23:54:00-06:00</published>
    <updated>2009-11-26T21:06:49.9095-06:00</updated>
    <category term="Agile" label="Agile" scheme="http://codesmartnothard.com/CategoryView,category,Agile.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <category term="TFS 2010" label="TFS 2010" scheme="http://codesmartnothard.com/CategoryView,category,TFS%2B2010.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here are the updated slides for my Getting Agile with TFS 2010 presentation. 
I gave this presentation for two lunch and learns at ANT and then earlier this week
at the Omaha Team System User Group meeting.  I had a great time giving this
presentation multiple times.   Thanks everyone that attended these talks.  
</p>
        <p>
          <a href="http://www.codesmartnothard.com/content/binary/agile_vsts2010.zip" target="_blank">Getting
Agile with TFS 2010 Presentation Slides</a>
        </p>
        <p>
Mike
</p>
        <p>
 
</p>
        <p>
          <a href="http://www.deliveron.com" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" src="http://www.codesmartnothard.com/images/deliveron_banner.gif" />
          </a>
        </p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=91bd0cf5-adba-4ee1-bd5d-aa3002cd2102" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Getting Agile with Team Foundation Server 2010 Talks in November</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/GettingAgileWithTeamFoundationServer2010TalksInNovember.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,9c730057-1a0a-4f5e-964d-9188ca1533bb.aspx</id>
    <published>2009-11-03T03:42:00-06:00</published>
    <updated>2009-11-02T23:43:15.0345-06:00</updated>
    <category term="Agile" label="Agile" scheme="http://codesmartnothard.com/CategoryView,category,Agile.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <category term="TFS 2010" label="TFS 2010" scheme="http://codesmartnothard.com/CategoryView,category,TFS%2B2010.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am going to giving two <em>Getting Agile with Team Foundation Server 2010</em> talks
in November, both in Omaha, NE.  On Thursday November 12th, I will be giving
the talk for a lunch and learn at Advanced Network Technologies.  You can register
for the event <a href="http://anttraining.com/about/events/" target="_blank">here</a>. 
On November 24th, I will be giving the talk at the <a href="http://www.otsug.org" target="_blank">Omaha
Team System User Group</a> Meeting.  <a href="http://www.otsug.org/Events/tabid/59/ModuleID/377/ItemID/2/mctl/EventDetails/Default.aspx" target="_blank">Here</a> is
more information about the event and registration instructions.
</p>
        <p>
This is the same talk as the one I gave at the <a href="http://www.heartlanddc.com/omaha/default.aspx" target="_blank">Heartland
Developer Conference</a> in October but I will be using Beta 2 for these two. 
Here’s some more details on the presentation and myself.  I look forward to seeing
everyone there.
</p>
        <p>
          <strong>Presentation: Getting Agile with TFS 2010</strong>
        </p>
        <p>
This presentation will demonstrate a complete two week scrum iteration from the planning
meeting to development, testing, and bug fixing to deployment utilizing the features
found in Team Foundation Server 2010. New features include gated check-ins for Continuous
Integration (CI), Test-Driven Development (TDD), Product Backlog enhancements including
hierarchical views and support for multiple teams to work from a single backlog. The
presentation also demonstrates the enhancements to the TFS Portal and Web Access to
support Agile planning and displaying graphs such as burn-down charts. Each walk through
includes a live demonstration of the feature in Visual Studio 2010.
</p>
        <p>
          <strong>Speaker: Mike Douglas, <a href="http://www.deliveron.com" target="_blank">Deliveron
Consulting Services</a></strong>
        </p>
        <p>
Mike Douglas is a Solution Consultant at Deliveron Consulting Services where he provides
end-to-end solutions and TFS installation, configuration, and custom development for
clients.  He has over 11 years experience building enterprise level applications
on a variety of .NET technologies including WCF, Web Services, ASP.NET, Disconnected
Smart Clients and Data Synchronization, BizTalk, and Team Foundation Server. 
Mike enjoys trying to keep up with the constant change and evolution of .NET. 
Mike is an experienced presenter having spoken at several Omaha .NET User Group meetings
on <a href="http://www.lhotka.net/cslanet/Default.aspx" target="_blank">CSLA.NET</a>,
Subsonic, and TFS.  He also spoke at the 2008 ESRI International User Conference
on a GIS integration project he helped lead. Mike actively maintains the open source
project, <a href="http://teamdeploy.codeplex.com/" target="_blank">Team Deploy</a>,
on CodePlex for deploying MSIs using Team Foundation Server.  Mike also enjoys
sharing his experiences in Code Generation, CSLA.NET, and TFS on his blog at <a href="http://www.codesmartnothard.com/" target="_blank">www.CodeSmartNotHard.com</a>.
</p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=9c730057-1a0a-4f5e-964d-9188ca1533bb" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Visual Studio and TFS 2010 Beta 2 Linkapalooza</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/VisualStudioAndTFS2010Beta2Linkapalooza.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,1c65d1e7-4795-46ae-9ddc-8a5e51440227.aspx</id>
    <published>2009-10-20T17:42:00-05:00</published>
    <updated>2009-10-20T15:03:44.0625-05:00</updated>
    <category term="TFS 2010" label="TFS 2010" scheme="http://codesmartnothard.com/CategoryView,category,TFS%2B2010.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Visual Studio 2010 and TFS 2010 beta 2 were just released on Monday and there is already
an incredible amount of information available.   It is hard to keep up with
all of the information.   I created a list of some of the links to posts
and downloads I have found and others have tweeted about.  I’m sure I missed
some.  Let me know if there are any links I missed that you want me to add to
the list.
</p>
        <h3>Downloads
</h3>
        <p>
Download Visual Studio 2010 Beta 2 
<br /><a title="http://msdn.microsoft.com/en-us/default.aspx" href="http://msdn.microsoft.com/en-us/default.aspx">http://msdn.microsoft.com/en-us/default.aspx</a></p>
        <p>
Visual Studio 2010 and .NET Framework 4 Training Kit - October Preview 
<br /><a title="http://www.microsoft.com/downloads/details.aspx?familyid=752CB725-969B-4732-A383-ED5740F02E93&amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?familyid=752CB725-969B-4732-A383-ED5740F02E93&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?familyid=752CB725-969B-4732-A383-ED5740F02E93&amp;displaylang=en</a></p>
        <p>
Team Foundation Installation Guide for Visual Studio Team System 2010 (Updated) 
<br /><a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=2d531219-2c39-4c69-88ef-f5ae6ac18c9f" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=2d531219-2c39-4c69-88ef-f5ae6ac18c9f">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=2d531219-2c39-4c69-88ef-f5ae6ac18c9f</a></p>
        <p>
Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team
Foundation Server 2010 (Installer) 
<br /><a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=cf13ea45-d17b-4edc-8e6c-6c5b208ec54d" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=cf13ea45-d17b-4edc-8e6c-6c5b208ec54d">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=cf13ea45-d17b-4edc-8e6c-6c5b208ec54d</a></p>
        <h3> 
</h3>
        <h3>Multimedia 
</h3>
        <p>
10-4 Episode 33: Downloading and Installing Visual Studio 2010 Beta 2 
<br /><a href="http://channel9.msdn.com/shows/10-4/10-4-Episode-33-Downloading-and-Installing-Visual-Studio-2010-Beta-2/">http://channel9.msdn.com/shows/10-4/10-4-Episode-33-Downloading-and-Installing-Visual-Studio-2010-Beta-2/</a></p>
        <p>
Radio TFS - The Ultimate Announcement Show 
<br /><a title="http://www.radiotfs.com/2009/10/19/TheUltimateAnnouncementShow.aspx" href="http://www.radiotfs.com/2009/10/19/TheUltimateAnnouncementShow.aspx">http://www.radiotfs.com/2009/10/19/TheUltimateAnnouncementShow.aspx</a></p>
        <p>
 
</p>
        <h3>Visual Studio Blog Posts
</h3>
        <p>
Somasegar - Announcing Visual Studio 2010 and .NET FX 4 Beta 2 
<br /><a title="http://blogs.msdn.com/somasegar/archive/2009/10/19/announcing-visual-studio-2010-and-net-fx-4-beta-2.aspx" href="http://blogs.msdn.com/somasegar/archive/2009/10/19/announcing-visual-studio-2010-and-net-fx-4-beta-2.aspx">http://blogs.msdn.com/somasegar/archive/2009/10/19/announcing-visual-studio-2010-and-net-fx-4-beta-2.aspx</a></p>
        <p>
Scott Guthrie - VS 2010 and .NET 4.0 Beta 2 
<br /><a title="http://weblogs.asp.net/scottgu/archive/2009/10/19/vs-2010-and-net-4-0-beta-2.aspx" href="http://weblogs.asp.net/scottgu/archive/2009/10/19/vs-2010-and-net-4-0-beta-2.aspx">http://weblogs.asp.net/scottgu/archive/2009/10/19/vs-2010-and-net-4-0-beta-2.aspx</a></p>
        <p>
Shai Raiten - Historical Debugger Is Now –&gt; IntelliTrace And Much More 
<br /><a title="http://blogs.microsoft.co.il/blogs/shair/archive/2009/10/20/historical-debugger-is-now-gt-intellitrace-and-much-more.aspx" href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/10/20/historical-debugger-is-now-gt-intellitrace-and-much-more.aspx">http://blogs.microsoft.co.il/blogs/shair/archive/2009/10/20/historical-debugger-is-now-gt-intellitrace-and-much-more.aspx</a></p>
        <p>
Jeff Bramwell - Visual Studio 2010 – Beta 2 Released 
<br /><a title="http://devmatter.blogspot.com/2009/10/visual-studio-2010-beta-2-released.html" href="http://devmatter.blogspot.com/2009/10/visual-studio-2010-beta-2-released.html">http://devmatter.blogspot.com/2009/10/visual-studio-2010-beta-2-released.html</a></p>
        <p>
Duke Kamstra - What’s new for Data Dude in Visual Studio 2010? 
<br /><a title="http://blogs.msdn.com/vstsdb/archive/2009/10/19/what-s-new-for-data-dude-in-visual-studio-2010.aspx" href="http://blogs.msdn.com/vstsdb/archive/2009/10/19/what-s-new-for-data-dude-in-visual-studio-2010.aspx">http://blogs.msdn.com/vstsdb/archive/2009/10/19/what-s-new-for-data-dude-in-visual-studio-2010.aspx</a></p>
        <p>
Emil Protalinski - Visual Studio 2010 simplified to four SKUs, Beta 2 arrives 
<br /><a title="http://arstechnica.com/microsoft/news/2009/10/visual-studio-2010-simplified-to-four-skus-beta-2-arrives.ars" href="http://arstechnica.com/microsoft/news/2009/10/visual-studio-2010-simplified-to-four-skus-beta-2-arrives.ars">http://arstechnica.com/microsoft/news/2009/10/visual-studio-2010-simplified-to-four-skus-beta-2-arrives.ars</a></p>
        <p>
Jeff Beehler - “Going live” with Visual Studio 2010 Beta 2 
<br /><a title="http://blogs.msdn.com/jeffbe/archive/2009/10/19/going-live-with-visual-studio-2010-beta-2.aspx" href="http://blogs.msdn.com/jeffbe/archive/2009/10/19/going-live-with-visual-studio-2010-beta-2.aspx">http://blogs.msdn.com/jeffbe/archive/2009/10/19/going-live-with-visual-studio-2010-beta-2.aspx</a></p>
        <h3> 
</h3>
        <h3>TFS Blog Posts
</h3>
        <p>
Buck Hodges - TFS 2010 server licensing: It's included in MSDN subscriptions 
<br /><a title="http://blogs.msdn.com/buckh/archive/2009/10/20/tfs-2010-server-licensing-it-s-included-in-msdn-subscriptions.aspx" href="http://blogs.msdn.com/buckh/archive/2009/10/20/tfs-2010-server-licensing-it-s-included-in-msdn-subscriptions.aspx">http://blogs.msdn.com/buckh/archive/2009/10/20/tfs-2010-server-licensing-it-s-included-in-msdn-subscriptions.aspx</a></p>
        <p>
Allen Clark - Enabling New Application Lifecycle Management Features for Visual Studio
2010 Beta 2 in Upgraded Team Projects 
<br /><a title="http://blogs.msdn.com/allclark/archive/2009/10/13/enabling-new-application-lifecycle-management-features-for-visual-studio-2010-beta-2-in-upgraded-team-projects.aspx" href="http://blogs.msdn.com/allclark/archive/2009/10/13/enabling-new-application-lifecycle-management-features-for-visual-studio-2010-beta-2-in-upgraded-team-projects.aspx">http://blogs.msdn.com/allclark/archive/2009/10/13/enabling-new-application-lifecycle-management-features-for-visual-studio-2010-beta-2-in-upgraded-team-projects.aspx</a></p>
        <p>
Martin Hinshelwood - Installing Visual Studio 2010 Team Foundation Server on Windows
Vista in 3 minutes 
<br /><a title="http://blog.hinshelwood.com/archive/2009/10/20/installing-visual-studio-2010-team-foundation-server-on-windows-vista.aspx" href="http://blog.hinshelwood.com/archive/2009/10/20/installing-visual-studio-2010-team-foundation-server-on-windows-vista.aspx">http://blog.hinshelwood.com/archive/2009/10/20/installing-visual-studio-2010-team-foundation-server-on-windows-vista.aspx</a></p>
        <p>
Martin Hinshelwood - Configuring Visual Studio 2010 Team Foundation Server on Vista
in 12 minutes 
<br /><a title="http://blog.hinshelwood.com/archive/2009/10/20/configuring-visual-studio-2010-team-foundation-server-on-vista-in.aspx" href="http://blog.hinshelwood.com/archive/2009/10/20/configuring-visual-studio-2010-team-foundation-server-on-vista-in.aspx">http://blog.hinshelwood.com/archive/2009/10/20/configuring-visual-studio-2010-team-foundation-server-on-vista-in.aspx</a></p>
        <p>
Compatibility Matrix for 2010 Beta 2 Team Foundation Server to Team Explorer 2008
and 2005 
<br /><a title="http://blogs.msdn.com/teams_wit_tools/archive/2009/10/19/compatibility-matrix-for-2010-beta-2-team-foundation-server-to-team-explorer-2008-and-2005.aspx" href="http://blogs.msdn.com/teams_wit_tools/archive/2009/10/19/compatibility-matrix-for-2010-beta-2-team-foundation-server-to-team-explorer-2008-and-2005.aspx">http://blogs.msdn.com/teams_wit_tools/archive/2009/10/19/compatibility-matrix-for-2010-beta-2-team-foundation-server-to-team-explorer-2008-and-2005.aspx</a></p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=1c65d1e7-4795-46ae-9ddc-8a5e51440227" />
      </div>
    </content>
  </entry>
  <entry>
    <title>#HDC09 Agile with VSTS 2010 Presentation Slides</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/HDC09AgileWithVSTS2010PresentationSlides.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,14402f59-aa73-4194-bfe6-a4953e3d5701.aspx</id>
    <published>2009-10-20T04:15:00-05:00</published>
    <updated>2009-10-19T23:18:06.484375-05:00</updated>
    <category term="Agile" label="Agile" scheme="http://codesmartnothard.com/CategoryView,category,Agile.aspx" />
    <category term="HDC" label="HDC" scheme="http://codesmartnothard.com/CategoryView,category,HDC.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <category term="TFS 2010" label="TFS 2010" scheme="http://codesmartnothard.com/CategoryView,category,TFS%2B2010.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here are the slides from my<em> An Iteration in the Life of an Agile Team with Team
System 2010</em> talk at the 2009 Heartland Developer Conference.  Thanks for
everyone that attended.  I had a great time giving the talk and at the rest of
the conference.
</p>
        <p>
          <a title="http://www.codesmartnothard.com/content/binary/agile_vsts2010.zip" href="http://www.codesmartnothard.com/content/binary/agile_vsts2010.zip">http://www.codesmartnothard.com/content/binary/agile_vsts2010.zip</a>
        </p>
        <p>
If you didn’t get a chance to attend my talk, I am going to be giving the presentation
again (This time with beta 2!) at the next Omaha Team System User Group meeting on
November 24th.  Check out the <a href="http://www.otsug.org/" target="_blank">Omaha
Team System User Group</a> website for more details. 
</p>
        <p>
Thanks!
</p>
        <p>
Mike
</p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=14402f59-aa73-4194-bfe6-a4953e3d5701" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Deployments with TFS Part 3: Deploying MSIs to PCs and Servers</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/DeploymentsWithTFSPart3DeployingMSIsToPCsAndServers.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,14e33dfd-20a1-4f39-bce2-43117e3bc779.aspx</id>
    <published>2009-09-26T13:16:00-05:00</published>
    <updated>2009-09-26T09:03:40.0155-05:00</updated>
    <category term="Team Build" label="Team Build" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BBuild.aspx" />
    <category term="Team Deploy" label="Team Deploy" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BDeploy.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
In <a href="http://codesmartnothard.com/ct.ashx?id=3d0434dc-2673-4c21-a186-f1f1ed281164&amp;url=http%3a%2f%2fcodesmartnothard.com%2fPermaLink%2cguid%2cf7709611-30b9-42d4-9474-e67cb6bc75b1.aspx">Part
1: The Deployment Process Should Enforce Good Configuration Management Practices</a>,
I gave some background on my experiences and how the configuration management process
has evolved and some rules and benefits to the automated deployment MSIs.
</p>
        <p>
In <a href="http://codesmartnothard.com/PermaLink,guid,3d0434dc-2673-4c21-a186-f1f1ed281164.aspx" target="_blank">Part
2: How to create an automated deployment MSI</a>, I walked through the steps to create
an automated deployment MSI in Visual Studio satisfying the rules from Part 1.
</p>
        <p>
In Part 3, I am going to walk through the steps to install Team Deploy.  Then
walk through creating a team build, configure Team Deploy, and deploy a MSI with it.  
</p>
        <p>
There is also a great <a href="http://www.noblegroupinternational.com/content/alm/teamdeploy/TeamDeploy.html" target="_blank">Screencast
by Ian Ceicys</a> walking through the entire process of installing TFS, WIX, Team
Deploy and deploying a MSI.  I highly recommend watching this.
</p>
        <h3>Installing PS Tools
</h3>
        <ul>
          <li>
Team Deploy uses the free PSExec and PSKill utilities by Sysinternals (owned by Microsoft). 
PSExec allows you to remotely run any command and PSKill can kill any process on a
local or remote machine.</li>
          <li>
Download PSTools at <a title="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx" href="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx">http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx</a> and
install to a local folder.  I also recommend renaming psexec and pskill to something
like psexec2.exe.  Some anti-virus software sees these files as a risk.</li>
        </ul>
        <p>
 
</p>
        <h3>Installing Team Deploy
</h3>
        <ul>
          <li>
Browse to the Team Deploy website on CodePlex at <a href="http://TeamDeploy.CodePlex.com">http://TeamDeploy.CodePlex.com</a></li>
          <li>
Click on the Downloads and download the TeamDeploy.MSI.</li>
          <li>
Run the MSI to install Team Deploy to c:\Program Files\MSBuild\TeamDeploy</li>
          <li>
The windows service account that runs Team Build on the build server will need to
be a local administrator on all target machines.</li>
        </ul>
        <h3> 
</h3>
        <h3>Creating a Team Deploy TFS Build
</h3>
        <ul>
          <li>
In Team Explorer, create a new build in your Team Project by right clicking on Builds
and choosing “New Build Definition”</li>
        </ul>
        <p>
          <img title="New Build Definition" alt="New Build Definition" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=teamdeploy&amp;DownloadId=80206" />
        </p>
        <p>
 
</p>
        <ul>
          <li>
Give it a name such as “Build and Deploy”</li>
        </ul>
        <ul>
          <li>
Create a workspace (Cloak other folders in your project that don’t need to be part
of the build. This helps the speed up your build because otherwise the server will
try to get all source files in the project)</li>
        </ul>
        <ul>
          <li>
Leave Project File name as is but click on the “Create” button to create a new TFSBuild.proj
file. 
</li>
        </ul>
        <ul>
          <li>
Next choose the solution you want to build, then the configuration type. I recommend
leaving the default. 
</li>
        </ul>
        <ul>
          <li>
Choose any options that you want to enable for running tests and/or code analysis.
I would recommend leaving these unchecked for now and once you verify everything is
working then go back and enable the options you want.</li>
        </ul>
        <ul>
          <li>
In TFS 2008, you can choose retention policies. This will help prevent builds from
filling up your server disk space quickly. I usually choose Keep 7 latest.</li>
        </ul>
        <ul>
          <li>
the next options are for the Build Defaults. Choose the appropriate build agent. If
unsure, just leave the default. Then choose the share where you want to copy the staging
files.</li>
        </ul>
        <ul>
          <li>
The last option is “Trigger”. The "build and deploy" build should be separate
from the continuous integration build. I recommend leaving the default “Check-ins
do not trigger a new build”.</li>
        </ul>
        <p>
 
</p>
        <p>
          <img title="Build Trigger" alt="Build Trigger" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=teamdeploy&amp;DownloadId=80218" />
        </p>
        <p>
 
</p>
        <ul>
          <li>
Finally click “OK” to create the build type.</li>
        </ul>
        <br />
Creating the build definition will create the TFSBuild.proj that contains the basic
options that were selected in the wizard. The following steps will customize the TFSBuild.proj
file created. This file is a Xml file based on MSBuild. 
<ul><li>
To modify the TFSBuild.proj file, located the file under Source Control -&gt; $/YourTeamProject/TeamBuildTypes/Build
and Deploy (You can also navigate directly to this file by right clicking on the build
definition and choosing "View Configuration Folder".)</li></ul><ul><li>
Check out and open the TFSBuild.proj file to configure it to use Team Deploy</li></ul><ul><li>
Find the comment &lt;!—Do not edit this -&gt; and add the following line underneath
the one that is already there. It should look something like the screenshot below</li></ul><blockquote><p>
&lt;Import Project="$(MSBuildExtensionsPath)\TeamDeploy\TeamDeploy.Tasks.targets"
/&gt;
</p></blockquote><p><img title="AddTeamDeployProject.jpg" alt="AddTeamDeployProject.jpg" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=teamdeploy&amp;DownloadId=80222" /></p><p>
 
</p><p>
Scroll to the bottom of the TFSBuild.proj file to the &lt;PropertyGroup&gt;. Overwrite
the Property group with the following (Adjust the paths for your specific environment):
</p><blockquote><p>
&lt;PropertyGroup&gt; 
<br />
    &lt;KillAppPathFilename&gt;c:\Program Files\PSTools\pskill2.exe&lt;/KillAppPathFilename&gt; 
<br />
    &lt;RemoteExecutePathFilename&gt;c:\Program Files\PStools\psexec2.exe&lt;/RemoteExecutePathFilename&gt; 
<br />
  &lt;/PropertyGroup&gt; 
</p><p>
  &lt;!-- Deploy MSI  --&gt; 
<br />
  &lt;Target Name="AfterEndToEndIteration"&gt; 
<br />
    &lt;CallTarget Condition="'$(IsDesktopBuild)'!='true'"
Targets="DeployMSITargetVirtuals" /&gt; 
<br />
  &lt;/Target&gt; 
</p><p>
  &lt;Target Name="DeployMSITargetVirtuals"&gt; 
<br />
    &lt;Deploy DeployScript="$(SolutionRoot)\..\..\Push Scripts\SampleDeploy.xml" 
<br />
            KillAppPathFilename="$(KillAppPathFilename)" 
<br />
            RemoteExecutePathFilename="$(RemoteExecutePathFilename)" 
<br />
            TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
<br />
            BuildUri="$(BuildUri)"
/&gt; 
<br />
  &lt;/Target&gt;
</p></blockquote><p>
The copied Xml in the TFSBuild.proj should look something like this
</p><p><img title="FinishedTFSBuild.jpg" alt="FinishedTFSBuild.jpg" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=teamdeploy&amp;DownloadId=80225" /></p><ul><li>
Save and check-in the TFSBuild.proj file</li></ul><p><br />
The Deploy task uses a Xml Deploy Script that contains the information of what Msi(s)
to deploy, additional tasks such as starting and stopping the service, and specifies
the target machines. The following steps walks you through editing this file.
</p><p><img title="DeployScript.jpg" alt="DeployScript.jpg" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=teamdeploy&amp;DownloadId=80227" /></p><p>
 
</p><p>
There are a few things to note here. 
</p><ul><li>
Team Deploy can 
<ul><li>
Kill 0 to many processes 
</li><li>
Deploy/Uninstall 0 to many MSIs 
</li><li>
Deploy MSIs to 0 to many Target Machines</li></ul></li></ul><ul><li>
Modify the xml appropriately for your environment. The GUID for the uninstalls are
the MSI product codes. If the MSI is done correctly it will uninstall previous versions
using the upgrade code, however they are usually unable to remove the same version
of the MSI, this is why we have the separate step of uninstall. 
</li></ul><ul><li>
The ExtraArgs element contains the SETUPENV variable that is used by the MSI’s custom
action to copy the correct environment’s config file to the project’s. The custom
action is a simple VBScript that copies the config file (not included with Team Deploy).
See Part 2 for more details on creating the config files folder structure.</li></ul><p>
 
</p><p>
Once the TFSBuild.proj is checked in and the Deploy script is saved (or also checked
in), then you can right click on the build and do a queue new build.   The
MSI will be deployed to your target machine(s). 
</p><p>
See the <a href="http://teamdeploy.codeplex.com/Wiki/View.aspx?title=Troubleshooting" target="_blank">Troubleshooting
/ FAQ section</a> of Team Deploy or contact me if you have any questions or problems.
</p><img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=14e33dfd-20a1-4f39-bce2-43117e3bc779" /></div>
    </content>
  </entry>
  <entry>
    <title>Team Deploy 2.1 Released</title>
    <link rel="alternate" type="text/html" href="http://codesmartnothard.com/TeamDeploy21Released.aspx" />
    <id>http://codesmartnothard.com/PermaLink,guid,8794c8dc-e949-4b43-8bc7-22fffcc74e73.aspx</id>
    <published>2009-08-26T02:49:00-05:00</published>
    <updated>2009-08-25T21:54:37.67175-05:00</updated>
    <category term="Team Build" label="Team Build" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BBuild.aspx" />
    <category term="Team Deploy" label="Team Deploy" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BDeploy.aspx" />
    <category term="Team Foundation Server" label="Team Foundation Server" scheme="http://codesmartnothard.com/CategoryView,category,Team%2BFoundation%2BServer.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://teamdeploy.codeplex.com/" target="_blank">Team Deploy</a> is a free
set of custom Team Build tasks for deploying MSIs to client PCs and servers. 
Team Deploy 2.1 has been released and includes a number of fixes and a couple new
features. 
<br /></p>
        <p>
A special thanks to Jeremy Novak for creating the new CleanupPsExec task and multiple
other fixes.  Here is the list of the changes:
</p>
        <ul>
          <li>
Moved Guidance and Installation from Word document to wiki site (and created a Troubleshooting
section) 
</li>
          <li>
Added -accepteula to all pstools calls so it won’t display the EULA dialog the first
time it runs</li>
          <li>
Added new CleanupPsExec task and test to <a href="http://teamdeploy.codeplex.com/Wiki/View.aspx?title=PSExecLocksUp&amp;referringTitle=Home" target="_blank">clean
up the PSTools service</a> if it becomes stuck. 
</li>
          <li>
Fixed spelling error in RemoteExecute task 
</li>
          <li>
Added support to uninstalling 32bit apps on Windows 2008 64bit servers 
</li>
          <li>
Changed property declarations to be auto-implemented 
</li>
          <li>
Updated task required properties to have the Required attribute 
</li>
          <li>
Created Team Deploy Installation Screencast 
</li>
          <li>
Other misc fixes. 
</li>
        </ul>
        <p>
Team Deploy 2.1 can be found on CodePlex at <a title="http://teamdeploy.codeplex.com/" href="http://teamdeploy.codeplex.com/">http://teamdeploy.codeplex.com/</a>.
</p>
        <p>
-Mike
</p>
        <img width="0" height="0" src="http://codesmartnothard.com/aggbug.ashx?id=8794c8dc-e949-4b43-8bc7-22fffcc74e73" />
      </div>
    </content>
  </entry>
</feed>