TDS Classic Support

We are trying to configure Team Build (TFS2005) for continuous integration on our project. I can get [our website].Website project to build successfully but not the [our website].Sitecore.scproj. I get the following error message "Could not find required components. The Sitecore.Kernel.Dll, Sitecore.Update.dll, Sitecore.Zip.dll and Sitecore.Logging.dll are needed to build update packages. The path to these files must be set in the "Update Package" tab of the project property page."
You need to specify the path to the required dll's from the property page of your TDS Classic project.

Right click on your TDS Classic project and click on 'Properties.' From there, go to the "Update Package" tab. There is a text box with the label "Sitecore Assembly Path." That textbox should have a relative path to the directory containing the dll's.
We've noticed that when using TDS Classic to create update packages it syncs insertions but not deletions. Is this supported?
Yes. This is supported.

You need to set the “Recursive Deploy Action” in the property window for the configuration you are setting up. See image.

We usually choose “Move to Recycle”.

 The “Child Item Synchronization”(CIS) will control what the package does when it sees an item that isn’t in TDS Classic. If CIS is set to “None”, the item is ignored. Otherwise it is deleted/recycled.
We need to use different web.configs - I know we can use file replacements to help; but I am not sure if the source should be a config somewhere on my machine and target be within my SVN sourced or in my destination deploy folder.
We have a sample project available that demonstrates how file replacements can be used.

You essentially set the source to a location on your file system. You then can set the target as needed. Typically you would set this to a location on the destination server via UNC path, or you can set it simply as '.\' and this will copy it to the "Build Output Path" and then ultimately end up at the "Sitecore Deploy Folder" (or update package).
If I exclude items for a configuration that creates an update package, will those items be in the update package created by that configuration?
No. This allows developers to create update packages for specific environments, where different items are included in each package.
How do I include extra files in an update package?
You can leverage the "File Replacement" features of TDS Classic. This feature will allow for you to configure individual files as well as entire directories to be included in the package.

Please see the sample project
How do I install an update package?
Update packages are not the same as the normal Sitecore Packages most of us are accustomed to installing. This means that you cannot use the standard package installer to install these.

Instead, you must use the Update Installation Wizard, which can be found here:

http://[your URL]/sitecore/admin/UpdateInstallationWizard.aspx

If you are looking to automate the installation of a package then download the package installer source code from GIT (GitHub Project) . The package installer will let you script your package deployments. We gave you the source because we realize that each of our customers will have slightly different requirements and the ability to customize the source allows for maximum flexibility.
How do I deploy to multiple servers in a single environment?
A single TDS Classic project will generate a .update package that would get installed into a Content Management Server (CMS). However, a typical production environment will consist of at least one CMS and 'x' number of Content Delivery (CD) Servers. These CD servers would typically have different configuration files and therefore require some other way to be updated.

In this scenario, we setup TDS Classic with file replacement so that it is building a package for the CM server. We then modify the build definition so that it generates a zip file of all files required for a CD web root. This way, when we do a build we get a .update file for the CMS and a .zip file for the CDS.
I a trying to install an Update Package, but the installer fails. Why?
I am trying to install an Update Package, but the installer fails with the following exception:

Exception occured: System.Web.HttpParseException (0x80004005): The base class includes the field 'logArea', but its type (System.Web.UI.HtmlControls.HtmlGenericControl) is not compatible with the type of control (System.Web.UI.HtmlControls.HtmlIframe). ---> System.Web.HttpParseException (0x80004005): The base class includes the field 'logArea', but its type (System.Web.UI.HtmlControls.HtmlGenericControl) is not compatible with the type of control (System.Web.UI.HtmlControls.HtmlIframe). at System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration(ControlBuilder builder) at System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder builder, Boolean fInTemplate, Boolean topLevelControlInTemplate, PropertyEntry pse) at System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder builder, Boolean fInTemplate, Boolean topLevelControlInTemplate, PropertyEntry pse) at System.Web.Compilation.TemplateControlCodeDomTreeGenerator.BuildMiscClassMembers() at System.Web.Compilation.BaseCodeDomTreeGenerator.BuildSourceDataTree() at System.Web.Compilation.BaseCodeDomTreeGenerator.GetCodeDomTree(CodeDomProvider codeDomProvider, StringResourceBuilder stringResourceBuilder, VirtualPath virtualPath) at System.Web.Compilation.BaseTemplateBuildProvider.GenerateCode(AssemblyBuilder assemblyBuilder) at System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider) at System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider) at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean ensureIsUpToDate) at System.Web.UI.TemplateControl.LoadControl(VirtualPath virtualPath) at Sitecore.Update.UpdateInstallationWizard.InstallationWizard_ActiveStepChanged()

This is due to a Sitecore bug (#387071).

If the web.config's system.web/compilation element has targetFramework=4.5 then the UpdatePackageInstallationWizard will fail.

As a temporary work around (until Sitecore resolves the issue), set the value to 4.0 install the package and then switch it back to 4.5
Why am I getting "Exception Cannot generate package: '_', hexadecimal value..." when trying to build my update package?
If you are seeing this exception:
Exception Cannot generate package: '_', hexadecimal value 0x03, is an invalid character.(System.Exception):

at Sitecore.Update.Engine.PackageGenerator.GeneratePackage(DiffInfo diff, String licenseFile, String outputPath) at HedgehogDevelopment.SitecoreProject.PackageBuilder.PackageBuilder.BuildPackage(BuildContext ctx)
at HedgehogDevelopment.SitecoreProject.PackageBuilder.Program.Main(String[] args)

It typically is caused by bad character values in one of the .item files. Since this error is thrown by Sitecore, we have no way to trap/handle it better. Please review your items for special characters. This usually happens when someone pastes a text field from a program like word. If you have a good file search tool, you may want to try searching all the .item files for the special character 0x03. Once you find it, you will need to figure out how to remove it from the content and re-sync the content.
We have problems during the installation of generated update packages from TDS Classic. In Sitecore the update process stops at: “Copying files to be installed to solution and backing up overwritten files”
This is usually caused by a permission issue on some of the files you are trying to replace in the target directory. The installer creates a log in the /temp/__UpgradeHistory folder that will give you details about the files that are included in the update package. You need to open that file, identify the files with permission problems, correct the permissions, and re-run the build.
Can I create separate packages for my code and Sitecore items?
Yes you can.

You can have the build split the update package TDS Classic creates into two packages: one for the Sitecore Items that would go into the CMS and then a code only one for the CDS. In the TDS Classic Project properties tab you will see a checkbox at the bottom to generate separate code and item packages.

Another way to approach it is to make a CDS specific configuration that excludes all the Sitecore items and will then just build and deploy just the code. This will allow you to use the file replacements if you need completely different configs on the CDS.
What are the Sitecore and system requirements?
TDS Classic has been fully tested with the following:

Visual Studio: 2008, 2010 and 2012, 2017 (requires TDS 5.6 or higher).

Source Code Control Systems: Team Foundation Server, Subversion, and Git, but will also work with any Microsoft compliant source control system.

Sitecore: Version 6.0.1 and higher. The Update package feature in TDS 2.0 requires Sitecore 6.1 or higher.
Why am I getting an exception from Sitecore.Update with Sitecore 6.5?
Using Sitecore 6.5 and see this exception while trying to generate an update package?

Exception Could not load file or assembly 'Sitecore.Update, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The given key was not present in the dictionary. (Exception from HRESULT: 0x80131577)(System.IO.FileLoadException):
          at HedgehogDevelopment.SitecoreProject.PackageBuilder.PackageBuilder.BuildPackage(BuildContext ctx)
          at HedgehogDevelopment.SitecoreProject.PackageBuilder.Program.Main(String[] args)

This is a bug with Sitecore's Sitecore.Update.dll. They have a hotfix available here: 

http://dl.sitecore.net/hotfix/Sitecore CMS 6.5.0 rev. 110602 Hotfix 348444-1.zip

Existing 'include files' are not overwritten when installing a package. A new file is created with the package name attached at the end. How can I overwrite the existing file?

This is a feature of Sitecore's Update Installation Wizard as documented in their guide available on the SDN.

After installing the update package, you should rebuild the search indexes and the links database.
If the update package contains configuration files, these files will be saved with a different name. This 
makes it easier to manually merge changes to configuration files by allowing you to use a file 
comparison tool such as WinMerge. For instance, if you are upgrading to version 6.1.0 rev.090630, 
this update package contains the clean web.config file for 6.1.0 rev. 090630, which will be saved in 
the root folder with the following name:
Web.config.Sitecore_6.1.0_rev.090630

We have a sample PowerShell script that can be used to rename the config files available at https://gist.github.com/seankearney/6282452

The Complete TDS Classic Manual
This manual is a complete set of documentation you can use while learning TDS Classic. If you find something new, different or needs changing add it through a pull request!
Hedgehog Tools Help
Our TDS Classic Help section is built in to the tool. This will help gives you a granular understanding of each function and feature within TDS Classic.
TDS Classic Cloud Build
A document describing how to build in the VSTS cloud with NuGet TDS Classic build package.
Team City and Octopus with TDS Classic
Integrating TDS Classic with Team City and Octopus.

Continuous Delivery: Kagool and TDS Classic
TDS Classic has allowed Kagool to automate the build of their Sitecore Update Packages as part of a continuous delivery process.
Sync, Deploy & Transfer: Norfolk County Council, TDS Classic and Razl
With TDS Classic, Norfolk County Council syncs all Sitecore development items to source control; they use Razl to transfer and compare Sitecore content items between environments.
Too Many Cooks Spoil the Broth
Whitepaper on the importance of Continuous Integration while working in a team environment.
Build Extensions
Our Whitepaper on how to extend Hedgehog Tools to fit within your environment. Have the most up to date and complete project on the block!