Tip #46: Did you know… that Web Deployment “migrate” operation is “sync” operation with all migration rules enabled?
Note: C# code in this article applies to RC version of Web Deployment Tool available here:
- Web Deployment Tool 1.0 RC x86
- Web Deployment Tool 1.0 RC x64
or through WebPI tool:
- Web Platform Installer
To migrate an application or whole server from IIS6 to IIS7 you need to use “migrate” verb in msdeploy command line tool.
For example, you can create a “migration” package of a server in the following manner:
msdeploy -verb:sync -source:webserver60 -dest:package=c:\migratedServer.zip
Migration is meant to pull out more components then sync operation. To read more about migration using Web Deployment Tool refer to this article: Migrate from IIS 6.0 to IIS 7.0
To do the same in C# using Web Deployment public APIs, you write the same code as you would write for sync except that you have to enable all the migration rules.
(Note: for remote settings explore properties of DeploymentBaseOptions and for sync specific settings like skip rules and other options, explore properties of DeploymentSyncOptions).
using System;
using Microsoft.Web.Deployment;
static class Program
{
static void Main()
{
DeploymentWellKnownProvider sourceProvider = DeploymentWellKnownProvider.WebServer60;
string sourcePath = ""; // no path needed for webserver providers
DeploymentBaseOptions sourceBaseOptions = new DeploymentBaseOptions();
/*
* set base options for source object (webserver)
*/
DeploymentWellKnownProvider destinationProvider = DeploymentWellKnownProvider.Package;
string destinationPath = @"c:\migratedServer.zip";
DeploymentBaseOptions destinationBaseOptions = new DeploymentBaseOptions();
DeploymentSyncOptions destinationSyncOptions = new DeploymentSyncOptions();
// add all migration rules to sync options
DeploymentRuleCollection availableRules = DeploymentSyncOptions.GetAvailableRules();
foreach (DeploymentRule rule in availableRules)
{
if (rule.Name.Equals("MigrateGeneral") ||
rule.Name.Equals("MigrateDependencyCheck") ||
rule.Name.Equals("MigrateAnonymousUser"))
{
destinationSyncOptions.Rules.Add(rule);
}
}
/*
* set other base and sync options for destination object (package)
*/
using (DeploymentObject deploymentObject = DeploymentManager.CreateObject
(
sourceProvider,
sourcePath,
sourceBaseOptions
))
{
deploymentObject.SyncTo
(
destinationProvider,
destinationPath,
destinationBaseOptions,
destinationSyncOptions
);
}
}
}
Kateryna Rohonyan<br>SDET, IIS Team