Wednesday, 7 April 2010

SP2010 support and fixes for SharePoint Content Deployment Wizard

I’ve released an updated version of the Content Deployment Wizard to Codeplex (version 2.8) – this version supports SharePoint 2010. The Content Deployment Wizard is my reasonably popular tool for moving content around in your SharePoint environment(s) – if you haven’t come across this before, you can select site collections, webs, lists, folders, files or list items to export to a file for import somewhere else:

SharePointContentDeploymentWizard

There are two purposes of this release:

  1. Fix the ‘Object reference’ error commonly experienced with the previous version (2.7)

    It took me some time to realize, but this happened very frequently and if you used 2.7 often you may well have seen this issue - apologies. It seems this was introduced by Alex in the code he contributed to that release, but it was an unusual threading bug and frankly I’m sure if I’d have written the code it would probably have hit me too! Thanks again for your contribution Alex.

  2. SharePoint 2010 support

    OK so I bent the truth somewhat at the beginning of the article – in fact all versions of the tool already support SharePoint 2010. This is because there are no breaking changes in Microsoft’s API which my code uses between 2007-2010, so all that’s required is a couple of entries in the .exe.config file to redirect the assemblies which are picked up. However it’s difficult to convey that message in the title or first sentence of this article, and I’m finding that folks who don’t understand the concept of .Net assembly redirection just don’t believe I didn’t have to ‘create a new version with support for 2010’ :) That said, I have made a couple of improvements to make it easier:

    - the 2.8 installer adds the appropriate BindingRedirect entries into the config file for you, but commented out. Simply uncomment these if you are installing on SP2010
    - the 2.8 installer correctly installs the stsadmcommands.COB.SPDeploymentWizard.xml file to the 14\CONFIG directory if it exists (i.e. because SharePoint 2010 is installed) to ensure the STSADM commands work

    For reference, the .exe.config file entries which are required for SP2010 are:
    <!-- Uncomment this section to use the Wizard with SharePoint 2010 - this will ensure the SharePoint 2010 assemblies are used. -->
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
                <assemblyIdentity name="Microsoft.SharePoint" publicKeyToken="71e9bce111e9429c" culture="neutral" />
                <bindingRedirect oldVersion="11.0.0.0" newVersion="14.0.0.0" />
            </dependentAssembly>
            <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
                <assemblyIdentity name="Microsoft.SharePoint.Publishing" publicKeyToken="71e9bce111e9429c" culture="neutral" />
                <bindingRedirect oldVersion="11.0.0.0" newVersion="14.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
    N.B. If you wondering about the version range starting at 11.0.0.0 rather than 12.0.0.0, this is the pattern Microsoft use themselves in their BindingRedirects.
The 2.8 version of the Wizard can be downloaded from http://spdeploymentwizard.codeplex.com/releases/view/42380 – please let me know if you run into an issue, whether on SharePoint 2007 or 2010. 

11 comments:

Joshua said...

So... Is it possible use this tool to migrate from 2007 to 2010. From one server/installation to another? I am looking for a way to do this without rebuilding everything.

Chris O'Brien said...

@Joshua,

No - you won't be able to use Content Deployment (either with my front-end or the out-of-the-box screens) to go from 2007-2010. As you might expect, there are lots of schema changes between the two releases.

You need to be looking at the standard approaches (e.g. database attach) to upgrade from 2007-2010.

HTH,

Chris.

Unknown said...

We have been testing your tool extensively and are wondering if there is a size limitation on the amount of data being transferred. We have noticed the content types are not all being correctly assigned to the data being transferred from one part of the site to another are we missing something? Thanks love the tool, just some questions

Chris O'Brien said...

@Richard,

No, I'm not aware of any size limits with Content Deployment, you are only constrained by the amount of memory and disk space (for the temporary files generated during compression) I believe. I've certainly heard of people deploying 20GB with the tool.

If the issue you're seeing is that site content types are not fully replicated on the destination, be aware that that's just how SharePoint's Content Deployment feature works - it isn't something specific to my tool. What happens is that the list content types are successfully hooked up, but the parent site content types are not deployed - consider that the hard requirement is only on the list content types for the site to 'function' on the destination. (Consider also that Content Deployment was primarily conceived for "authoring to read-only production" scenarios.)

FWIW I also wish their API deployed site content types. I actually can't think of too many reasons why it doesn't.

HTH,

Chris.

Alex Angas said...

A bug?! Sorry Chris... Glad you could sort it out.

Al said...

Is it possible to use this tool thru the command line for e.g. stsadm to import content with the No Compression?

Chris O'Brien said...

@Al,

Yes - see Command-line support for Content Deployment Wizard now available for details.

Hope that helps,

Chris.

Anonymous said...

Hi Chris,

I do have a specific requirement of excluding hidden libraries like "Master Page Gallery", "Web Part Gallery" while exporting whole site collection including all descendents in the content migration package.

Would SPExportObject.ExcludeChildren be an useful property to achieve this ? Or any other suggestions / comments ?

Thanks,

Vishwajit

Chris O'Brien said...

@Vishwajit,

Unfortunately there's no real support for this scenario in the tool at the moment - you'd have to select individual lists you DO want to export instead.

HTH,

Chris.

Anonymous said...

Hi Again,

Stefan has suggested a possible solution for this : to delete the entries from Manifest.xml file during SPImport.Started Event.

Please refer the link : http://blogs.technet.com/b/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-2.aspx?PageIndex=7&CommentPosted=true#comments

I've given it as a try and its working for me, the only issue I may lose the data in these Galleries as I'm removing these libraries with all its descendents.

Thanks,

Vishwajit

Chris O'Brien said...

@Vishwajit,

Ah perfect - for some reason I thought you were looking for a "no code" solution. If you're comfortable making the odd change to the Content Deployment Wizard's source code, then you can absolutely add support for nice extras like this.

Great to hear you got sorted :)

Chris.