<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Maxime Bombardier - SharePoint Architecture &amp; Development : Content Deployment</title><link>http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx</link><description>Tags: Content Deployment</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>The power of deleting Content Deployment Jobs &amp; Paths</title><link>http://blogs.msdn.com/maximeb/archive/2008/06/10/the-power-of-deleting-content-deployment-jobs-paths.aspx</link><pubDate>Tue, 10 Jun 2008 15:07:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8589810</guid><dc:creator>MaximeB</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/8589810.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=8589810</wfw:commentRss><description>&lt;p&gt;For the past few weeks, I have been in parental leave (we just had our first baby girl) and unable to write much.&amp;#160; However, it seems that there was some issues with Content Deployment at work.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Actually, the installation of SP1 and Blackout had been scheduled for a while but it didn't resolve as many issues as we had hoped.&amp;#160; As such, we were still plagued with some &amp;quot;Object Reference Not Set&amp;quot; and &amp;quot;Primary Key constraint violation ...&amp;quot; during the Export phase.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;By calling support, my team was directed to another hotfix (950279), &lt;a href="http://support.microsoft.com/default.aspx/kb/950279"&gt;http://support.microsoft.com/default.aspx/kb/950279&lt;/a&gt; that had been released just after Blackout and we hadn't noticed it.&amp;#160; This is the 3rd hotfix that I remember seeing that fixes &amp;quot;Primary Key constraint violation...&amp;quot;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What you need to know about these errors is that they are mostly generic.&amp;#160; Also, it's not by exporting the content and importing it in your dev environment that you will be able to reproduce the issue.&amp;#160; The error is &amp;quot;Content Deployment&amp;quot; specific (I didn't check which database hosts the Content Deployment jobs and paths but it's likely to be Configuration, or otherwise Central Administration).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;By deleting the Jobs &amp;amp; Paths, you will likely remove the issue that causes the Export to fail.&amp;#160; It seems that issues that were still there before the upgrade were still there after.&amp;#160; Also, the thing to know is that, after deleting/recreating the jobs &amp;amp; paths, the next incremental deployment will not have any knowledge of what has been deployed previously and will deploy everything.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For some reason, the first incremental gave us some issues where we had several 'file already exists with the same name' issues.&amp;#160; I went ahead and deleted the Jobs/Paths again, did a Full Content Deployment once, and all other deployments have been Incremental and running fine.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So unless you have no problem installing hotfixes (privates and/or publics), I would try this simple no-risk step before installing anything in production.&amp;#160; While, in some situation, it may only be a temporary solution, it may buy you enough time to test the hotfix deployment in your environments and hopefully wait for a public fix or even a Service Pack.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Maxime&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8589810" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>SharePoint Content Deployment Manifest Reader</title><link>http://blogs.msdn.com/maximeb/archive/2008/05/16/sharepoint-content-deployment-manifest-reader.aspx</link><pubDate>Fri, 16 May 2008 20:50:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8514140</guid><dc:creator>MaximeB</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/8514140.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=8514140</wfw:commentRss><description>&lt;p&gt;I ran into some more Content Deployment issues lately and I was going through the manifest (see &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/02/19/debugging-content-deployment-issues.aspx"&gt;http://blogs.msdn.com/maximeb/archive/2008/02/19/debugging-content-deployment-issues.aspx&lt;/a&gt; for more examples) with some difficulties.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;First of all, let me give you a quick background.&amp;#160; When you use Content Deployment, it will create a series of CAB files that will contain a file called manifest.xml.&amp;#160; This is the file that drives the show.&amp;#160; Unfortunately, especially with Incremental deployments, the file is deleted at the end of the deployment, even if it failed.&lt;/p&gt;  &lt;p&gt;Basically, right after the &amp;quot;transporting&amp;quot; phase, the &amp;quot;importing&amp;quot; phase kicks in.&amp;#160; This is the best time to go, with Windows Explorer, on the destination server and make a copy of the Content Deployment's files (that are in the last modified folder).&lt;/p&gt;  &lt;p&gt;If you open ExportedFiles.cab (&lt;em&gt;&lt;u&gt;not&lt;/u&gt;&lt;/em&gt; ExportedFiles1.cab or any other cab files), you will be able to get the Manifest.xml file.&lt;/p&gt;  &lt;p&gt;What this tool will require is simply that file as well as the &lt;strong&gt;last number of imported objects&lt;/strong&gt; that you have in the Content Deployment report.&amp;#160; Type in the same number and it will show you the next object that was trying to be deployed and failed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/SharePointContentDeploymentManifestReade_C2B9/ObjectsImported.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="231" alt="ObjectsImported" src="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/SharePointContentDeploymentManifestReade_C2B9/ObjectsImported_thumb.jpg" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/SharePointContentDeploymentManifestReade_C2B9/ManifestReader.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="325" alt="ManifestReader" src="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/SharePointContentDeploymentManifestReade_C2B9/ManifestReader_thumb.jpg" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can see, I simply get the right object and create an Xml document with only that object.&amp;#160; You can then navigate it as if you would in Internet Explorer.&amp;#160; The 2nd tab contains the actual text only of the object and you can do a 'select all / copy' if you need:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/SharePointContentDeploymentManifestReade_C2B9/ManifestReaderText_1.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="325" alt="ManifestReaderText" src="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/SharePointContentDeploymentManifestReade_C2B9/ManifestReaderText_thumb_1.jpg" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Note that the manifest location and number of objects imported are saved in the application configuration so that you don't have to enter them all the time.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Last, the 'Solution Helper' tab will be the one that I update over time (or you can send me manifest samples with solutions so that I can test + develop + document the solution in the tab for others.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The first example of this is that I had an issue in an environment where all columns were being deleted and recreated.&amp;#160; The Incremental deployment was failing with a message stating that you cannot delete a column that's in use.&amp;#160; The Solution Helper, when it sees that the object is of 'DeploymentFieldTemplate' (a field), it will attempt to get all the document libraries that uses the field (according to the manifest) and show them there.&amp;#160; (In our case, it turned out that a RetractSolution + AddSolution had occured and was deleting + recreating the same columns.&amp;#160; A Full Content Deployment will 'fix' the error.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;While it's in no way a complete solution, I hope it may help you see which objects are failing and give you ideas on what to fix.&amp;#160; You can download it here : &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-869ff26f3797a09a.skydrive.live.com/embedrowdetail.aspx/MaximeB-MSDNBlog/ContentDeploymentManifestReader.exe.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Maxime&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8514140" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Deployment lifecycle when using Site Definitions and Features (including post production day)</title><link>http://blogs.msdn.com/maximeb/archive/2008/02/23/deployment-lifecycle-when-using-site-definitions-and-features-including-post-production-day.aspx</link><pubDate>Sat, 23 Feb 2008 16:14:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7857203</guid><dc:creator>MaximeB</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/7857203.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=7857203</wfw:commentRss><description>&lt;h4&gt;&lt;strong&gt;Summary &lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;As you have noticed, I've changed my latest SharePoint focus to look at Site Definitions (and obviously Features but I played with them a lot prior to this).&amp;nbsp; The reason for this is that I was looking at the "best" way to deploy artifacts for SharePoint WCM portals.&amp;nbsp; While I had a very good working solution prior to me playing more with Site Definitions, I now think that I am ready to handle the task much better.&amp;nbsp; This is also a follow-up to a previous article : &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/01/13/real-life-team-based-development-for-web-content-management-with-sharepoint-2007.aspx" target="_blank"&gt;http://blogs.msdn.com/maximeb/archive/2008/01/13/real-life-team-based-development-for-web-content-management-with-sharepoint-2007.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The reason for this is that there is no single way to deploy SharePoint artifacts.&amp;nbsp; Worst, once you deployed the first time, your original mechanism may not work anymore or if it does, it's probably not what you should use!&amp;nbsp; What I'll attempt to do here is to define a few SharePoint artifacts that we deploy in a Web Content Management scenario for both production day and post production day, as well as the deployment lifecycle for the developers pre-production-day and post-production-day.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;SharePoint artifacts we'll cover:&lt;/strong&gt;&lt;/h4&gt; &lt;ul&gt; &lt;li&gt;Master pages&lt;/li&gt; &lt;li&gt;Page Layouts&lt;/li&gt; &lt;li&gt;CSS / JavaScripts / Images (for the masterpages and layouts)&lt;/li&gt; &lt;li&gt;Site Columns &amp;amp; Site Content Types&lt;/li&gt; &lt;li&gt;Library content types association&lt;/li&gt; &lt;li&gt;Custom Lists&lt;/li&gt; &lt;li&gt;Event Handlers on libraries&lt;/li&gt; &lt;li&gt;Feature Receivers&lt;/li&gt; &lt;li&gt;Timer jobs&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;SharePoint topics discussed: &lt;/strong&gt;&lt;/h4&gt; &lt;ul&gt; &lt;li&gt;Site Definitions&lt;/li&gt; &lt;li&gt;Features&lt;/li&gt; &lt;li&gt;Variations&lt;/li&gt; &lt;li&gt;Feature Stapling&lt;/li&gt; &lt;li&gt;Timer Jobs&lt;/li&gt; &lt;li&gt;Content Deployment&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Why Site Definitions?&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;The timing of me digging Site Definitions more and this post, &lt;a href="http://www.andrewconnell.com/blog/archive/2008/02/15/You-dont-need-to-create-site-definitions.aspx" target="_blank"&gt;http://www.andrewconnell.com/blog/archive/2008/02/15/You-dont-need-to-create-site-definitions.aspx&lt;/a&gt;,&amp;nbsp; from Andrew Connell was interesting.&amp;nbsp; First of all, he's right, you do not need to create a Site Definition all the time.&amp;nbsp; However, there are also general guidelines.&amp;nbsp; When you look at the Publishing portal that is available out of the box, it really looks like a good sample for reverse-engineering (and believe me, I opened it often to learn stuff!).&amp;nbsp; How often have you kept the original "Press Releases" sub-site or used "Blueband" or any other master for your site?&amp;nbsp; What Andrew mentions is that you should create your own minimal publishing site or you can take a look at this one &lt;a href="http://www.codeplex.com/features" target="_blank"&gt;here&lt;/a&gt; on CodePlex but I suggest you still take it apart with your requirements.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Also, I'm almost always in a multilingual scenario (i.e.: SharePoint Variations) and then Site Definitions takes its full meaning.&amp;nbsp; Why? well the Variation mechanism is really just a system that provision sites.&amp;nbsp; It is &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt; a copy of the source site.&amp;nbsp; When the variation timer job kicks in, it will detect a new site in the source variation.&amp;nbsp; When it reads it, it takes the title, the description, the URL and the Site Template (i.e.: site definition).&amp;nbsp; Then it simply does a standard Create Site... with those parameters.&amp;nbsp; Once that is done, it will replicate only the &lt;strong&gt;publishing fields of the welcome page&lt;/strong&gt;.&amp;nbsp; Last, it will provision the other publishing pages the same way and replicate only the publishing fields on those pages.&amp;nbsp; &lt;strong&gt;Note that any customization done manually at the source, beside publishing pages and fields, will NOT be brought to the other variations.&amp;nbsp; That includes libraries undefined in the site definitions, documents or images, versioning settings, workflows, and everything else you see in the user interface that isn't a publishing field!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I think my last sentence was obvious enough that if you customize something at the source, you will customize it again at the destination.&amp;nbsp; While there may be scenarios when you might want this, it'll be unusual and the solution is to use Site Definitions so that the provisioning brings as much as possible.&lt;/p&gt; &lt;p&gt;&lt;br&gt;I'll finish this section with an example: today, if you have a Publishing site with the OOB site definition and that your welcome pages aren't "WelcomeLinks", what do you do?&amp;nbsp; First of all, at the source, you created a new page with your layout.&amp;nbsp; Then you updated the welcome page of your site to your new page and deleted the old "default.aspx".&amp;nbsp; Now all your welcome pages are not "default.aspx" but it's no big deal.&amp;nbsp; When you created a 2nd variation label, all the default.aspx/WelcomeLinks are back and they are the welcome pages of your sites in that variation!!&amp;nbsp; So you again updated the welcome page and deleted the default.aspx.&amp;nbsp; That's not very user friendly.&amp;nbsp; Also, if you wanted to ended up renaming your custom page to "default.aspx", the variation mechanism would break when trying to provision the site since it's the name for the WelcomeLinks.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As you can see, Site Definitions becomes a must when using variations.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;What defines a Site Definitions?&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;First of all, there is no golden rule for this but here's what I personally follow to determine if I use the same definition or a new one:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;A different welcome page layout&lt;/li&gt; &lt;li&gt;I want to pre-provision a default set of web parts in a welcome page layout&lt;/li&gt; &lt;li&gt;(f) I want to associate specific content types to libraries&lt;/li&gt; &lt;li&gt;(f) I want to allow specific page layouts creation (i.e.: a "news" only section, a "product" only section, etc.)&lt;/li&gt; &lt;li&gt;(f) I want to add special Site Actions for some sites&lt;/li&gt; &lt;li&gt;(f) I want to have a special workflow for some sites&lt;/li&gt; &lt;li&gt;(f) I want to update library settings for some sites&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Note that the items prefixed by "(f)" are items where the delivery mechanism is Features but they are associated in some site definitions.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Also, one note that will affect your site definition architecture are Feature Stapling.&amp;nbsp; That functionality is one of the very practical mechanism to apply a feature to a site definition.&amp;nbsp; Unfortunately, it's also "only that".&amp;nbsp; What I mean is that if you have multiple sites with the same definition, it will apply the feature on all those sites.&amp;nbsp; This is great inside a single Site Collection but when your SharePoint farm contains multiple site collections (possibly for different customers), you may not want to apply a feature to all of them.&amp;nbsp; Unfortunately, I do not personally know of a better solution than to create your Site Definitions "per site collection" only (i.e.: in the naming).&amp;nbsp; They will still likely use the same features though.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And really, when I design Site Definitions, I created a Feature that contains all the Features that I use for ALL sites.&amp;nbsp; That way, my Site Definitions are very small and only contains the customization for that site.&amp;nbsp; Also, I suggest taking a look at this tool to read your sites definitions : &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/02/16/site-definition-viewer-a-windows-net-2-0-tool-to-read-site-definition-and-features-configurations-version-0-1.aspx" target="_blank"&gt;http://blogs.msdn.com/maximeb/archive/2008/02/16/site-definition-viewer-a-windows-net-2-0-tool-to-read-site-definition-and-features-configurations-version-0-1.aspx&lt;/a&gt;.&amp;nbsp; I also created some CMD files to automate development of site definitions and they come in handy to maximize your time.&amp;nbsp; I will post them soon.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Before taking a look at the SharePoint artifacts, I need to give you a bit of background on how we get the artifacts: We set up a MOSS server only for "web integrators".&amp;nbsp; The Site Collections in there contains the files directly in the database edited through SharePoint Designer.&amp;nbsp; We hooked up an event on the libraries that, when a check-in is done, it brings the file in a Team Foundation Server.&amp;nbsp; Then, we have someone maintaining the build process and when he get the "go" from the web integrators, he builds the feature containing the files and that is sent to the developers for updates and eventually to production.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;SharePoint artifact deployment - Master Pages - Page Layouts - CSS/JS/Images&lt;/strong&gt;&lt;/h4&gt; &lt;h4&gt;1) Pre-production "day 1"&lt;/h4&gt; &lt;p&gt;You should create a site-scoped Feature containing your master pages and other files (pages layouts and css/js/images).&amp;nbsp; Take a look at the PublishingLayouts for ideas.&amp;nbsp; When this feature is activated on a site collection, it will add the file in the libraries in a ghosted format which means that there are no customization on them.&amp;nbsp; Note that if you ever unghost it at the destination, your feature will never update the file after.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;2) Post-production "day 2+"&lt;/h4&gt; &lt;p&gt;We'll have to define some sub-scenarios but first, let's start that, yes, you &lt;strong&gt;may&lt;/strong&gt; be able to uninstall the feature and reinstall it while using the -force command but I do not recommend it.&amp;nbsp; First, as I just mentioned, if you unghosted a file, it will not be updated.&amp;nbsp; So if you plan on using this technique, make sure you test first.&amp;nbsp; Also, I had some issues with BlobCache with CSS/JS/GIF/JPG but only when they were ghosted, never when unghosted.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Scenario #1 Updates to some/all the files&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I would suggest creating an STSADM extension that update files defined in your Feature.&amp;nbsp; This extension will unghost the file and it will act as your mechanism to deploy updates.&amp;nbsp; What I use is a simple extension with an Xml input file that defines the files to update.&amp;nbsp; This file simply grows over time since I only append to it.&amp;nbsp; It gives me an added benefit with "change management" since it's not simply a build that picked up all files and sent it in the feature which may contain an update.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Scenario #2 New files&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If you have new files, you probably have a "business reason" behind.&amp;nbsp; For a new master pages or page layout, is it only for a new type of site (i.e.: defined in a site definition) or would you like to apply it automatically on some/all sites?&amp;nbsp; That you have a new site definition or not, you are likely to have a new feature that brings the file.&amp;nbsp; This feature may contain a Feature Receiver that will do some actions with those files such as :&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Assigning the master page to some sites&lt;/li&gt; &lt;li&gt;Allowing the page layout to be created in some/all sites&lt;/li&gt; &lt;li&gt;If you have a new site definition, you may want to add it in the list of available web templates&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Once you have your feature, you may want to create another one to staple the first feature with your site definition (some or all of them).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;For new CSS/JS/images, they are probably used by a new page layout or master to being with so they will go in the same new feature.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;3) Developers Pre/Post production day&lt;/h4&gt; &lt;p&gt;During the initial development phase "pre-production day", developers should update their environment when they need it.&amp;nbsp; Since I have everything in Team Foundation, I created special CMD/Bath files for developers that helps them clean/create a site definition with some sub-sites already pre-populated.&amp;nbsp; This is enough for most cases.&amp;nbsp; It's clean and fast and they are up and running quickly.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;"Post-production day", the site definitions will not be updated (although they can be appended), nor the features, so they should run the same script that add files in the database and install the new features.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;SharePoint artifact deployment - Site Columns and Site Content types + library association&lt;/h4&gt; &lt;h4&gt;1) Pre-production "day 1"&lt;/h4&gt; &lt;p&gt;Feature is the best mechanism to bring columns and content types.&amp;nbsp; Note that the feature has to be Site scoped so it will not bring the content types to a library unless you &lt;em&gt;manually create a page through the GUI&lt;/em&gt; or that you use a content type association feature in your site definition.&amp;nbsp; You can take a look at &lt;a href="http://www.andrewconnell.com/blog/archive/2007/10/29/My-MOSS-WCM-STSADM-custom-commands-have-been-updated.aspx" target="_blank"&gt;Andrew Connell's STSADM extension&lt;/a&gt; for a good sample of exporting your columns/content types.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;2) Post-production "day 2+"&lt;/h4&gt; &lt;p&gt;Well we learned the hard way, since the MSDN documentation wasn't available back then, that if you add a column to a content type (in a feature), a "reinstall" of the feature will only bring the new column at the Site Collection level and it will not be replicated down to each libraries using that content type.&amp;nbsp; Fortunately, the user interface works great so if you do not have many columns to add, you may simply want to document the manual update. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;But you know I like automation ... so yes, we are also fortunate with the API and it replicates down the change as well.&amp;nbsp; An STSADM extension that adds column + associate it to a content type can be done easily so that it reads an Xml input file with all the updates since Day 1.&amp;nbsp; When it runs, if the column's already there, it simply skips it and go check if the content type contains the association to it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;3) Developers Pre/Post production day&lt;/h4&gt; &lt;p&gt;The same process will apply for developers.&amp;nbsp; However, since the "STSADM extension" isn't created until Day 1, they may either recreate their site collection or manually add the column/content types when a change occurs.&amp;nbsp; In my case, since creating a site definition is scripted, it goes very fast.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;SharePoint artifact deployment - Custom lists&lt;/strong&gt;&lt;/h4&gt; &lt;h4&gt;1) Pre-production "day 1"&lt;/h4&gt; &lt;p&gt;A custom list is defined in a feature.&amp;nbsp; The definition contains the columns and types.&amp;nbsp; An instance of a list is defined in a Site Definition or through the user interface.&amp;nbsp; You can also populate rows of data for an instance of a list defined in the Site Definition.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;2) Post-production "day 2+"&lt;/h4&gt; &lt;p&gt;That one is tricker, you can update and reinstall the feature.&amp;nbsp; However, that will only affect new list creation.&amp;nbsp; I personally haven't gotten the need to add columns and data to a list post-production but I would likely need another little STSADM extension to update it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;3) Developers Pre/Post production day&lt;/h4&gt; &lt;p&gt;Same process as the content types, if it's only a feature, then reinstall it.&amp;nbsp; If it's in the site definition, run the creation script.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;SharePoint artifact deployment - Event Handlers, Feature Receivers, and Timer Jobs&lt;/strong&gt;&lt;/h4&gt; &lt;h4&gt;1) Pre-production "day 1"&lt;/h4&gt; &lt;p&gt;All of these are class items.&amp;nbsp; You may want to run code for a specific event on a library, run code when a feature's activated, or run code through a timer job at a specific time.&amp;nbsp; All of them are also originally brought through a feature.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;2) Post-production "day 2+"&lt;/h4&gt; &lt;p&gt;Now, this can be either very easy or much harder depending on how "politically correct" you want to be.&amp;nbsp; Technically (or less politically correct), the classes are either in the BIN or the GAC, if you need to update the code, you can simply deploy them without touching anything in SharePoint (beside an application recycling or an IISRESET).&amp;nbsp; &lt;em&gt;That is, only if you kept the same assembly version.&lt;/em&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Unfortunately, if you want to be more politically correct, you'd have to change the feature, since it contains the assembly version, and reinstall it but there are cases when it seems that some references are "ghosted" somewhere in a database so it may not work.&amp;nbsp; If you want to be politically correct (and normally, we should) with assembly versions, I would strongly suggest doing tests.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;3) Developers Pre/Post production day&lt;/h4&gt; &lt;p&gt;For pre-production day, it's easy, the version isn't likely to change much so you are good to deploy the DLL and reset IIS/app pool.&amp;nbsp; Post production day will depend on what you chose in scenario 2.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Content Deployment with all this&lt;/h3&gt; &lt;p&gt;As long as your site definitions, features, and assemblies are all deployed at the destination, Content Deployment will work great with your artifacts.&amp;nbsp; Sounds simple but even with all my run-ins with Content Deployment, it works good in that scenario.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Hope it helps a bit.&amp;nbsp; I know it's a bit sad that there isn't a "single scenario" and I'm still using STSADM extensions to do some updates, but remember, most of the updates are doable from either SharePoint Designer or the web user interface.&amp;nbsp; These 2 tools works good for the updates.&amp;nbsp; Unfortunately, this version of the product doesn't seem to include the fact that field WCM deployments often have a more rigid and secure environment and SPD users aren't likely to play in production or even staging.&amp;nbsp; That's when we, developers, want to automate the process and that's when we create STSADM extensions to fill the gap.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7857203" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/STSADM+Extensions/default.aspx">STSADM Extensions</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Variations/default.aspx">Variations</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/EventHandlers/default.aspx">EventHandlers</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint+Architecture+_2600_+Design/default.aspx">SharePoint Architecture &amp; Design</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Site+Definitions+and+Features/default.aspx">Site Definitions and Features</category></item><item><title>Debugging Content Deployment issues</title><link>http://blogs.msdn.com/maximeb/archive/2008/02/19/debugging-content-deployment-issues.aspx</link><pubDate>Tue, 19 Feb 2008 04:56:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7784795</guid><dc:creator>MaximeB</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/7784795.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=7784795</wfw:commentRss><description>&lt;p&gt;&lt;em&gt;(Last updated June 17th with the Object Reference Not Set to an Instance)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;SharePoint's Content Deployment feature is a very complex functionality that, unfortunately, does not work all the time.&amp;#160; I've had scenarios where it ran very smoothly and I've had other scenarios (albeit similar in terms of architecture and design) that simply seems to have a different issue everyday.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What I'll attempt here is to include a few ways of debugging Content Deployment as well as links to fixes (or at least, known issues).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Is the error reproducible?&lt;/h3&gt;  &lt;p&gt;First of all, is the error reproducible.&amp;#160; If it's not, then it'll make it harder to determine the issue but I've had cases where we could still work it out.&amp;#160; If it is reproducible, I'd suggest 2 things:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Use STSADM -o export [...] and STSADM -o import [...]&lt;/strong&gt;&amp;#160;&amp;#160; These commands are essentially a Full Content Deployment but it's also a little bit more verbose and you may be able to get the exact error and item. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Open the exported CAB file&lt;/strong&gt; and look at the item that's failing.&amp;#160; For example, if you successfully 6872 objects, look at the 6873e object in the CAB file.&amp;#160; (note that this also works if the error is not reproducible)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Look at the ULS logs&lt;/h3&gt;  &lt;p&gt;The Unified Logging System (ULS) logs may contain more information regarding your issue.&amp;#160; Look at the logs at the same &amp;quot;time&amp;quot; and see if you have more information depending on the type of error and how verbose you are logging.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Look at the Windows Event Log&lt;/h3&gt;  &lt;p&gt;For some reason, since we have SharePoint logs, we tend to go less often in the Windows Event Logs.&amp;#160; It's actually surprising how much more relevant the information can be there and it's also easier to search on an event ID than a string, especially if you have a localized error message.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Unfortunately, a default installation of SharePoint may also bring a lot of errors in the event log (that could be .NET errors, DCOM errors, etc.) so I would suggest taking a look at it before going to production and apply any other fixes that would help.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Run SPSReport, especially if you plan on opening a support call&lt;/h3&gt;  &lt;p&gt;You can download it here : &lt;a href="http://www.codeplex.com/spsreport"&gt;http://www.codeplex.com/spsreport&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Try between Incremental &amp;amp; Full Content Deployments&lt;/h3&gt;  &lt;p&gt;Okay, that's not a funny one but I've had cases where I had a reproducible error during incremental and we couldn't figure out why.&amp;#160; We ran a Full Content Deployment and the error disappeared for a couple weeks.&amp;#160; I had the opposite cases too though :)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;While this may seem trivial, I often forget to look at the CAB file myself so I guess it's possible that not everyone knows about it; same with the Event Log.&amp;#160; Hopefully, they will give you enough information to find out which item is breaking your deployment or if a fix is available.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Read the exported Manifest.xml file&lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;The manifest file contains all deployed objects and may help determining which of them broke.&amp;#160; However, you need it to break during Import because the manifest file is only completed at the end of the Export phase.&amp;#160; Plus, the Incremental jobs almost always delete the file when the content deployment fails (and succeeds).&amp;#160; You can read about it &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/05/16/sharepoint-content-deployment-manifest-reader.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;List of issues I've worked with (&lt;em&gt;with or without fixes, I will update with comments &amp;amp; new issues/fixes&lt;/em&gt;)&lt;/h2&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;The given key was not present in the dictionary. at System.ThrowHelper.ThrowKeyNotFoundException() at System.Collections.Generic.Dictionary`2.get_Item&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;The Post-SP1 rollup fixes (&lt;a href="http://support.microsoft.com/kb/941422" target="_blank"&gt;WSS&lt;/a&gt;, &lt;a href="http://support.microsoft.com/kb/941274" target="_blank"&gt;MOSS&lt;/a&gt;) are fixing this.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Save Conflict Your changes conflict with those made concurrently by another user&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;None yet, often case, a following Content Deployment may work.&amp;#160; I have to check at the CAB file for this one but I didn't get the chance&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;The specified file is already used&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Delete the file and create it under another name; or delete it, deploy, and recreate it.&amp;#160; Also, the new post-SP1 WSS roll-up may fix this as it seems to fix it for lists (hopefully list items as well) : &lt;a href="http://support.microsoft.com/kb/941422/en-us"&gt;KB941422&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I also documented this one here : &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/11/20/incremental-content-deployment-completes-successfully-with-errors-mentioning-that-the-name-is-already-is-used.aspx"&gt;http://blogs.msdn.com/maximeb/archive/2007/11/20/incremental-content-deployment-completes-successfully-with-errors-mentioning-that-the-name-is-already-is-used.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Transaction logs are growing fast, especially when using Full Content Deployment&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;While this seems to be by design, you can limit the transaction log file by using a SQL &amp;quot;Simple&amp;quot; recovery mode.&amp;#160; However, it also means that you can only recover your database with a backup (not with a backup + log backup).&amp;#160; Also, Database Mirroring requires a Full recovery mode.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Object reference not set to an instance during export&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;The .NET Framework 2.0 SP1 fixes an instance of that issue (related to memory issues).&amp;#160; However, there's another case when you have a Quick Deploy job running while you flag a page to be quick deployed.&amp;#160; You can read it &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/06/17/content-deployment-and-object-reference-not-set-to-an-instance.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I noticed &amp;quot;Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.&amp;quot; messages in the ULS logs and Event Logs. See &lt;a href="http://support.microsoft.com/kb/923028"&gt;KB923028&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Full Content Deployment may be slower after installing SP1&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; None yet, not a &amp;quot;known issue&amp;quot;&lt;/p&gt;  &lt;p&gt;I documented this one here : &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/02/13/make-sure-you-test-your-content-deployment-after-installing-sp1.aspx"&gt;http://blogs.msdn.com/maximeb/archive/2008/02/13/make-sure-you-test-your-content-deployment-after-installing-sp1.aspx&lt;/a&gt;.&amp;#160; I basically ran some performance tests (after noticing a performance degradation) after installing SP1 and got some concerns.&amp;#160; &lt;em&gt;Update: Note that in some cases, Anti-Virus software may be the cause to this as well (pre and post SP1).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;HTTP (400) Bad request, Invalid Hostname or &amp;quot;the file type is blocked&amp;quot; ... error message&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Configure your SharePoint Alternate Access Mappings (AAM) for your site so that the default zone for the Central Administration isn't load balanced; or configure IIS so that it responds when the server name and port number are used instead of the load balanced URL.&lt;/p&gt;  &lt;p&gt;I documented this one here : &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/01/28/central-administration-and-alternate-access-mapping-aam-issues-with-content-deployment-and-sp1.aspx"&gt;http://blogs.msdn.com/maximeb/archive/2008/01/28/central-administration-and-alternate-access-mapping-aam-issues-with-content-deployment-and-sp1.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;h3&gt;The URL &amp;quot;Style Library/en-us&amp;quot; is invalid&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Delete your site collection at the destination, create a Publishing Site at the destination, delete it, and now create a Blank Site.&lt;/p&gt;  &lt;p&gt;I documented this one here : &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/10/10/content-deployment-the-url-style-library-en-us-is-invalid.aspx"&gt;http://blogs.msdn.com/maximeb/archive/2007/10/10/content-deployment-the-url-style-library-en-us-is-invalid.aspx&lt;/a&gt;.&amp;#160; &lt;em&gt;Update: In fact, doing this also creates the correct Timer Jobs for other operations such as Variations to work so it's a requirement.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;The TCP connection was forcibly closed&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Run the &amp;quot;Netsh int ip set chimney ENABLED&amp;quot; command; &lt;a href="http://support.microsoft.com/kb/912222"&gt;KB912222&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I documented this one here : &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/11/17/slow-content-deployment-transportation-tcp-connection-was-forcibly-closed.aspx"&gt;http://blogs.msdn.com/maximeb/archive/2007/11/17/slow-content-deployment-transportation-tcp-connection-was-forcibly-closed.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Links are updated at the destination and are still pointing on your authoring farm&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;None officially nor planned so far.&amp;#160; I ended up creating a simple &amp;quot;StringReplacement&amp;quot; HttpModule for a customer.&lt;/p&gt;  &lt;p&gt;I documented this one here : &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/11/20/content-deployment-does-not-fix-links-at-import-when-the-source-has-been-deployed-with-features.aspx"&gt;http://blogs.msdn.com/maximeb/archive/2007/11/20/content-deployment-does-not-fix-links-at-import-when-the-source-has-been-deployed-with-features.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;You cannot perform this action on a checked out document&lt;/h3&gt; &lt;strong&gt;Solution: &lt;/strong&gt;Someone probably checked out a document at the destination.&amp;#160; Unfortunately, the logs do not tell you which document is checked out.&amp;#160; I ended up creating an STSADM extension that would list all checked out documents by anyone.&amp;#160; &lt;em&gt;If anyone knows a CAML query to do this, it would also be an easy way to do it in the Content Structure Reports.&lt;/em&gt;  &lt;br /&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Master pages are not honoured&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Install SP1 or create an STSADM extension to update it.&amp;#160; However, note that incremental content deployment will not &amp;quot;erase&amp;quot; your update so you can update it manually at the destination after the initial content deployment.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Violation of Primary Key&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Install SP1.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Special characters are not deployed correctly&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Install SP1.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Update : Error 4958: The stream does not support concurrent IO read or write operations&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;Set the FileMaxSize property to 2MB in the Content Deployment Configuration.&amp;#160; &lt;em&gt;Thanks to Jian Gao for this one.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Update : Violation of Primary Key on #ExportObjects &lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Solution: &lt;/strong&gt;This one occurs sometimes when you modified some files in the Style Library and an exception is thrown early in the Export stage.&amp;#160; If you have this, go in the Style Library of your source web site, click on List settings and then Versioning settings and update the versioning so that it only accepts Major versions (NOT major &amp;amp; minor).&amp;#160; Execute the Content Deployment and it execute fine after.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Maxime&lt;/p&gt;  &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7784795" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint+Architecture+_2600_+Design/default.aspx">SharePoint Architecture &amp; Design</category></item><item><title>To Content Deployment or not to Content Deployment, that is the question</title><link>http://blogs.msdn.com/maximeb/archive/2008/02/14/to-content-deployment-or-not-to-content-deployment-that-is-the-question.aspx</link><pubDate>Thu, 14 Feb 2008 04:37:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7683767</guid><dc:creator>MaximeB</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/7683767.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=7683767</wfw:commentRss><description>&lt;p&gt;As you probably have read, I ran into a couple issues lately with Content Deployment (&lt;a href="http://blogs.msdn.com/maximeb/archive/2008/02/13/make-sure-you-test-your-content-deployment-after-installing-sp1.aspx"&gt;Slow with SP1?&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/02/13/setting-major-minor-versions-and-content-deployment-issues.aspx"&gt;major/minor versions&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/maximeb/archive/2008/01/28/central-administration-and-alternate-access-mapping-aam-issues-with-content-deployment-and-sp1.aspx"&gt;AAM on Central Administration&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/11/20/incremental-content-deployment-completes-successfully-with-errors-mentioning-that-the-name-is-already-is-used.aspx"&gt;specified file already in used&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/11/20/content-deployment-does-not-fix-links-at-import-when-the-source-has-been-deployed-with-features.aspx"&gt;links not fixed at destination&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/11/17/slow-content-deployment-transportation-tcp-connection-was-forcibly-closed.aspx"&gt;TCP connection closed&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/maximeb/archive/2007/10/10/content-deployment-the-url-style-library-en-us-is-invalid.aspx"&gt;the requirement to create a publishing site + delete + create a blank site&lt;/a&gt;) along with a few others that I haven't post on yet (since I don't know how to fix them yet!).&amp;nbsp; Errors such as :&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Save Conflict Your changes conflict with those made concurrently by another user  &lt;li&gt;You cannot perform this action on a checked out document  &lt;li&gt;Timed out (at importing)  &lt;li&gt;Object reference not set (during export, I noticed "memory corrupt" exceptions close to the same time it fails; that problem might be fixed with .NET Framework 2.0)  &lt;li&gt;Cannot delete file since it does not exist  &lt;li&gt;Cannot create the file since it already exists at the destination  &lt;li&gt;The SQL Transaction logs are growing up very fast (I had a development environment with a 100 MB web site running a Full Content Deployment every day, yes I forgot I had activated it!, after a month, the transaction log was at 356 GB &amp;lt;-- yes GB and no I don't have backups for that database so that's why the log was so big).&amp;nbsp; it turns out that the Full Content Deployment runs so many queries that the transaction log grows pretty fast if you have Full Recovery (which is required for database mirroring).  &lt;li&gt;Web parts added on a page may not always be there at the destination  &lt;li&gt;and then some more issues that I forgot over time&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Most of these are either errors that you can happily forget, some are errors that may or may not happen if you restart the deployment, some are "user created" but shouldn't happen, and some I had to create workarounds since no fixes are scheduled.&amp;nbsp; When you look at this, I cannot say that Content Deployment is reliable for that environment.&amp;nbsp; Unfortunately, it's not only for that environment.&amp;nbsp; I was able to experience these random issues with an OOB publishing site that didn't have any added content!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'm in great need of inspiration from the product group on this one because I have a hard time saying that there won't be any issues with Content Deployment to a customer.&amp;nbsp; So I started musing on why we are using Content Deployment in the first place, after all, it's for an Intranet scenario.&amp;nbsp; Normally, you need Content Deployment because you want to have a staging site collection (or farm).&amp;nbsp; Especially for an Internet scenario, you probably want to put the authoring in a DMZ or even internally with your authenticated users secured.&amp;nbsp; Otherwise, you may simply want to limit your authors so that they cannot bring have an error in production easily and you want to validate everything before a content deployment.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;While these are still true, one of my environment is for an Intranet portal so the DMZ point isn't important as the users are authenticated everywhere on the site (and it's personalized).&amp;nbsp; All that's really left are the authors "screwing up" the web site!&amp;nbsp; However, I've seen scenarios where Incremental content deployments are running every 30 minutes ... that doesn't let you validate everything before now, does it?&amp;nbsp; Also, you can always approve a page right before a deployment and still have the issue.&amp;nbsp; So, if you don't need a DMZ, why should it be a best practice to have a staging farm?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Let's check what an author can really do to "break" a web site?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;The author forgot to approve images or linked documents used in the published page&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;First of all, they can still run into that issue if they approve the page right before the Content Deployment.&amp;nbsp; 2nd, is content approval required for those images &amp;amp; documents?&amp;nbsp; often case, it's probably not.&amp;nbsp; If it is , then there isn't much to do but have a more rigorous approval process. Otherwise,&amp;nbsp; &lt;strong&gt;Solution : &lt;/strong&gt;don't use the default site definition and create yours where content approval is not required on documents &amp;amp; images (but still is on pages).&amp;nbsp; If you are already deployed, create a feature to set the parameters and staple it to the definitions you used.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;The author needs to see the page as a visitor prior to approving it.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Solution :&lt;/strong&gt; there is an option available through the toolbar under where you can view the page even if it's not approved.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;What if the author adds something that shouldn't be there?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Well that's why "Approval" is still required.&amp;nbsp; If you activated the Review Workflow because it's the right thing to do but that approving simply means clicking the button, something's not right.&amp;nbsp; I often case have the question "why can't we approve multiple pages at once?".&amp;nbsp; Reality is that they might need "Publishing" instead of approving if they aren't going to check the pages.&amp;nbsp; To get back on track, the &lt;strong&gt;solution&lt;/strong&gt; is to define better workflows and to have more rigorous approvers.&amp;nbsp; It's also good to know that a workflow with multiple &amp;amp; sequential approvers do not actually require "Approvers" permissions, only the last one in the list who will do the actual transition from archived to published.&amp;nbsp; Don't forget that authors are also accountable.&amp;nbsp; While that may not be much once a "negative" page has been sent online, simply knowing this will likely make them think twice before approving or publishing content.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Can the performance be impacted since authoring pages are usually much bigger?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;While it's true that editing will use more resources on the servers, the &lt;strong&gt;solution &lt;/strong&gt;is simple : dedicate one of your farm servers for your editors where their DNS directs them there directly and this server isn't returned by the load balancer.&amp;nbsp; If they are on the same DNS server, then you could also create an Alternate Access Mapping to that site, thus a different DNS, that only the authors access.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;There's no need for quick deploy anymore&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Well that's not a problem but directly a solution where Quick Deploy only works for publishing pages ... if that page references an image or a document, it won't be deployed at the same time.&amp;nbsp; While I'm guessing the feature's meant for updating text on an existing page, it's still annoying for authors to be able to deploy a page but not its images.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Food for thoughts&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;While I obviously "feel safer" to have a staging/authoring farm, in an intranet portal scenario, reality is that those portals are often case close to a collaboration portal without collaboration.&amp;nbsp; What I mean by that is that you are sharing information and documents while you don't need users to collaborate on it.&amp;nbsp; If you thought of it as Collaboration, you wouldn't consider using Content Deployment so why should it be different for a WCM intranet portal with no DMZ requirements?&amp;nbsp; I'm still taking about a portal that's viewed by 10-50k people a day.&amp;nbsp; Any comments?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7683767" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint+Architecture+_2600_+Design/default.aspx">SharePoint Architecture &amp; Design</category></item><item><title>Make sure you test your Content Deployment after installing SP1...</title><link>http://blogs.msdn.com/maximeb/archive/2008/02/13/make-sure-you-test-your-content-deployment-after-installing-sp1.aspx</link><pubDate>Thu, 14 Feb 2008 02:47:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7682551</guid><dc:creator>MaximeB</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/7682551.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=7682551</wfw:commentRss><description>&lt;p&gt;I have been testing WSS/MOSS Service Pack 1 on a large-scale WCM portal for the past couple weeks and I ran into some issues with Content Deployment.&amp;nbsp; First of all, I&lt;strong&gt;&lt;u&gt; do not want to say there's necessarily a widespread bug with Content Deployment and SP1&lt;/u&gt;&lt;/strong&gt;.&amp;nbsp; Alright, you are warned :)&amp;nbsp; My goal here is that I do indeed have an issue and we are trying to go through support to eventually have some help from the product group to enlighten us.&amp;nbsp; Since I have this issue and that I do not see anyone opening support cases for the same thing nor people writing about it on the web, I'm assuming that it's working in most scenarios.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In summary, make sure you test your Full Content Deployments after you install SP1 in your staging environment.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now that it's said, let's see why I'm thinking we have an issue.&amp;nbsp; First of all, we experience much more often the "Timed out" issue when using the Content Deployment issue.&amp;nbsp; Sometimes, it keeps going, sometimes, it's not.&amp;nbsp; The environment we are testing currently has been running a SINGLE job of Content Deployment for the last 8, yes EIGHT, days.&amp;nbsp; Since it's importing, the cancel button's not available and we cannot kill the job since it's running.&amp;nbsp; What are we importing?&amp;nbsp; about 100 MB of content with 21,000 objects.&amp;nbsp; It stopped doing anything significant after around 5400 objects.&amp;nbsp; While I would try rebooting the server or playing with a few jobs, I am purposely leaving the server as-is so that the support engineer might be able to realize that there's an issue.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;While we had that issue, the customer (obviously) is asking me if we should install SP1 in production and would we have the same issue.&amp;nbsp; The staging environment is a little bit different (barely) where it's running in a VMWare virtual environment.&amp;nbsp; It has the same content as the production (we did a manual export/import from production to staging).&amp;nbsp; The STSADM extension that limits versions (&lt;a href="http://blogs.msdn.com/maximeb/archive/2008/02/13/setting-major-minor-versions-and-content-deployment-issues.aspx"&gt;described here&lt;/a&gt;) hasn't been ran in staging (it was thought that the export was done after it was ran in production but actually wasn't so we had multiple versions of each pages/documents).&amp;nbsp; So I started working on those 2 differences to see if they had an impact.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I did the test with 2 machines:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;My development virtual environment running in a VMWare with 2 GB RAM.&amp;nbsp; The SQL server is centralized on a physical killer box and it's running smoothly.&lt;/li&gt; &lt;li&gt;My personal Virtual PC on my laptop (dual-core centrino with 3 GB RAM but 1.7 RAM allocated to the VPC).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Since Content Deployment usually takes longer than "import" (and I didn't want to export everytime) since it's often "freezing" on my VMs since SP1, I decided to test with export/import.&amp;nbsp; SO I did an export of a "vanilla site" similar to the production (with much less content) that is about 100 MB (actually the CAB file is compressed at 17MB) and 11,000 objects.&amp;nbsp; I deleted the destination collection on both environments and started the imports.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;on VMWare, the first full import took 1h15min&lt;/li&gt; &lt;li&gt;on VPC, the first full import took 45min&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So far, not too bad although I would be curious as to why it's taking THAT long for so few elements.&amp;nbsp; I was a bit surprise on the VMWare where it took much longer than my VPC while I was still working with Outlook &amp;amp; IE &amp;amp; Word at the same time.&amp;nbsp; VMWare 0, VPC 1 :)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Right after that, I started a 2nd import of the same "export" file again:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;3h30 minutes on the VMWare&lt;/li&gt; &lt;li&gt;2h15 minutes on VPC&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;this is a bit depressing.&amp;nbsp; I have the same content re-imported and it's taking a &lt;em&gt;much&lt;/em&gt; longer time.&amp;nbsp; While I understand it's checking the file ... in most content deployment scenarios, we don't really care, we simply want the same thing at the destination.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The 3rd time I ran it, I had the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;4h on VMWare, 3h on VPC&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;it's going up again!&amp;nbsp; The only differences this time is that there was 2 versions and it's adding a 3rd version!!!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I did some SQL profiling and couldn't see any request taking over 40ms (and there was very few of these).&amp;nbsp; I was only checking queries &amp;amp; stored procedures ... and I had over 100,000 lines in less than 5 minutes.&amp;nbsp; While everything seems to be running fine in Network Monitor on all environments, (CPU, disks, memory, network are all green), it's simply not going fast.&amp;nbsp; Maybe it's the sheer amount of queries that are running, I don't know and I do not have answers from the product group yet, but I'm getting more concerned with the feature now.&amp;nbsp; Unfortunately, I haven't run the same type of tests before SP1 so I don't know how bad it was, but I know it wasn't going up exponentially.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Last, I noticed that it "freezes" every time, at least on the VMWare development boxes (I have over 12) I have.&amp;nbsp; I wondered if it was any customization we'd done so I created an OOB publishing site with barely anything (not even variations which are known to add LOTS of objects in Content Deployment (i.e.: a new site can take 140 objects instead of 3).&amp;nbsp; I have about 1,100 objects and it takes 20+ minutes for a few MBs!!!!&amp;nbsp; The export &amp;amp; transport phases are fast, but the import is really slow.&amp;nbsp; Unfortunately, not only it's slow, it also stops at times.&amp;nbsp; I simply do not see much SQL traffic going on at those times and the objects imported aren't going up.&amp;nbsp; It might do that for 10 minutes and start again!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Hopefully I'll have better news in the future regarding this.&amp;nbsp; Until then, I'm hoping it's a problem with my environments only or maybe a VMWare issue that we now have.&amp;nbsp; Just make sure you test with your staging environment before production ...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7682551" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Hotfix/default.aspx">Hotfix</category></item><item><title>Setting Major/Minor versions and Content Deployment issues</title><link>http://blogs.msdn.com/maximeb/archive/2008/02/13/setting-major-minor-versions-and-content-deployment-issues.aspx</link><pubDate>Thu, 14 Feb 2008 02:19:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7682191</guid><dc:creator>MaximeB</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/7682191.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=7682191</wfw:commentRss><description>&lt;p&gt;Just a quick heads-up when you want to limit versions in a Web Content Management scenario and you have Content Deployment set up.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;First of all, let me explain &lt;em&gt;why&lt;/em&gt; you would like to do this:&amp;nbsp; Basically, if you happen to execute routinely a Full Content Deployment, a new version of &lt;em&gt;every&lt;/em&gt; document (pages, images, document, etc.) at the destination.&amp;nbsp; Since the default library settings are set to accept unlimited major and minor versions, you will likely run into a disk space issue before long.&amp;nbsp; I noticed that on a WCM portal that was planned for about 100 MB of web content that turned out to have 600 MB quickly because not all content had been "web-ified" and was still in PDF and document.&amp;nbsp; That 600 MB was being added at each Full Content Deployment, that a modification occurred or not!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So now you have a fully deployed portal with 150+ sub-sites that you want to limit the versions on at least "/documents" and "/images" (and likely "/pages" as well).&amp;nbsp; At the time, we didn't know enough (or anything really) about Feature Stapling to use them so we created an STSADM extension that updates a library's versioning settings (i.e.: does it require approval, the major &amp;amp; minor versions supported, etc.).&amp;nbsp; I would suggest using Feature Stapling for yourself (with the same codebase really) since it will also affect new sites.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;To get back to the primary subject: if you set a major or a minor version limit in the GUI, apply the change, and deploy the update to the publishing farm;&amp;nbsp; then you go back and update to only have a major limit and do not support minors, the GUI will work correctly when you apply.&amp;nbsp; In fact, the "staging or authoring" farm will work correctly.&amp;nbsp; Unfortunately, when you use content deployment, it will say that you cannot set minor version limit on a library that only supports major versions!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I happened to know that error exactly since, when creating the STSADM extension, I got that error when playing with the properties in the "wrong" order.&amp;nbsp; It seems that Content Deployment do use the right order either.&amp;nbsp; You will have to remove the version limits, use content deployment, and then update to have only major versions.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7682191" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/STSADM+Extensions/default.aspx">STSADM Extensions</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Central Administration and Alternate Access Mapping (AAM) (issues with Content Deployment and SP1)</title><link>http://blogs.msdn.com/maximeb/archive/2008/01/28/central-administration-and-alternate-access-mapping-aam-issues-with-content-deployment-and-sp1.aspx</link><pubDate>Mon, 28 Jan 2008 16:10:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7286758</guid><dc:creator>MaximeB</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/7286758.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=7286758</wfw:commentRss><description>&lt;p&gt;A few months ago, I had to debug an issue where Content Deployment was not functioning correctly.&amp;nbsp; As soon as the Import process was starting, we were either experimenting an HTTP 400 error (Bad Request) or a "...this file type is blocked..." error.&amp;nbsp; We couldn't figure out what was going on as everything was functioning correctly across the farm.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The "blocked file type" error simply happens when you try to contact the web service on a different web site than the Central Administration while an Http 400 error occurs (usually) when IIS cannot determine which web site should respond to the request.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I was able to figure out when I looked at the Alternate Access Mapping (AAM) configuration.&amp;nbsp; While everything looked right at first, the only thing I could see that was different than my test environments were that the Central Administration web site's default zone was configured with a load-balanced URL.&amp;nbsp; What that does is set the IIS configuration so that the Central Administration responds to the Fully Qualified Domain Name that you specified.&amp;nbsp; Unfortunately, Content Deployment works with the server name and no IIS web site was responding to this name.&amp;nbsp; You can "guess" this when you set Content Deployment general parameters and specify which server should receive incoming requests (only server names appear).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So it's all good, we added an intranet zone with the server name + port number and that was the end of the story.&amp;nbsp; Then came along SP1 ...&amp;nbsp; While installing the WSS SP1 Language Pack (at least, the WSS &amp;amp; MOSS SP1 worked), we got the following error :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Exception: System.ArgumentException: The IncomingUrl is already present in the collection in a different zone.&amp;nbsp; A url may only map to one zone at a time.&amp;nbsp; Use a different url for requests from this zone.&lt;/p&gt; &lt;p&gt;at Microsoft.SharePoint.Administration.SPAlternateUrlCollection.Add(SPAlternateUrl alternateUrl, Boolean fUpdate, Boolean throwIfExists)&lt;br&gt;&amp;nbsp;&amp;nbsp; at Microsoft.SharePoint.Administration.SPAdministrationWebApplication.Provision()&lt;br&gt;&amp;nbsp;&amp;nbsp; at Microsoft.SharePoint.Administration.SPWebServiceInstance.Provision()&lt;br&gt;&amp;nbsp;&amp;nbsp; at Microsoft.SharePoint.PostSetupConfiguration.CentralAdministrationSiteTask.ProvisionAdminVs()&lt;br&gt;&amp;nbsp;&amp;nbsp; at Microsoft.SharePoint.PostSetupConfiguration.CentralAdministrationSiteTask.Run()&lt;br&gt;&amp;nbsp;&amp;nbsp; at Microsoft.SharePoint.PostSetupConfiguration.TaskThread.ExecuteTask()&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;At least, the error was leading me to the AAM configurations again.&amp;nbsp; It turns out that the default zone &lt;em&gt;has&lt;/em&gt; to be the "server name + port" or else the SP1 Language Pack process will fail.&amp;nbsp; As soon as you modify the default zone, the process will pick up and you'll be fine.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7286758" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Hotfix/default.aspx">Hotfix</category></item><item><title>Real-life Team-Based Development for Web Content Management with SharePoint 2007</title><link>http://blogs.msdn.com/maximeb/archive/2008/01/13/real-life-team-based-development-for-web-content-management-with-sharepoint-2007.aspx</link><pubDate>Sun, 13 Jan 2008 21:33:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7101724</guid><dc:creator>MaximeB</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/7101724.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=7101724</wfw:commentRss><description>&lt;p&gt;It took me a while to come up with everything I needed for this post as I want to make it as accurate as possible with the experience I had on the field.&amp;nbsp; The goal of this post is to provide information on the different ways to work as a team for a WCM web site with MOSS 2007.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I believe that MOSS is large enough that a "one size / fit all" approach is unlikely.&amp;nbsp; There are simply too many variables.&amp;nbsp; Fortunately, I believe that what myself and awesome people I've worked with have overcome most issues and we have automated most deployment procedures.&amp;nbsp; I also believe that most of this knowledge will likely apply to other MOSS scenarios such as Document Management.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;This post applies to : &lt;/strong&gt;Microsoft Office SharePoint 2007 (based on real-life deployments pre-SP1), Microsoft Office SharePoint Designer 2007, Microsoft Visual Studio 2005 Team System, Microsoft Team Foundation Server (not required but nice to have).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Contents&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="#overview"&gt;Overview&lt;/a&gt;  &lt;li&gt;&lt;a href="#itlifecycle"&gt;IT oriented lifecycle with multiple environments&lt;/a&gt;  &lt;li&gt;&lt;a href="#htmllifecycle"&gt;HTML oriented lifecycle&lt;/a&gt;  &lt;li&gt;&lt;a href="#contentdeployment"&gt;A primer on SharePoint's Content Deployment&lt;/a&gt;  &lt;li&gt;&lt;a href="#solutions"&gt;Solutions for deploying SharePoint artifacts&lt;/a&gt;  &lt;li&gt;&lt;a href="#primerfeature"&gt;A primer on SharePoint Features&lt;/a&gt;  &lt;li&gt;&lt;a href="#primerwsp"&gt;A primer on SharePoint Solution Packages (WSP)&lt;/a&gt;  &lt;li&gt;&lt;a href="#primerapi"&gt;A primer on SharePoint APIs&lt;/a&gt;  &lt;li&gt;&lt;a href="#featuresvsapis"&gt;Features versus SharePoint APIs&lt;/a&gt;  &lt;li&gt;&lt;a href="#vm"&gt;A note on using Virtual Machines with SharePoint&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="overview"&gt;Overview&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;What this post will contain is directions and guidance on how to achieve a working multi-environment team-based development lifecycle for WCM with MOSS 2007.&amp;nbsp; Unfortunately, for legal purposes, I cannot offer all STSADM extensions, Event Handlers, Features, and other code artifacts we developed for specific entities.&amp;nbsp; While I may eventually create a more "blank code version", this isn't available at the moment.&amp;nbsp; However, the how-to knowledge should be relatively easy for developers.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In my experience, there are 2 primary types of development topologies in a MOSS WCM project:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;IT oriented lifecycle with multiple environments&lt;/strong&gt; such as :  &lt;ol&gt; &lt;li&gt;Individual development (while team-based)  &lt;li&gt;Integrated testing  &lt;li&gt;Staging  &lt;li&gt;Production&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;&lt;strong&gt;HTML oriented lifecycle&lt;/strong&gt; with 1 (production only) or 2 environments (staging + production)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The main differences between the 2 is where your "base environment" is and where you allow "SharePoint Designer users" to act.&amp;nbsp; In an IT oriented lifecycle, every deployment follows a strict cycle of testing, staging, and scheduled deployment to production for all artifacts.&amp;nbsp; In an HTML oriented lifecycle, that may be true for "code artifacts" but you may want to have web integrators use SharePoint Designer directly in the staging environment and/or production.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Obviously, there are advantages and disadvantages for both sides :)&amp;nbsp; I'll try to describe them to the best of my knowledge, but first, I have to explain what Content Deployment is and why it's not meant for development environments:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="itlifecycle"&gt;IT oriented lifecycle with multiple environments&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;What I call an IT oriented lifecycle is when you already have a development lifecycle in place.&amp;nbsp; Often case, this is for secure or critical environments where downtime is not acceptable.&amp;nbsp; A secure close-to-production Staging environment is usually available in order to test deployments before doing them in Production.&amp;nbsp; You will want minimal steps to deploy as the deployment may be done by a 3rd party who may not have as much SharePoint experience and who's goal is to maintain the environment, not debug it.&amp;nbsp; This lifecycle is more typical for Intranet web sites.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Developers&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;When you have this environment in place, are you are likely to have separate developer environments as well as an integrated environment.&amp;nbsp; First of all, let's talk about the separate developer environments.&amp;nbsp; You can take a look at this general Team-Based Development document on MSDN : &lt;a title="Team-Based Development in Microsoft Office SharePoint Server 2007" href="http://msdn2.microsoft.com/en-us/library/bb428899.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb428899.aspx&lt;/a&gt; for more information.&amp;nbsp; Basically, in order to develop MOSS artifacts such as:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ASP.NET Web Parts  &lt;li&gt;MOSS library Event Handlers  &lt;li&gt;Custom Workflows  &lt;li&gt;ASP.NET User or custom controls to use in MOSS  &lt;li&gt;STSADM extensions  &lt;li&gt;Expression Builders  &lt;li&gt;BDC related code  &lt;li&gt;Feature or SharePoint solutions (WSP) event handlers&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;... a developer requires to have MOSS installed on the same machine as Visual Studio.&amp;nbsp; That will allow him to develop and debug his artifacts without impacting anyone else.&amp;nbsp; Note that, often case, in order for a developer to be effective, he will require the same page layouts, master pages, and other "graphical artifacts" to completely test his development.&amp;nbsp; The deployment process has to allow a developer to receive graphical updates without scraping his complete site collection.&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/ReallifeTeamDevelopmentforWebContentMana_102C5/IT_oriented_lifecycle_simple_4.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="350" alt="IT_oriented_lifecycle_simple" src="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/ReallifeTeamDevelopmentforWebContentMana_102C5/IT_oriented_lifecycle_simple_thumb_1.jpg" width="533" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Web integrators&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;For the web integrators doing graphical work and layouts, they do not require a separate development environment.&amp;nbsp; The best solution is for them to have SharePoint Designer (and their graphical design application) on their workstation and all of them should access the same MOSS server.&amp;nbsp; If working on the same Site Collection, SharePoint Designer may be challenging at times and requires some quirks (at least, pre-SP1).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Sometimes, for web integrators who already had their tools prior to developing for SharePoint, I found it easier for them to design their layouts outside first with the tools they know best.&amp;nbsp; Obviously, knowledge of ASP.NET, Master Pages, and SharePoint will help having an easier transition to SharePoint after.&amp;nbsp; Once their layout is as desired in their respective tools, they can then move that content in SharePoint Designer and apply the required updates to work in a SharePoint world.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The MOSS server they work on should also receive development updates when they are at least unit-tested.&amp;nbsp; This update should occurs outside of their working hours if possible and possibly be automated.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Staging&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The Staging environment is where you want your customers to first see the end results of their web site.&amp;nbsp; This environment has to be stable and is probably not updated frequently.&amp;nbsp; This is also where you test your complete deployment process.&amp;nbsp; It's not unusual that non-SharePoint resources execute the deployment or it may even be managed by a 3rd party.&amp;nbsp; The process has to be as transparent and automated as possible.&amp;nbsp; This will allow to validate how the deployment to production will occur.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This environment is also often where you have all components similar to the production and hopefully a multi-server MOSS farm.&amp;nbsp; That allows other type of testing (i.e.: deploying WSP across multiple servers, deployment of MOSS hotfixes in a farm, etc.).&amp;nbsp; The network may also be more constrained/secured.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Production&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This is the environment where everything has to run smoothly.&amp;nbsp; The deployment process should be the same as the Staging environment.&amp;nbsp; Authoring occurs here, either on the same site collection or a different one (the site collection could even be in a different farm if desired).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;It's clear that, with that many environment, an automated solution to deploy to all of these environments has to be elaborated.&amp;nbsp; Unfortunately, the only one available with the product is not meant for these deployments.&amp;nbsp; SharePoint Features and SharePoint Solution projects are a big key to the solution but may be incomplete depending on your scenarios (as they have been in my experience).&amp;nbsp; I will cover Features, Solutions, and alternatives further.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The main observation on what I call IT focused lifecycle is that the "SharePoint Designer" role is not a heavy role and updates to page layouts are streamlined through tested IT deployments.&amp;nbsp; Designers aren't able to use Designer directly in Staging or Production.&amp;nbsp; Let's see the HTML oriented lifecycle.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="#htmllifecycle"&gt;HTML oriented lifecycle&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;What I call an HTML oriented lifecycle is where your web site requires frequent layout updates.&amp;nbsp; Your designers are likely to be close to the authors rather than the developers.&amp;nbsp; This can be typical for highly frequented Internet web sites.&amp;nbsp; Essentially, the same roles seen with the IT lifecycle has to be fulfilled, however, since developers are higher up in the chain, the "bubbling down" of their work may not be as obvious and less controlled.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/ReallifeTeamDevelopmentforWebContentMana_102C5/HTML_oriented_lifecycle_simple_4.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="454" alt="HTML_oriented_lifecycle_simple" src="http://blogs.msdn.com/blogfiles/maximeb/WindowsLiveWriter/ReallifeTeamDevelopmentforWebContentMana_102C5/HTML_oriented_lifecycle_simple_thumb_1.jpg" width="530" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Developers&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Developers essentially do the same thing as in the IT lifecycle.&amp;nbsp; Integrated testing is done similarly as before on a centralized server that receives more frequent updates from the designers.&amp;nbsp; The integrated testing environment acts as a staging for the development artifacts.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Web integrators&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The main difference of this lifecycle reside here.&amp;nbsp; Web integrators are doing daily updates to layouts on an Authoring Site Collection.&amp;nbsp; They might even be "power authors" that also manage content.&amp;nbsp; They often work directly in the production environment albeit a different Site Collection that may or not be in a different MOSS farm than the Publishing Site Collection.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;This allows them to easily deploy layout updates without requiring an IT deployment that is usually more complicated or constrained.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Staging&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The real staging environment is really the Authoring Site Collection since this is the origin for all layouts.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Production&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This environment will be the same as before with the exception that SharePoint Designer is allowed on the Authoring Site Collection.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;As you can see, there are similarities in the 2 lifecycles, however, from an architecture perspective, there are differences when you want to extract designer updates.&amp;nbsp; For example, in the IT lifecycle, we can link the integrated environment with a Source Control (Team Foundation Server for example) and generate builds.&amp;nbsp; The same does not easily apply to the HTML lifecycle as your source control environment is unlikely to be in the same network environment and you will rather want to schedule extracts of the graphical artifacts, copy them to the development environment, and then create a build for developers.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Also, while I've seen both topologies in the field, one could debate why would designers need to update layouts so frequently.&amp;nbsp; In my opinion, if you design your layouts correctly and provide the correct level of customization, you should probably not need updates frequently and you might be able to work out with the IT oriented lifecycle.&amp;nbsp; I wanted to discuss about the 2 main scenarios I've experienced and provide solutions for both.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now that we have seen the 2 lifecycles, I want to discuss Content deployment quickly to assert why it isn't a viable solution for deploying on all environments.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="contentdeployment"&gt;A primer on SharePoint's Content Deployment&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Content Deployment is a SharePoint feature that allows a &lt;u&gt;complete site collection&lt;/u&gt; to be deployed from a source to a destination.&amp;nbsp; These 2 environments can be in the same farm or a different farm.&amp;nbsp; This is done through the Operations tab of the Central Administration web site and requires simple configuration.&amp;nbsp; Basically, you create a path between 1 or 2 Central Administration servers (i.e.: 1 or 2 farms), and then you can create jobs to copy content on a scheduled or manual basis.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The &lt;strong&gt;primary requirement&lt;/strong&gt; is that the target or destination has to be a site collection with the &lt;strong&gt;Blank Site template&lt;/strong&gt; (of the same language of the source) and that all activated features to be installed but not activated at the destination.&amp;nbsp; When the first content deployment runs, it will copy all libraries and items to the destination and then activate the same features as the source.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This is very important and to explain it easily, take a look at the Publishing feature.&amp;nbsp; If you activate it, it creates the out of the box master pages, page layouts, and styles for a Publishing Web Site.&amp;nbsp; If you activate it before doing the first content deployment, it will create a "Style Library" with a different GUID than the source.&amp;nbsp; If you were to use content deployment, it would fail as there would be an item with the same name at the source with a different GUID and it won't accept to deploy it.&amp;nbsp; This is the same if you create custom features.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So in essence, since Content Deployment is used to have 2 sites that will be exactly be the same, it's primary use is for having a "staging authoring environment" where you author and test everything.&amp;nbsp; Then Content Deployment is used to update the production environment according to a schedule or a manual request.&amp;nbsp; Note that there are 3 variants of Content Deployment:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Through the Central Administration web site  &lt;li&gt;Through the STSADM -o import and STSADM -o export commands  &lt;li&gt;Through the APIs (Stephan Gossner wrote a great article about the APIs on his blog : &lt;a href="http://blogs.technet.com/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-1.aspx"&gt;http://blogs.technet.com/stefan_gossner/archive/2007/08/30/deep-dive-into-the-sharepoint-content-deployment-and-migration-api-part-1.aspx&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;A deployment job consists of 3 primary steps : &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Export (at the source).&amp;nbsp; This operation may be computer intensive.  &lt;li&gt;Transport (between the 2).&amp;nbsp; This is simply the file copy, however, there's a related article that can affect performance and I had to apply the fix for a customer.&amp;nbsp; It made the transport much faster.  &lt;li&gt;Import (at the destination).&amp;nbsp; This operation is not so computer intensive, yet very long to process.&amp;nbsp; I have cases where it takes less than 5 minutes to export and transport, and then 1h30min to import.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The Central Administration web site's Content Deployment interface allows you to schedule deployment jobs easily.&amp;nbsp; Unfortunately, you cannot separate the 3 steps so it's good if you only need to deploy to one environment.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Unfortunately, this is usually not an acceptable scenario to update &lt;em&gt;all&lt;/em&gt; environments such as Development or even Integrated Testing for the following reasons:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;You do not want multiple exports;  &lt;li&gt;The import process is long;  &lt;li&gt;It's not meant for destinations where you are also authoring on it (i.e.: developers testing their new web parts);  &lt;li&gt;It's not easy to "label" (as in Source Control labelling) a deployment.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Because of these concerns, other scenarios such as SharePoint Features, SharePoint Solution (WSP) projects, and the SharePoint APIs have to be explored and the following sections will elaborate on my findings for these technologies.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Note, &lt;/em&gt;&lt;a href="http://sharepointnutsandbolts.blogspot.com/"&gt;&lt;em&gt;Chris O'brien&lt;/em&gt;&lt;/a&gt;&lt;em&gt; also have great posts on Content Deployment and Features.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="solutions"&gt;Solutions for deploying SharePoint artifacts&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Now that we have a better understanding of what we are up against, let's look at what solutions are available to us.&amp;nbsp; Here are the possible solutions :&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Content Deployment  &lt;li&gt;Backup/Restore  &lt;li&gt;Export/Import through SharePoint Designer (i.e.: Personal Web Package)  &lt;li&gt;Publishing through SharePoint Designer  &lt;li&gt;SharePoint Solution Generator  &lt;li&gt;SharePoint Features  &lt;li&gt;SharePoint Solution Packages (WSP)  &lt;li&gt;SharePoint APIs&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There may be other possibilities that I'm unaware of but these are the ones I've tested with.&amp;nbsp; Note that this was done pre-SP1.&amp;nbsp; I'll work by elimination (and reduce the list dramatically :)):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Content Deployment : As stated previously, it's good only for equal environments so it's not practical for our scenarios;  &lt;li&gt;Backup/Restore : essentially the same as Content Deployment albeit much faster but less user friendly, not "scheduled", but usually with less errors/issues;  &lt;li&gt;Export/Import through SharePoint &amp;amp; Personal Web Package : My experience with it was ... very buggy.&amp;nbsp; I simply could not make it work correctly; for example, it created a 2nd Master Page Gallery (after renaming the original) at the destination when I tried it.&amp;nbsp; It didn't seem like a reliable solution, at least, before SP1;  &lt;li&gt;Publishing through SharePoint Designer is similar to Content Deployment.&amp;nbsp; I'm not sure if it uses the same Web Services or not, but the end result is the same with a confusing user experience;  &lt;li&gt;SharePoint Solution Generator : This tool is available through the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=19f21e5e-b715-4f0c-b959-8c6dcbdc1057&amp;amp;DisplayLang=en"&gt;WSS 3.0 Tools&lt;/a&gt;.&amp;nbsp; It's great to create site definitions, however, it doesn't work with the Publishing templates and isn't meant for WCM.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So we are left with 3 plausible solutions:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;SharePoint Features  &lt;li&gt;SharePoint Solution Packages (WSP)  &lt;li&gt;SharePoint APIs&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Let me start by summarizing each of them:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h2&gt;&lt;a name="#primerfeature"&gt;A primer on SharePoint Features&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;SharePoint Features are basically what SharePoint uses to deploy functionality to a SharePoint site.&amp;nbsp; For example, the Publishing feature is activated on a Blank Site to create a Publishing Web Site.&amp;nbsp; This will add the Style Libraries and the Master Pages gallery along with modifying the look &amp;amp; feel of your web site.&amp;nbsp; For example, the Site Actions will contain different actions than for a Collaboration web site.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;A SharePoint Feature consists of a manifest Xml file that is deployed in the 12 hive.&amp;nbsp; That manifest in turn specify what actions need to be done to the web site.&amp;nbsp; These actions can be from simply copying files (i.e.: page layouts, master pages, CSS, images, etc.) for creating the baseline of your web site, it can create site columns and content types, as well as even executing any .NET code you want through Event Handlers.&amp;nbsp; On paper, it's &lt;em&gt;the&lt;/em&gt; solution and SharePoint itself uses it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Unfortunately, creating features can be challenging as it requires knowing CAML.&amp;nbsp; CAML is the language definition for configuring any features.&amp;nbsp; While MSDN provides documentation for lots of the Xml elements available, MSDN is meant more as a reference, not for training.&amp;nbsp; Also, while I still create SharePoint Features today, I do not use is exclusively anymore as I found some bugs &amp;amp; quirks that I couldn't workaround well.&amp;nbsp; Particularly, using it to provision the baseline files.&amp;nbsp; For some other scenarios (Timer Jobs or Site Actions for example), Features are still the best solution.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="#primerwsp"&gt;A primer on SharePoint Solution Packages (WSP)&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;WSP files are really CAB files that SharePoint knows what to do with it.&amp;nbsp; The goal of SharePoint Solution Packages are to deploy a package once to the &lt;em&gt;MOSS Farm&lt;/em&gt; and then it will deploy and execute what's required for each server of the farm.&amp;nbsp; It includes even more features such as an interface in the Central Administration where you can schedule when you want a solution to be deployed or even retracted!&amp;nbsp; And to sugarcoat it, if you add servers to a farm, it will apply the solution packages automatically.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;** Update ** : A colleague pointed me to the fact that solution will even automatically deploy after a server crash.&amp;nbsp; His scenario was that a solution was deployed in a farm and one of the servers had crashed.&amp;nbsp; When they fixed the servers, they simply had to bring it back online and the solution was automatically deployed to that server without any manual operation (no wizard execution).&amp;nbsp; ** /end Update**&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Common scenarios include copying file to the GAC, modifying the web.config (using &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx"&gt;SPWebConfigModification&lt;/a&gt; class), copying resources files, and copying physical files to the web site.&amp;nbsp; SharePoint Solution Packages are a must to most SharePoint deployments.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="#primerapi"&gt;A primer on SharePoint APIs&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;SharePoint APIs might seem to be a curious addition to this list as it's not really a deployment mechanism, or at least, not yet a user-friendly one.&amp;nbsp; However, while there may be bugs with SharePoint Features and Content Deployment in some cases, the SharePoint APIs is very robust and complete.&amp;nbsp; More so, strong developers can find more code samples as well as using tools such as Intellisense to &lt;em&gt;guess&lt;/em&gt; possible solutions.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In your deployments, you are likely to have to use APIs for Event Handlers or web.config modifications, at the least, but my reason for mentioning it as a deployment alternative is that we ended up replacing some "Feature" scenarios that we had issue with for a complete SharePoint API solution.&amp;nbsp; Here's some operations that we automated, by creating custom STSADM extensions, for deploying complete Publishing web sites:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create Site Columns including Lookup columns  &lt;li&gt;Create and update Content Types  &lt;li&gt;Create and update Master Pages, Page Layouts, CSS, Javascript, images, and other "baseline files" for a web site  &lt;li&gt;Create Publishing Sites and Pages with content (great for creating content-less (or near content-less) landing pages as well.&amp;nbsp; We also create an input file to create complete files with content so that, at a click, we can create a fully working development environment with content)  &lt;li&gt;Create SharePoint lists and referenced by Lookup columns  &lt;li&gt;Update Available Page Layouts for a publishing site  &lt;li&gt;Update Default page for a publishing site  &lt;li&gt;Create SharePoint Permission set and groups  &lt;li&gt;Update Versioning information for publishing site (i.e.: number of major &amp;amp; minor versions, activate/deactivate workflow requirement, etc.)  &lt;li&gt;Update a site's master page  &lt;li&gt;Update Publishing navigation settings (hiding sites/pages, inheriting from parent (or not) navigation, etc.)  &lt;li&gt;and more!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Since lots of these cannot or should not be done by Features, we had to drill the APIs extensively.&amp;nbsp; When strong (showstopper) issues came up for some Features scenarios, we shifted our focus to the APIs.&amp;nbsp; Let me go into more details on the pros &amp;amp; cons of Features versus APIs.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="featuresvsapis"&gt;Features versus SharePoint APIs&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Features can be a great reusable way of deploying new functionality to a SharePoint site.&amp;nbsp; A SharePoint Feature is a set of functions, settings, and files to be added to a site (there are different levels of features but I'll keep it simple for now) when activated.&amp;nbsp; It's a great reusable mechanism for lots of scenarios such as adding a &lt;a href="http://msdn2.microsoft.com/en-us/library/bb418728.aspx"&gt;Custom Site Action&lt;/a&gt;, &lt;a href="http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx"&gt;adding a Timer Job&lt;/a&gt;, and to some level, &lt;a href="http://www.katriendg.com/aboutdotnet/2007_3_13_publishing_contenttypes_feature.aspx"&gt;adding columns and content types&lt;/a&gt;.&amp;nbsp; You can take a look at this MSDN article for starting to work with Features : &lt;a title="Working with Features" href="http://msdn2.microsoft.com/en-us/library/ms460318.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms460318.aspx&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;On one of my projects following the IT Lifecycle, we tried to use Features as much as possible since it was, for us, how reusable deployment artifacts should have been.&amp;nbsp; Unfortunately, we ran into some severe issues when using them for Columns/Content Types and files such as Page Layouts (ASPX), Master Pages, CSS, JavaScripts, and images.&amp;nbsp; While we have successfully used features for other artifacts as mentioned in the previous paragraph, our feature that creates the "web site's baseline" with all the right master pages using custom CSS, images, and scripts;&amp;nbsp; is being phased out.&amp;nbsp; Here are the issues that we ran into:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Sometimes, the BlobCache may corrupt some files that are deployed through a feature.&amp;nbsp; This requires some explanation as the first goal of the BlobCache is to physically cache a file on the Web Front-End instead of fetching it from the database all the time.&amp;nbsp; Since the feature already brings the file on the disk (in the 12 hive), BlobCache wouldn't be necessary.&amp;nbsp; Unfortunately, the BlobCache is also the mechanism by which the Cache-Control Http header is set and that header is the one that let a browser (or proxy) cache a file instead of making it expire right now.&amp;nbsp; We experienced 2 types of corruptions, one where the files were half-correct, and half-blacked-out; one where JS and CSS were simply cropped and were missing content.&amp;nbsp; Note that all files were correct in the feature but simply not in the BlobCache folder.&amp;nbsp; Luckily, we use Content Deployment from Authoring to Publishing and that makes it so that the files are now in the database and there is no corruption then.&amp;nbsp; While MOSS itself uses files in features (i.e.: _layouts or styles library), there is a special Virtual Directory for them and the BlobCache doesn't treat them the same way.  &lt;li&gt;If you want to export (i.e.: content deployment) a site collection (the production/publishing environment) and import them in a test environment, a feature update will not work since the Import process will put the files in the database (similar to unghosted files, but really, it's not reading the feature at that point).  &lt;li&gt;If you update a Content Type and add a new column to it, the column will not be propagated to all libraries (this is not related to the checkbox to force inherit settings on child content types).&amp;nbsp; Let me explain a bit more, when you create a Site Column or a Content Type at the site collection level, and then you create a page that uses that content type in a sub-site's Pages library, the content type and columns are &lt;u&gt;copied&lt;/u&gt; to the library.&amp;nbsp; When you add a column to a content type through the GUI or the APIs, it will automatically add the column in all libraries where the content type is used.&amp;nbsp; Unfortunately, a Feature simply does not do it.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;While number 1 was annoying for the authoring environment, and number 3 wasn't happening often enough;&amp;nbsp; number 2 is the real issue where we hadn't found a workaround yet.&amp;nbsp; Plus we knew that the APIs work great for all of them.&amp;nbsp; What we ended up creating was an STSADM extension that reads the same CAML files that this feature used and:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Creates the site columns  &lt;li&gt;Create the content types  &lt;li&gt;Add page layouts and master pages  &lt;li&gt;Add files (CSS, GIF, JPG, PNG, JS) in any libraries&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;We still package a WSP that runs the commands, actually, we could still use a Feature that adds and removes the files when activated/deactivated (through code) instead of using the CAML definition of provisioned files.&amp;nbsp; In my experience with Publishing Web Site, it's much safer in the database than in physical files.&amp;nbsp; Also, learning how to create columns and content types in .NET, or to add files in the database, is very easy and you'll have access to Intellisense.&amp;nbsp; Learning CAML and try all the scenarios (updating an environment, updating an environment that uses Content Deployment, versioning of documents deployed through features, etc.) is likely to be more challenging and time consuming. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The next section is for detail's sake and because I have lots of questions on Virtual environments for developing in SharePoint.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;&lt;a name="vm"&gt;A note on using Virtual Machines with SharePoint&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;While SharePoint can work correctly in a virtual environment, you have to be aware that the solution is not officially supported by Microsoft unless it's on Virtual Server.&amp;nbsp; What Microsoft Support will offer is what they call "Best effort support" where they'll help until they cannot reproduce the error and may ask to reproduce the error on a non-virtual environment.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Also, in my experience, I wouldn't recommend virtual environment for production web sites.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;For development and up to staging however, I have seen both successful and very sluggish environments.&amp;nbsp; Personally, if going VM, I recommend the following parameters:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Have at least 2 GB of RAM  &lt;li&gt;You can use a single SQL for all developers  &lt;li&gt;SQL will offer better performance if not in a VM  &lt;li&gt;SQL's disks should be physical if possible as I've seen saturated SAN scenarios for having a few MOSS developers&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In a coming article, I'll detail how we used Team Foundation Server to synchronize SharePoint Designer users with the main source database which allowed us to easily create WSP packages.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7101724" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint+Architecture+_2600_+Design/default.aspx">SharePoint Architecture &amp; Design</category></item><item><title>Incremental content deployment completes successfully with errors mentioning that the name is already is used</title><link>http://blogs.msdn.com/maximeb/archive/2007/11/20/incremental-content-deployment-completes-successfully-with-errors-mentioning-that-the-name-is-already-is-used.aspx</link><pubDate>Wed, 21 Nov 2007 02:23:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6446074</guid><dc:creator>MaximeB</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/6446074.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=6446074</wfw:commentRss><description>&lt;p&gt;I often get the question as to why we have this error when using an incremental Content Deployment:&amp;nbsp; &lt;strong&gt;The specified file is already in used&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Simply, that message appears if the authors have created a file, deleted it, and recreated another file with the same name.&amp;nbsp; All that before a single incremental content deployment (or Quick Deploy for that file) has occured.&amp;nbsp; Basically, the incremental will process the "delete" action after the "create" action and that's the standard error for that.&amp;nbsp; Fortunately, the deployment job will keep going as it's not a fault error;&amp;nbsp; unfortunately, you'll have a 404 when accessing the document.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you do not want that issue, simply overwrite files instead of delete+recreate.&amp;nbsp; Otherwise, you'll be stuck having to use Full Content Deployment all the time.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;**UPDATE** : The new WSS post-SP1 rollup, &lt;a href="http://support.microsoft.com/kb/941422/en-us"&gt;KB941422&lt;/a&gt;, may contain the fix as it seems to fix a similar issue when you recreated a deleted list.&amp;nbsp; I'm hoping it works for list items as well. **/UPDATE**&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://ca.portailde.desjardins.com/_admin/DeploymentEventDetails.aspx?ReportId=e6bcd2db%2D33a2%2D475b%2D8f3d%2D8ead3e8e4ac2&amp;amp;EventIndex=0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6446074" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Content Deployment does not fix links (at import) when the source has been deployed with features</title><link>http://blogs.msdn.com/maximeb/archive/2007/11/20/content-deployment-does-not-fix-links-at-import-when-the-source-has-been-deployed-with-features.aspx</link><pubDate>Wed, 21 Nov 2007 02:20:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6446008</guid><dc:creator>MaximeB</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/6446008.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=6446008</wfw:commentRss><description>&lt;p&gt;I ran into this last week when making a spot check on the "content deployment destination", the links and images that were supplied by authors in the Publishing Html fields were still pointing at the "source".&amp;nbsp; It turns out that Content Deployment doesn't work correctly when using features.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here's a quick rundown of the issue:&amp;nbsp; The "source" or authoring farm is a single-server SharePoint farm where we have deployed site columns, content types, page layouts, master pages, along with images &amp;amp; stylesheets.&amp;nbsp; The destination is a multiple server farm that simply receives the unactivated feature on a blank site and we use content deployment to bring the content along with activating the feature.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So far, the issue is only on links in RichHtmlField columns for both links and images.&amp;nbsp; Unfortunately, there is no fix for this yet from Microsoft and it's not planned (yet, we are pushing!).&amp;nbsp; The only OOB workaround is to create your links, in your authoring environment, to point directly for your destination.&amp;nbsp; Obviously, that's less than ideal.&amp;nbsp; I'll work on an HttpModule to do a RegEx to replace "source" to "destination" and the issue will disappear in a not-so-elegant-but-works-great way :)&amp;nbsp; I'll post it when I'll have the time.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6446008" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Slow Content Deployment transportation / TCP connection was forcibly closed</title><link>http://blogs.msdn.com/maximeb/archive/2007/11/17/slow-content-deployment-transportation-tcp-connection-was-forcibly-closed.aspx</link><pubDate>Sun, 18 Nov 2007 02:08:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6345887</guid><dc:creator>MaximeB</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/6345887.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=6345887</wfw:commentRss><description>&lt;p&gt;We were having issues with slow Content Deployment for the &lt;strong&gt;transporting&lt;/strong&gt; phase and it was sometimes failing with this error:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Publishing: Content deployment job failed. Error: 'System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---&amp;gt; System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---&amp;gt; System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;A collegue of mine sent me something about TCP chimney (first time I heard about this!) and a simple command to run in the command line : &lt;strong&gt;Netsh int ip set chimney ENABLED&lt;/strong&gt;.&amp;nbsp; After this, the transporting phase was much faster and without errors.&amp;nbsp; You can find the information about this command from &lt;a href="http://support.microsoft.com/kb/912222"&gt;knowledge base 912222&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6345887" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>BlobCache woes, how to work (clean) correctly with it, and what to expect when using it with SharePoint features</title><link>http://blogs.msdn.com/maximeb/archive/2007/11/17/blobcache-woes-how-to-work-clean-correctly-with-it-and-what-to-expect-when-using-it-with-sharepoint-features.aspx</link><pubDate>Sat, 17 Nov 2007 12:59:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6338077</guid><dc:creator>MaximeB</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/6338077.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=6338077</wfw:commentRss><description>&lt;p&gt;I ran into an issue with BlobCache lately where it was sending incorrect Http headers.&amp;nbsp; Basically, all files were sending 2 http headers:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Exires : (15 days behind)&lt;/li&gt; &lt;li&gt;cache-control: private, max-age=0&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Yes, "exires", not "expires", so not only we have a bug but also a typo :)&amp;nbsp; Anyway, this was ensuring that all static content wasn't properly cached by proxies and browsers and it was impacting performance big time.&amp;nbsp; Now, before going into the details of this, let's explain what is BlobCache first.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The main function of the BlobCache is to cache large objects from the database to the web front-ends.&amp;nbsp; Its configuration is simple, you specify which extensions you want it to trap, a local folder to drop the cached files on the WFEs, an expiration (in seconds), and whether or not to enable it.&amp;nbsp; Sounds fairly simple and it is (until it doesn't work correctly).&amp;nbsp; Now BlobCache has a secondary function which is to send "better" Http Headers to clients so that they can also cache the files along the way.&amp;nbsp; Basically, it will send a "Cache-Control: public, max-age=86400" to the browser and by having it public, it means that anything along the way (proxies) can cache it.&amp;nbsp; The 86400 is the default value for max-age if you don't specify it and it means that the file will expire in 1 day.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In my case, I am using features to deploy the static CSS, JS, GIF, JPG (along with master pages &amp;amp; page layouts); this means that they are already on disk at each WFEs.&amp;nbsp; Technically, I don't care to have BlobCache for those and would only need it for images that authors add to their publishing web site.&amp;nbsp; What I really need for those files is the "cache-control" header that the BlobCache sends.&amp;nbsp; I also have a setup with 2 SharePoint farm: 1) for authors only, and 2) we use content deployment to publish the first farm to the 2nd for visitors.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;First problem encountered: BlobCache doesn't always work correctly with the authoring farm.&amp;nbsp; For some (still unknown) reasons, files that are coming from a feature, which means that they aren't in the database, are sometimes corrupted.&amp;nbsp; I had 2 different behaviours: 1) images were half working where I could see parts of the images and the rest was blacked out;&amp;nbsp; and 2) JavaScripts files are simply cropped. I haven't resolved that one yet; I was able to determine that it only was acting like this with files that are already on disk.&amp;nbsp; For example, I unghosted a corrupted file and it was correct at that moment.&amp;nbsp; I also did a "revert to definition" and it kept working (so I'm assuming that it's still in the database but to its original version).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Fortunately, when you use Content Deployment, any files that are in Style Library will be sent to the destination, even if they come from a feature.&amp;nbsp; Of course, it requires the feature to be installed (but not activated) at the destination but it will only activate it at the end of the import process.&amp;nbsp; That means that, at the destination, the files are in the database and I do not have a BlobCache issue when files are in the database.&amp;nbsp; So normally, in the production environment, my cache-control header should be fine.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And it was until it stopped working after a deployment.&amp;nbsp; When it started failing, it was showing the 2 headers I wrote in the beginning.&amp;nbsp; I tried flushing it through the GUI (Site Settings - Site Collection Object Cache - Force flush on &lt;strong&gt;this&lt;/strong&gt; server), deleting the files manually on disk, doing an IIS reset; but I kept having the issue.&amp;nbsp; Then I found the following :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;If you have multiple zones (i.e.: you extend a web application), each of them has its own BlobCache folder.&amp;nbsp; It also means that the "Force flush" only works for the zone that you are pointing to in the URL.&amp;nbsp; Also, it only flushes it on the server you are on (in the URL).&amp;nbsp;&amp;nbsp; So if you have a load-balanced URL, play with a host file :)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In my tests, the ideal way to make it work is to, for all servers:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Use the GUI to flush the BlobCache for all zones&lt;/li&gt; &lt;li&gt;Optionally, delete the content of your C:\BlobCache (by default) folder&lt;/li&gt; &lt;li&gt;Use IISRESET&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I tried this several times and it was fixing my issues with the incorrect Http Headers and now SharePoint had much better performance.&amp;nbsp; I still have to find out why it's not working with items that aren't in the database (for my authoring environment).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6338077" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>Content Deployment : The URL "Style Library/en-us" is invalid</title><link>http://blogs.msdn.com/maximeb/archive/2007/10/10/content-deployment-the-url-style-library-en-us-is-invalid.aspx</link><pubDate>Thu, 11 Oct 2007 01:00:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5394818</guid><dc:creator>MaximeB</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/5394818.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=5394818</wfw:commentRss><description>&lt;p&gt;I came across this error yesterday while testing a Content Deployment for a customer and had this error "The URL "Style Library/en-US" is invalid ..." with the stack trace mentioning that it was updating a File or Folder.&amp;nbsp; The kind of message where you say "yeah I know, I'm deploying this so you should bring it up!".&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I couldn't find what was causing the issue.&amp;nbsp; For a recap, when you use first use Content Deployment (for a Publishing Site), your destination must be a "Blank Site" of the same language than the source's site collection language.&amp;nbsp; However, a coworker mentioned to me another issue he had with content deployment and the solution was to add another step prior to the first deployment :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;For a successful Publishing Content deployment, your destination must have first created a Publishing Site collection, deleted it, and then created the Blank Site.&amp;nbsp; That will add elements to the Web Application and your Content Deployment will complete successfully after that.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I had heard of issues where Resource files weren't fully brought by the Content Deployment, that would also fix it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5394818" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/STSADM+Extensions/default.aspx">STSADM Extensions</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item><item><title>My STSADM extension toolbox</title><link>http://blogs.msdn.com/maximeb/archive/2007/10/06/my-stsadm-extension-toolbox.aspx</link><pubDate>Sat, 06 Oct 2007 21:34:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5320345</guid><dc:creator>MaximeB</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/maximeb/comments/5320345.aspx</comments><wfw:commentRss>http://blogs.msdn.com/maximeb/commentrss.aspx?PostID=5320345</wfw:commentRss><description>&lt;p&gt;Here's a listing of custom STSADM extensions myself and my coworkers have created.&amp;nbsp; Feel free to ask questions regarding the namespaces for these.&amp;nbsp; I'd like to thank those who contributed to this : Stéphane Perron, Louis Fournier, and Vincent Trépanier at &lt;a href="http://www.orckestra.com"&gt;Orckestra&lt;/a&gt;, an outstanding partner for SharePoint, Biztalk, and Commerce in Montreal; and a co-worker Philippe Bédard.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;BaseStsAdmExtension&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The basic class for all my extensions.&amp;nbsp; It adds up default classes for a common output, verbose output switch, Url switch, and a wait switch to allow a developer to attach to the process.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ContentBuilder&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Generates all columns, content types, page layouts, style sheets, site collection images, and master pages in a Feature.&amp;nbsp; The "files" have to be exported (and we have another mechanism for that) in order to import them in another site.&amp;nbsp; This was originally taken from &lt;a href="http://andrewconnell.com/blog/articles/MossStsadmWcmCommands.aspx"&gt;http://andrewconnell.com/blog/articles/MossStsadmWcmCommands.aspx&lt;/a&gt; and then updated to fix a few issues and add more elements.&amp;nbsp; You can also find information on Features here : &lt;a title="Working with Features" href="http://msdn2.microsoft.com/ms460318.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms460318.aspx&lt;/a&gt; and here &lt;a href="http://www.codeproject.com/spoint/ExtendingSPS.asp"&gt;http://www.codeproject.com/spoint/ExtendingSPS.asp&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;PreloadWebSites&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;A simple extension that reads an input Xml file and hits all the specified Urls with HttpWebRequests.&amp;nbsp; This helps loading specific content types &amp;amp; page layouts in the JIT after you ran the &lt;a href="http://blogs.msdn.com/joelo/archive/2006/08/13/697044.aspx"&gt;Warm up scripts&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;PublishAllItems&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;An extension that will approve items in SharePoint.&amp;nbsp; It has 2 main switches, one to approve "web integrators" libraries (Master pages, Style Library, Site Collection images); and one to approve "Pages" libraries starting a given path and downward.&amp;nbsp; It will also cancel any workflow associated with the element's it's approving.&amp;nbsp; You can also take a look at the one available at &lt;a href="http://stsadm.blogspot.com/2007/08/stsadm-commands_09.html"&gt;http://stsadm.blogspot.com/2007/08/stsadm-commands_09.html&lt;/a&gt; as it ended up being very similar to mine.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ResetMasterPages&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This one I had to create to automate the master pages settings when using Content Deployment.&amp;nbsp; There is a known bug where, when doing the first Full Content Deployment, the master page parameters aren't kept at the destination.&amp;nbsp; This will bring them over.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ListBuilder&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This will read an input Xml file and create custom lists with custom columns.&amp;nbsp; It can also add Lookup site columns and add those columns to content types.&amp;nbsp; This was done because we used Features to add content types but found out that a list was always recreated and used a different GUID.&amp;nbsp; We couldn't provision Lookup columns to them and if we used a Feature to bring a list over, then the GUID was changing every time and causing issues with Content Deployment.&amp;nbsp; It can also provision a BDC column in the list.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;SiteBuilder&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This extension will create a whole lot of things for a portal : sites with title/description, content pages with content (fields) values, set master pages, set available page layouts, set the content types per libraries (to fix a little bug), and set security (coming soon).&amp;nbsp; It's great when you have features for the containers/artefacts and you want to add a default&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;AddLocalFile / DeleteLocalFile&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;We needed a little help to add and remove files other than through Features.&amp;nbsp; Basically, we first had the issue when deploying updates to ItemStyles.xsl and other OOB files.&amp;nbsp; This extension was deleting the OOB files from that web site and then applying the ones from our Feature (and we needed it in ItemStyles and couldn't have a custom file).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;AddPublishingWorkflow/RemovePublishingWorkflow&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This one is in development;I want to be able to add and remove the Publishing workflow for all sites so that we can switch between requiring a "publish" or an "approve" through the extension.&amp;nbsp; We often want publishing only in development but an approval requirement for other environments; this extension would permit this.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There's also a bunch of custom extensions available by Gary Lapointe at the following address : &lt;a href="http://stsadm.blogspot.com/2007/08/stsadm-commands_09.html"&gt;http://stsadm.blogspot.com/2007/08/stsadm-commands_09.html&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'll update this list with blog links when I create them and add new extensions.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Maxime&lt;/p&gt; &lt;p&gt;&lt;embed src="http://card.mygamercard.net/Mumren.swf" width="198" height="135" type="application/x-shockwave-flash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5320345" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/maximeb/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Web+Content+Management/default.aspx">Web Content Management</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/STSADM+Extensions/default.aspx">STSADM Extensions</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Variations/default.aspx">Variations</category><category domain="http://blogs.msdn.com/maximeb/archive/tags/Content+Deployment/default.aspx">Content Deployment</category></item></channel></rss>