So I’ve been doing some work in a MOSS Farm Development VM for a release to a WSS Farm. I created a a Site Collection using the Collaboration Team Site Definition thinking it wouldn’t use any of the MOSS Features (as you may know that MOSS is a superset of WSS).
When I did an stsadm –o export from my MOSS Farm and then did an stsadm –o import into my WSS Farm I got the following errors:
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\BIN>stsa
dm -o import -url http://tfsserver:1010 -filename c:\drops\backup.cab
Start Time: 6/3/2009 7:50:58 PM.
Progress: Initializing Import.
FatalError: Could not find Feature OffWFCommon.
at Microsoft.SharePoint.Deployment.ImportRequirementsManager.VerifyFeatureDef
inition(SPRequirementObject reqObj)
at Microsoft.SharePoint.Deployment.ImportRequirementsManager.Validate(SPRequi
rementObject reqObj)
at Microsoft.SharePoint.Deployment.ImportRequirementsManager.DeserializeAndVa
lidate()
at Microsoft.SharePoint.Deployment.SPImport.VerifyRequirements()
at Microsoft.SharePoint.Deployment.SPImport.Run()
Progress: Import Completed.
Finish Time: 6/3/2009 7:51:04 PM.
Completed with 0 warnings.
Completed with 1 errors.
Log file generated:
c:\drops\backup.cab.import.log
Could not find Feature OffWFCommon.
A little bit of poking around and some recommendations from @pseale via Twitter and I discovered that these files created by the export are in actual fact .cab files.
So I renamed the file to .cab and I extracted the contents into a new folder using the Windows UI.
Then I had to work out where the references were that were causing the error. There were lots of .dat files and then the following:
- exportsettings.xml
- manifest.xml
- requirements.xml
- rootobjectmap.xml
- systemdata.xml
- usergroup.xml
- viewformslist.xml
Alarm bells rang at Requirementsxml, so I started searching for the ‘OssWFCommon’ mentioned in the error. Bingo! So I made that change…now how do I wrap this back as a .cab?
To do this I need to create a manifest file…to do this I used makecab.exe but this requires a ddf manifest file. As there was 99 .dat files I didn’t feel like writing one myself…so I used powershell and did a ‘dir | ft Name > list.ddf’ and added the following to the top of it.
.OPTION EXPLICIT
.Set CabinetNameTemplate=backup.bak
.Set DiskDirectoryTemplate=CDROM ; All cabinets go in single directory
.Set CompressionType=MSZIP ; All files compressed in cabinet files
.Set UniqueFiles="ON"
.Set Cabinet=on
.Set DiskDirectory1=Package
Then I simply ran makecab.exe to create the new cab, deployed it to my WSS Farm and tried again. I got some other errors for other features and repeatedly removed them until the errors went away!
The full xml elements removed from requirements.xml were:
<Requirement Type="FeatureDefinition" Id="c9c9515d-e4e2-4001-9050-74f980f93160" Name="OssWFCommon" />
<Requirement Type="FeatureDefinition" Id="fde5d850-671e-4143-950a-87b473922dc7" Name="IssueTrackingWorkflow" />
<Requirement Type="FeatureDefinition" Id="02464c6a-9d07-4f30-ba04-e9035cf54392" Name="ReviewWorkflows" />
<Requirement Type="FeatureDefinition" Id="6c09612b-46af-4b2f-8dfc-59185c962a29" Name="SignaturesWorkflow" />
<Requirement Type="FeatureDefinition" Id="c6561405-ea03-40a9-a57f-f25472942a22" Name="TranslationWorkflow" />
<Requirement Type="FeatureDefinition" Id="c85e5759-f323-4efb-b548-443d2216efb5" Name="ExpirationWorkflow" />
<Requirement Type="FeatureDefinition" Id="29d85c25-170c-4df9-a641-12db0b9d4130" Name="TransMgmtLib" />
<Requirement Type="FeatureDefinition" Id="00bfea71-dbd7-4f72-b8cb-da7ac0440130" Name="DataConnectionLibrary" />
I also had to remove some ContentType references from the manifest.xml too which referenced the Id of the feature. So best thing to do is before you remove the Requirement element, is search for the Id in the other xml files ;-)
I would suggest that this is not the best way to do this as you may delete things you shouldn’t ie. that are dependent on Lists working etc.