<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Rich Finn - WSS</title>
    <link>http://blog.richfinn.net/blog/</link>
    <description>sharepointer</description>
    <language>en-us</language>
    <copyright>Rich Finn</copyright>
    <lastBuildDate>Wed, 13 Aug 2008 23:13:21 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>blog.richfinn.net@gmail.com</managingEditor>
    <webMaster>blog.richfinn.net@gmail.com</webMaster>
    <item>
      <trackback:ping>http://blog.richfinn.net/blog/Trackback.aspx?guid=fcf33971-919a-4086-8f53-8dd9d05d0b41</trackback:ping>
      <pingback:server>http://blog.richfinn.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.richfinn.net/blog/PermaLink,guid,fcf33971-919a-4086-8f53-8dd9d05d0b41.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.richfinn.net/blog/CommentView,guid,fcf33971-919a-4086-8f53-8dd9d05d0b41.aspx</wfw:comment>
      <wfw:commentRss>http://blog.richfinn.net/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fcf33971-919a-4086-8f53-8dd9d05d0b41</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Creating Features which contain custom Content Types or file provisioning modules
requires developers to write a lot of XML based on the wss.xsd. Content types require
custom column and content type definition files, along with the proper creation of
the content type IDs. File provisioning modules require the creation of module elements
which contain the information that will help properly push the files into the correct
lists when the Feature is activated. 
</p>
        <p>
This XML can be fairly daunting, time consuming, and frankly, not very exciting for
developers who just want to test their code. This holds especially true for developers
who are writing custom Features based on SharePoint's Publishing Feature, and this
is why I created <a href="http://www.codeplex.com/SPSource" target="_blank">SPSource</a>.
</p>
        <p>
SPSource helps by alleviating the need for developers to write these files by allowing
them to use the SharePoint UI and SharePoint Designer (SPD) as the source for the
files defined in the module elements, along with custom content types, and is meant
to be integrated with (and has been tested with) WSP creation tools such as <a href="http://www.codeplex.com/wspbuilder" target="_blank">WSPBuilder</a>, <a href="http://www.codeplex.com/stsdev" target="_blank">STSDev</a>,
and the <a href="http://www.codeplex.com/wspprojecttemplate" target="_blank">WSPProjectTemplate</a> as
either part of the build process, or separately as a CMD file at the root of the project.
By using the UI and SPD, items can be created and tested rapidly, then compiled into
the WSP for deployment using familiar tools.
</p>
        <p>
Executing BEFORE the creation of the WSP, any file that can be created using SharePoint
Designer in a document library, and any site content type created in the SharePoint
UI can be targeted and pulled down into Visual Studio for addition in a pre-existing
Visual Studio WSP project. SPSource will also create the file provisioning modules
and site Content Type/Column definition files, as well as the lines needed in the
ElementManifest section of the Feature.xml file.
</p>
        <p>
Some examples of how SPSource can help:
</p>
        <ul>
          <li>
Completely define a custom Publishing Feature using SPD and the SharePoint UI, creating
the master pages, page layouts, content types, style sheets, and images directly in
the content database. Once at a point where it's ready for deployment, run SPSource
against the project and pull everything into a pre-existing WSP. If changes are needed
in the markup, make them using SPD, and re-run SPSource. The files in the WSP will
be updated and ready for a solution upgrade. 
</li>
        </ul>
        <ul>
          <li>
Implement a class on an ASPX page (code behind) in SPD, and code that class in Visual
Studio, or add custom server controls to the markup in SPD. Push your assembly directly
to the GAC or bin as part of the build process, and the code-to-test time is much
faster, as the markup files are already in the content database. Once everything is
set, run SPSource again the project, and pull everything together into the WSP. 
</li>
        </ul>
        <ul>
          <li>
Add a custom Content Query Web Part (or RSS) .webpart file to the web part gallery,
and change the properties and settings for the new CQWP via the UI and SPD to use
custom XSL files that you add to the Style Library/XSL Style Sheets folder. Create
new ItemStyles, change the Headers, or add new parameters to the Main XSL. The XSL
files can be updated quickly using SPD, and changes can be seen right away. When all
is ready for integration into the WSP, execute SPSource against the new files and
create a new Feature for the new web part in minutes. 
</li>
        </ul>
        <p>
Eventually, I hope to get SPSource working with ListInstances and Workflows, but for
right now, it only works with Content Types and Modules.
</p>
        <p>
Check out this <a href="http://video.msn.com/video.aspx?vid=84c63487-8ad6-4e72-a88e-10f39b92135d" target="_blank">screencast</a> where
I create a custom Publishing Feature, with a new content type and page layout, execute
SPSource on my StsDev Visual Studio project, package it all up in a WSP, and deploy
in less than 15 minutes!
</p>
        <p>
          <a title="SPSource Publishing Feature Demo" href="http://video.msn.com/video.aspx?vid=84c63487-8ad6-4e72-a88e-10f39b92135d" target="_new">
            <img height="84" alt="SPSource Publishing Feature Demo" src="http://img2.catalog.video.msn.com/Image.aspx?uuid=84c63487-8ad6-4e72-a88e-10f39b92135d&amp;w=112&amp;h=84" width="112" border="0" />
            <br />
SPSource Publishing Feature Demo</a>
        </p>
        <p>
Here's a short walk-through example of how SPSource works:
</p>
        <p>
In the 'design' site, create a new Content Type for a Publishing page using the SharePoint
UI, adding some new columns<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_4.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="447" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_1.png" width="517" border="0" /></a></p>
        <p>
 
</p>
        <p>
In SharePoint Designer, create a new Page Layout based on the Content Type which was
just created<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_6.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="322" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_2.png" width="450" border="0" /></a></p>
        <p>
          <br />
Still in SharePoint Designer, add the new content field controls, a web part zone,
and some other markup to the new Page Layout, saving it to the 'design' site Master
Page Gallery<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_8.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="314" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_3.png" width="573" border="0" /></a> <br /><br /><br />
Now, over in a Visual Studio project, which in this example is based on StsDev, create
a new Feature, and create some new Folders in that Feature. The folders aren't important
in this case, they just allow for some organization.  SPSource has been tested
using WSPBuilder, StsDEv, and WspProjectTemplate, but the type of project in Visual
Studio really doesn't matter. It just needs to follow the 12Hive folder structure,
which means SPSource does not work with VSEWSS.<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_10.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="125" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_4.png" width="220" border="0" /></a></p>
        <p>
In each folder, create a new file with the file extension '.spsource'.  This
file extension is important, as the SPSource utility looks for these files to work
it's magic.  The SPSource files are nothing more than a type of XML file and
are what I call 'reverse manifests' as they are based on the same syntax used to push
things into SharePoint, but in the case of SPSource, are used to get things out of
SharePoint.<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_14.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="118" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_6.png" width="253" border="0" /></a></p>
        <p>
The SPSource file for the Content Type is just like a Content Type definition file,
and is even based on the same schema. All we need is the name of the custom Content
Type we want to have included in the WSP<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_16.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="121" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_7.png" width="471" border="0" /></a></p>
        <p>
The SPSource file for the custom Page Layout is also just like a provisioning module
file used to put files into SharePoint. We just need to tell it the source list URL,
and the file to include in the WSP<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_18.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="137" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_8.png" width="466" border="0" /></a></p>
        <p>
At the root of the Visual Studio project, I've got a CMD file that contains the information
needed to execute SPSource<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_20.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="101" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_9.png" width="150" border="0" /></a><br /><br />
Source of CMD file<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_22.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="145" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_10.png" width="651" border="0" /></a><br /></p>
        <p>
After SPSource is executed, there will be some new files in your Visual Studio project.<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_24.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="219" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_11.png" width="316" border="0" /></a></p>
        <p>
In the ContentType folder, there are now files for both the Content Type definition,
as well as the column definitions.<br />
Content Type definition:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_26.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="155" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_12.png" width="696" border="0" /></a><br />
Column definition:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_28.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="117" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_13.png" width="706" border="0" /></a> <br /></p>
        <p>
The ASPX page in the PageLayouts folder is the same as what we added in SharePoint
designer<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_30.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="283" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_14.png" width="600" border="0" /></a></p>
        <p>
The pagelayouts.Provisioner.xml file is the provisioning module file needed to put
the custom Page Layout in to the correct location when the Feature is activated<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_32.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="158" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_15.png" width="707" border="0" /></a></p>
        <p>
The two *.ElementManifest.xml files are there so you have the lines needed to add
to the Feature.xml file in the ElementManfiests section.  These lines are not
automatically added to the Feature.xml as to provide greater flexibility by you to
distinguish what gets included in the Feature.<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_34.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="132" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_16.png" width="706" border="0" /></a></p>
        <p>
After I add the lines to the Feature file:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_36.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="251" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_17.png" width="619" border="0" /></a> 
</p>
        <p>
Now I can build my project to compile the WSP and deploy it to the 'development' site. 
SPSource can also be integrated with the MSBuild process to allow for updates to the
files added by SPSource before the WSP is compiled.  This allows the WSP to be
upgraded using items changed in the UI and SharePoint Designer.
</p>
        <p>
After the solution is built and deployed, the Feature can be activated, and the pages
will be added to the Master Page Gallery<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_38.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="43" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_18.png" width="601" border="0" /></a> <br /><br />
Master Page Gallery<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_40.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="25" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_19.png" width="744" border="0" /></a><br /><br />
When I create a new page, the new Page Layout is available in the list, as expected<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_42.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="138" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_20.png" width="713" border="0" /></a> <br /><br />
and, the page looks the way it should<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_44.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="278" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_21.png" width="393" border="0" /></a></p>
        <p>
Give <a href="http://www.codeplex.com/SPSource" target="_blank">SPSource</a> a try,
and see how much more efficient your Visual Studio WSP creation process can be!
</p>
        <img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=fcf33971-919a-4086-8f53-8dd9d05d0b41" />
      </body>
      <title>Building Solutions (WSP) in Visual Studio? Say hello to SPSource...</title>
      <guid isPermaLink="false">http://blog.richfinn.net/blog/PermaLink,guid,fcf33971-919a-4086-8f53-8dd9d05d0b41.aspx</guid>
      <link>http://blog.richfinn.net/blog/2008/08/13/BuildingSolutionsWSPInVisualStudioSayHelloToSPSource.aspx</link>
      <pubDate>Wed, 13 Aug 2008 23:13:21 GMT</pubDate>
      <description>&lt;p&gt;
Creating Features which contain custom Content Types or file provisioning modules
requires developers to write a lot of XML based on the wss.xsd. Content types require
custom column and content type definition files, along with the proper creation of
the content type IDs. File provisioning modules require the creation of module elements
which contain the information that will help properly push the files into the correct
lists when the Feature is activated. 
&lt;/p&gt;
&lt;p&gt;
This XML can be fairly daunting, time consuming, and frankly, not very exciting for
developers who just want to test their code. This holds especially true for developers
who are writing custom Features based on SharePoint's Publishing Feature, and this
is why I created &lt;a href="http://www.codeplex.com/SPSource" target=_blank&gt;SPSource&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
SPSource helps by alleviating the need for developers to write these files by allowing
them to use the SharePoint UI and SharePoint Designer (SPD) as the source for the
files defined in the module elements, along with custom content types, and is meant
to be integrated with (and has been tested with) WSP creation tools such as &lt;a href="http://www.codeplex.com/wspbuilder" target=_blank&gt;WSPBuilder&lt;/a&gt;, &lt;a href="http://www.codeplex.com/stsdev" target=_blank&gt;STSDev&lt;/a&gt;,
and the &lt;a href="http://www.codeplex.com/wspprojecttemplate" target=_blank&gt;WSPProjectTemplate&lt;/a&gt; as
either part of the build process, or separately as a CMD file at the root of the project.
By using the UI and SPD, items can be created and tested rapidly, then compiled into
the WSP for deployment using familiar tools.
&lt;/p&gt;
&lt;p&gt;
Executing BEFORE the creation of the WSP, any file that can be created using SharePoint
Designer in a document library, and any site content type created in the SharePoint
UI can be targeted and pulled down into Visual Studio for addition in a pre-existing
Visual Studio WSP project. SPSource will also create the file provisioning modules
and site Content Type/Column definition files, as well as the lines needed in the
ElementManifest section of the Feature.xml file.
&lt;/p&gt;
&lt;p&gt;
Some examples of how SPSource can help:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Completely define a custom Publishing Feature using SPD and the SharePoint UI, creating
the master pages, page layouts, content types, style sheets, and images directly in
the content database. Once at a point where it's ready for deployment, run SPSource
against the project and pull everything into a pre-existing WSP. If changes are needed
in the markup, make them using SPD, and re-run SPSource. The files in the WSP will
be updated and ready for a solution upgrade. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Implement a class on an ASPX page (code behind) in SPD, and code that class in Visual
Studio, or add custom server controls to the markup in SPD. Push your assembly directly
to the GAC or bin as part of the build process, and the code-to-test time is much
faster, as the markup files are already in the content database. Once everything is
set, run SPSource again the project, and pull everything together into the WSP. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
Add a custom Content Query Web Part (or RSS) .webpart file to the web part gallery,
and change the properties and settings for the new CQWP via the UI and SPD to use
custom XSL files that you add to the Style Library/XSL Style Sheets folder. Create
new ItemStyles, change the Headers, or add new parameters to the Main XSL. The XSL
files can be updated quickly using SPD, and changes can be seen right away. When all
is ready for integration into the WSP, execute SPSource against the new files and
create a new Feature for the new web part in minutes. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Eventually, I hope to get SPSource working with ListInstances and Workflows, but for
right now, it only works with Content Types and Modules.
&lt;/p&gt;
&lt;p&gt;
Check out this &lt;a href="http://video.msn.com/video.aspx?vid=84c63487-8ad6-4e72-a88e-10f39b92135d" target=_blank&gt;screencast&lt;/a&gt; where
I create a custom Publishing Feature, with a new content type and page layout, execute
SPSource on my StsDev Visual Studio project, package it all up in a WSP, and deploy
in less than 15 minutes!
&lt;/p&gt;
&lt;p&gt;
&lt;a title="SPSource Publishing Feature Demo" href="http://video.msn.com/video.aspx?vid=84c63487-8ad6-4e72-a88e-10f39b92135d" target=_new&gt;&lt;img height=84 alt="SPSource Publishing Feature Demo" src="http://img2.catalog.video.msn.com/Image.aspx?uuid=84c63487-8ad6-4e72-a88e-10f39b92135d&amp;amp;w=112&amp;amp;h=84" width=112 border=0&gt;
&lt;br&gt;
SPSource Publishing Feature Demo&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Here's a short walk-through example of how SPSource works:
&lt;/p&gt;
&lt;p&gt;
In the 'design' site, create a new Content Type for a Publishing page using the SharePoint
UI, adding some new columns&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_4.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=447 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_1.png" width=517 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
In SharePoint Designer, create a new Page Layout based on the Content Type which was
just created&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_6.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=322 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_2.png" width=450 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
Still in SharePoint Designer, add the new content field controls, a web part zone,
and some other markup to the new Page Layout, saving it to the 'design' site Master
Page Gallery&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_8.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=314 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_3.png" width=573 border=0&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Now, over in a Visual Studio project, which in this example is based on StsDev, create
a new Feature, and create some new Folders in that Feature. The folders aren't important
in this case, they just allow for some organization.&amp;nbsp; SPSource has been tested
using WSPBuilder, StsDEv, and WspProjectTemplate, but the type of project in Visual
Studio really doesn't matter. It just needs to follow the 12Hive folder structure,
which means SPSource does not work with VSEWSS.&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_10.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=125 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_4.png" width=220 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In each folder, create a new file with the file extension '.spsource'.&amp;nbsp; This
file extension is important, as the SPSource utility looks for these files to work
it's magic.&amp;nbsp; The SPSource files are nothing more than a type of XML file and
are what I call 'reverse manifests' as they are based on the same syntax used to push
things into SharePoint, but in the case of SPSource, are used to get things out of
SharePoint.&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_14.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=118 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_6.png" width=253 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The SPSource file for the Content Type is just like a Content Type definition file,
and is even based on the same schema. All we need is the name of the custom Content
Type we want to have included in the WSP&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_16.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=121 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_7.png" width=471 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The SPSource file for the custom Page Layout is also just like a provisioning module
file used to put files into SharePoint. We just need to tell it the source list URL,
and the file to include in the WSP&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_18.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=137 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_8.png" width=466 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
At the root of the Visual Studio project, I've got a CMD file that contains the information
needed to execute SPSource&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_20.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=101 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_9.png" width=150 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;br&gt;
Source of CMD file&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_22.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=145 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_10.png" width=651 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
After SPSource is executed, there will be some new files in your Visual Studio project.&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_24.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=219 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_11.png" width=316 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In the ContentType folder, there are now files for both the Content Type definition,
as well as the column definitions.&lt;br&gt;
Content Type definition:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_26.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=155 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_12.png" width=696 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
Column definition:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_28.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=117 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_13.png" width=706 border=0&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
The ASPX page in the PageLayouts folder is the same as what we added in SharePoint
designer&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_30.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=283 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_14.png" width=600 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The pagelayouts.Provisioner.xml file is the provisioning module file needed to put
the custom Page Layout in to the correct location when the Feature is activated&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_32.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=158 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_15.png" width=707 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The two *.ElementManifest.xml files are there so you have the lines needed to add
to the Feature.xml file in the ElementManfiests section.&amp;nbsp; These lines are not
automatically added to the Feature.xml as to provide greater flexibility by you to
distinguish what gets included in the Feature.&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_34.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=132 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_16.png" width=706 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
After I add the lines to the Feature file:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_36.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=251 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_17.png" width=619 border=0&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Now I can build my project to compile the WSP and deploy it to the 'development' site.&amp;nbsp;
SPSource can also be integrated with the MSBuild process to allow for updates to the
files added by SPSource before the WSP is compiled.&amp;nbsp; This allows the WSP to be
upgraded using items changed in the UI and SharePoint Designer.
&lt;/p&gt;
&lt;p&gt;
After the solution is built and deployed, the Feature can be activated, and the pages
will be added to the Master Page Gallery&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_38.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=43 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_18.png" width=601 border=0&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
Master Page Gallery&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_40.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=25 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_19.png" width=744 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;br&gt;
When I create a new page, the new Page Layout is available in the list, as expected&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_42.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=138 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_20.png" width=713 border=0&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
and, the page looks the way it should&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_44.png"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=278 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/BuildingSolutionsWSPinVisualStudioSayhe_DEB3/image_thumb_21.png" width=393 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Give &lt;a href="http://www.codeplex.com/SPSource" target=_blank&gt;SPSource&lt;/a&gt; a try,
and see how much more efficient your Visual Studio WSP creation process can be!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=fcf33971-919a-4086-8f53-8dd9d05d0b41" /&gt;</description>
      <comments>http://blog.richfinn.net/blog/CommentView,guid,fcf33971-919a-4086-8f53-8dd9d05d0b41.aspx</comments>
      <category>Development</category>
      <category>Microsoft Office SharePoint Server</category>
      <category>SPSource</category>
      <category>WSP Development</category>
      <category>WSS</category>
    </item>
    <item>
      <trackback:ping>http://blog.richfinn.net/blog/Trackback.aspx?guid=4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468</trackback:ping>
      <pingback:server>http://blog.richfinn.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.richfinn.net/blog/PermaLink,guid,4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.richfinn.net/blog/CommentView,guid,4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468.aspx</wfw:comment>
      <wfw:commentRss>http://blog.richfinn.net/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We've been working on this one for a while, and it's been driving us nuts...
</p>
        <p>
In the current project we're working on, we haven't been able to add any new web parts
to pages, nor have we been able to edit the properties on the existing ones. 
When we do, we've been seeing the three following errors:
</p>
        <p>
- <font color="#ff0000">Cannot save the property settings for this Web Part. Exception
occurred. (Exception from HRESULT: 0x80020009 (DISP_E_EXCEPTION))<br /></font>- <font color="#ff0000">Unable to add selected web part(s). Exception occurred.
(Exception from HRESULT: 0x80020009 (DISP_E_EXCEPTION))</font><br />
- <font color="#ff0000">Unable to add selected web part(s). List View Web Part could
not be added, list may be hidden.</font></p>
        <p>
Even stranger was that it was only occurring in the root web of the current site collection.
</p>
        <p>
In researching the 0x80020008 error when related to web parts, the few people that
have found anything have said that it could be caused by disposal of the SPContext.Current.Site
or SPContect.Current.Web objects.  We looked all over our code and didn't find
that we were doing that anywhere.
</p>
        <p>
We switched the master page back to the default.master, and we could add and edit
web parts without any issues, so we then started whittling down the server controls
on the custom master page until we found three custom server controls that were present
when the web part errors occur.  Taking a closer look, these three controls all
had the following lines in common.
</p>
        <div style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; HEIGHT: 91px; BACKGROUND-COLOR: #f4f4f4">
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">
            <span style="COLOR: #0000ff">using</span> (SPWeb
rootWeb = SPContext.Current.Site.RootWeb) { <span style="COLOR: #008000">//code</span> }</pre>
        </div>
        <p>
Commenting out of the code caused the errors to go away.  What's going on here?  
</p>
        <p>
Turns out that there's something that the <a href="http://msdn.microsoft.com/en-us/library/aa973248.aspx" target="_blank">Best
Practices: Using Disposable Windows SharePoint Services Objects</a> post and Roger
Lamb's <a href="http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx" target="_blank">SharePoint
2007 and WSS 3.0 Dispose Patterns by Example</a> should point out a little clearer. 
If you look at the bottom of Roger's post, there's a comment by <a href="http://stephenkaye.blogspot.com/" target="_blank">Stephen
Kaye</a> where he hits the nail on the head:
</p>
        <blockquote>
          <p>
            <em>If your current context’s web is the root web of you current context’s site then
the RootWeb property of the site will reference the same object return by SPControl.GetContextWeb
and SPContext.Current.Web and should therefore not be disposed.</em>
          </p>
        </blockquote>
        <p>
So, this means that if you are in the root web of your site collection, and you dispose
of SPContext.Current.Site.RootWeb, you're actually disposing of SPContext.Current.Web. 
Not good.
</p>
        <p>
Here's how we changed the code to ensure that we could use the RootWeb SPWeb object,
but not dispose it if the SPContext.Current.Web is the RootWeb:
</p>
        <div style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; HEIGHT: 214px; BACKGROUND-COLOR: #f4f4f4">
          <pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none">SPWeb rootWeb = <span style="COLOR: #0000ff">null</span>; <span style="COLOR: #0000ff">if</span> (SPContext.Current.Web.IsRootWeb)
rootWeb = SPContext.Current.Web; <span style="COLOR: #0000ff">else</span> rootWeb
= SPContext.Current.Site.RootWeb; <span style="COLOR: #008000">//code</span><span style="COLOR: #0000ff">if</span> (!SPContext.Current.Web.IsRootWeb)
rootWeb.Dispose();</pre>
        </div>
        <img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468" />
      </body>
      <title>SPContext.Current.Site.RootWeb.Dispose() and the webpart error '(Exception from HRESULT: 0x80020009 (DISP_E_EXCEPTION))'</title>
      <guid isPermaLink="false">http://blog.richfinn.net/blog/PermaLink,guid,4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468.aspx</guid>
      <link>http://blog.richfinn.net/blog/2008/07/17/SPContextCurrentSiteRootWebDisposeAndTheWebpartErrorExceptionFromHRESULT0x80020009DISPEEXCEPTION.aspx</link>
      <pubDate>Thu, 17 Jul 2008 00:18:46 GMT</pubDate>
      <description>&lt;p&gt;
We've been working on this one for a while, and it's been driving us nuts...
&lt;/p&gt;
&lt;p&gt;
In the current project we're working on, we haven't been able to add any new web parts
to pages, nor have we been able to edit the properties on the existing ones.&amp;nbsp;
When we do, we've been seeing the three following errors:
&lt;/p&gt;
&lt;p&gt;
- &lt;font color=#ff0000&gt;Cannot save the property settings for this Web Part. Exception
occurred. (Exception from HRESULT: 0x80020009 (DISP_E_EXCEPTION))&lt;br&gt;
&lt;/font&gt;- &lt;font color=#ff0000&gt;Unable to add selected web part(s). Exception occurred.
(Exception from HRESULT: 0x80020009 (DISP_E_EXCEPTION))&lt;/font&gt;
&lt;br&gt;
- &lt;font color=#ff0000&gt;Unable to add selected web part(s). List View Web Part could
not be added, list may be hidden.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Even stranger was that it was only occurring in the root web of the current site collection.
&lt;/p&gt;
&lt;p&gt;
In researching the 0x80020008 error when related to web parts, the few people that
have found anything have said that it could be caused by disposal of the SPContext.Current.Site
or SPContect.Current.Web objects.&amp;nbsp; We looked all over our code and didn't find
that we were doing that anywhere.
&lt;/p&gt;
&lt;p&gt;
We switched the master page back to the default.master, and we could add and edit
web parts without any issues, so we then started whittling down the server controls
on the custom master page until we found three custom server controls that were present
when the web part errors occur.&amp;nbsp; Taking a closer look, these three controls all
had the following lines in common.
&lt;/p&gt;
&lt;div style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; HEIGHT: 91px; BACKGROUND-COLOR: #f4f4f4"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;span style="COLOR: #0000ff"&gt;using&lt;/span&gt; (SPWeb
rootWeb = SPContext.Current.Site.RootWeb) { &lt;span style="COLOR: #008000"&gt;//code&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
Commenting out of the code caused the errors to go away.&amp;nbsp; What's going on here?&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Turns out that there's something that the &lt;a href="http://msdn.microsoft.com/en-us/library/aa973248.aspx" target=_blank&gt;Best
Practices: Using Disposable Windows SharePoint Services Objects&lt;/a&gt; post and Roger
Lamb's &lt;a href="http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx" target=_blank&gt;SharePoint
2007 and WSS 3.0 Dispose Patterns by Example&lt;/a&gt; should point out a little clearer.&amp;nbsp;
If you look at the bottom of Roger's post, there's a comment by &lt;a href="http://stephenkaye.blogspot.com/" target=_blank&gt;Stephen
Kaye&lt;/a&gt; where he hits the nail on the head:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;If your current context’s web is the root web of you current context’s site then
the RootWeb property of the site will reference the same object return by SPControl.GetContextWeb
and SPContext.Current.Web and should therefore not be disposed.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So, this means that if you are in the root web of your site collection, and you dispose
of SPContext.Current.Site.RootWeb, you're actually disposing of SPContext.Current.Web.&amp;nbsp;
Not good.
&lt;/p&gt;
&lt;p&gt;
Here's how we changed the code to ensure that we could use the RootWeb SPWeb object,
but not dispose it if the SPContext.Current.Web is the RootWeb:
&lt;/p&gt;
&lt;div style="BORDER-RIGHT: gray 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: gray 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 8pt; PADDING-BOTTOM: 4px; MARGIN: 20px 0px 10px; OVERFLOW: auto; BORDER-LEFT: gray 1px solid; WIDTH: 97.5%; CURSOR: text; MAX-HEIGHT: 200px; LINE-HEIGHT: 12pt; PADDING-TOP: 4px; BORDER-BOTTOM: gray 1px solid; FONT-FAMILY: consolas, 'Courier New', courier, monospace; HEIGHT: 214px; BACKGROUND-COLOR: #f4f4f4"&gt;&lt;pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;SPWeb rootWeb = &lt;span style="COLOR: #0000ff"&gt;null&lt;/span&gt;; &lt;span style="COLOR: #0000ff"&gt;if&lt;/span&gt; (SPContext.Current.Web.IsRootWeb)
rootWeb = SPContext.Current.Web; &lt;span style="COLOR: #0000ff"&gt;else&lt;/span&gt; rootWeb
= SPContext.Current.Site.RootWeb; &lt;span style="COLOR: #008000"&gt;//code&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;if&lt;/span&gt; (!SPContext.Current.Web.IsRootWeb)
rootWeb.Dispose();&lt;/pre&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468" /&gt;</description>
      <comments>http://blog.richfinn.net/blog/CommentView,guid,4d7b3f9d-a9a5-4bd4-b9b0-106f2f3b6468.aspx</comments>
      <category>Development</category>
      <category>Microsoft Office SharePoint Server</category>
      <category>WSS</category>
    </item>
    <item>
      <trackback:ping>http://blog.richfinn.net/blog/Trackback.aspx?guid=55b63fa4-0865-4826-a3b6-b2947f03db10</trackback:ping>
      <pingback:server>http://blog.richfinn.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.richfinn.net/blog/PermaLink,guid,55b63fa4-0865-4826-a3b6-b2947f03db10.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.richfinn.net/blog/CommentView,guid,55b63fa4-0865-4826-a3b6-b2947f03db10.aspx</wfw:comment>
      <wfw:commentRss>http://blog.richfinn.net/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=55b63fa4-0865-4826-a3b6-b2947f03db10</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So, earlier I posted how I upgraded WSSv3 to MOSS.
</p>
        <p>
After I completed that task, I wanted to see what it would take to turn my existing
top level site collection into a publishing site, as the Publishing Feature is one
of the lowest hanging fruit in the MOSS Feature stack that has the greatest benefit
to both users and administrators right out of the gates.
</p>
        <p>
The first thing we need to do is enable the Office SharePoint Server Publishing Infrastructure
feature in the site collection features list. 
<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_2.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="52" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb.png" width="584" border="0" /></a></p>
        <p>
Uh oh:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_4.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="159" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_1.png" width="331" border="0" /></a></p>
        <p>
The logs say that access was denied activating the Publishing Resources feature and
the message is 'Provisioning did not succeed. Details: Failed to provision the scheduling
job definitions.  Page scheduling will not succeed.'  Then there are some
other messages in the logs that say that an exception was thrown ensuring dependencies
were met for the Publishing Site Feature.
</p>
        <p>
According to a <a href="http://www.netadmintools.com/art586.html" target="_blank">post
I found on NetAdminTools.com,</a> you can activate the Publishing Resources via stsadm,
then click the Activate button in the site collection Features list.  This seemed
to work pretty well:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_6.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="56" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_2.png" width="584" border="0" /></a></p>
        <p>
Then I activated the Office SharePoint Server Publishing Feature in the Site Features
list (in the Site Administration group) and the Pages list was created and the site
actions menu was expanded, and there was much rejoicing (yaaay)
</p>
        <p>
BUT WAIT!
</p>
        <p>
When I created a new page, something seemed off.  There were only a few pages
available in the 'choose page layout' list box.  Looks like some article pages
and welcome pages were missing.  I went to the mast page gallery and saw that
there weren't any pages missing, but there were some pages, like the welcome page
with web part zones page layout - which is the page layout used on the default page
of the Collaboration Portal site definition - that were not associated to their proper
Content Types! Uh - Weird!  How did this happen, and how can we fix it?
</p>
        <p>
Creating new site collections based on the Team Site template proved that we could
activate the Publishing Infrastructure Feature without the access denied error, but
the page layouts still didn't have the Content Type associated in the Master Page
Gallery. Tried this on four site collections.  PublishingPrerequisites, PublishingResources,
Navigation, and PublishingLayouts are the Feature Activation Dependencies on the PublishingSite
Feature (the Publishing Infrastructure Feature name) and they are all scoped to the
site, so why are the page layouts not getting associated with the Content Types?
</p>
        <p>
Creating a new site collection based on the Collaboration Portal site definition worked
fine, and the page layouts were associated correctly. Lame.  Must be the order
that the site Features are activated.
</p>
        <p>
After going through the Features listed in the onet.xml file for the Collaboration
Portal site definition in the order defined, order's NOT the problem.  What is
you ask?
</p>
        <p>
So - turns out that the page layouts are tagged as being part of the Master Page Content
Type - what's up with that?!?<br />
 <a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_20.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="201" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_9.png" width="700" border="0" /></a></p>
        <p>
Eidt the page and change the Content Type to the correct one (Page Layout), then set
the Associated Content Type.<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_16.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="67" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_7.png" width="221" border="0" /></a></p>
        <p>
 <a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_22.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="97" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_10.png" width="487" border="0" /></a><br />
 
</p>
        <p>
Check In, Publish a Major Version, and Approve it. Fixed!
</p>
        <p>
Bug...
</p>
        <img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=55b63fa4-0865-4826-a3b6-b2947f03db10" />
      </body>
      <title>Enable MOSS Publishing Feature on site collection built using Team Site definition</title>
      <guid isPermaLink="false">http://blog.richfinn.net/blog/PermaLink,guid,55b63fa4-0865-4826-a3b6-b2947f03db10.aspx</guid>
      <link>http://blog.richfinn.net/blog/2008/06/24/EnableMOSSPublishingFeatureOnSiteCollectionBuiltUsingTeamSiteDefinition.aspx</link>
      <pubDate>Tue, 24 Jun 2008 23:01:33 GMT</pubDate>
      <description>&lt;p&gt;
So, earlier I posted how I upgraded WSSv3 to MOSS.
&lt;/p&gt;
&lt;p&gt;
After I completed that task, I wanted to see what it would take to turn my existing
top level site collection into a publishing site, as the Publishing Feature is one
of the lowest hanging fruit in the MOSS Feature stack that has the greatest benefit
to both users and administrators right out of the gates.
&lt;/p&gt;
&lt;p&gt;
The first thing we need to do is enable the Office SharePoint Server Publishing Infrastructure
feature in the site collection features list. 
&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_2.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=52 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Uh oh:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_4.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=159 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_1.png" width=331 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The logs say that access was denied activating the Publishing Resources feature and
the message is 'Provisioning did not succeed. Details: Failed to provision the scheduling
job definitions.&amp;nbsp; Page scheduling will not succeed.'&amp;nbsp; Then there are some
other messages in the logs that say that an exception was thrown ensuring dependencies
were met for the Publishing Site Feature.
&lt;/p&gt;
&lt;p&gt;
According to a &lt;a href="http://www.netadmintools.com/art586.html" target=_blank&gt;post
I found on NetAdminTools.com,&lt;/a&gt; you can activate the Publishing Resources via stsadm,
then click the Activate button in the site collection Features list.&amp;nbsp; This seemed
to work pretty well:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_6.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=56 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_2.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Then I activated the Office SharePoint Server Publishing Feature in the Site Features
list (in the Site Administration group) and the Pages list was created and the site
actions menu was expanded, and there was much rejoicing (yaaay)
&lt;/p&gt;
&lt;p&gt;
BUT WAIT!
&lt;/p&gt;
&lt;p&gt;
When I created a new page, something seemed off.&amp;nbsp; There were only a few pages
available in the 'choose page layout' list box.&amp;nbsp; Looks like some article pages
and welcome pages were missing.&amp;nbsp; I went to the mast page gallery and saw that
there weren't any pages missing, but there were some pages, like the welcome page
with web part zones page layout - which is the page layout used on the default page
of the Collaboration Portal site definition - that were not associated to their proper
Content Types! Uh - Weird!&amp;nbsp; How did this happen, and how can we fix it?
&lt;/p&gt;
&lt;p&gt;
Creating new site collections based on the Team Site template proved that we could
activate the Publishing Infrastructure Feature without the access denied error, but
the page layouts still didn't have the Content Type associated in the Master Page
Gallery. Tried this on four site collections.&amp;nbsp; PublishingPrerequisites, PublishingResources,
Navigation, and PublishingLayouts are the Feature Activation Dependencies on the PublishingSite
Feature (the Publishing Infrastructure Feature name) and they are all scoped to the
site, so why are the page layouts not getting associated with the Content Types?
&lt;/p&gt;
&lt;p&gt;
Creating a new site collection based on the Collaboration Portal site definition worked
fine, and the page layouts were associated correctly. Lame.&amp;nbsp; Must be the order
that the site Features are activated.
&lt;/p&gt;
&lt;p&gt;
After going through the Features listed in the onet.xml file for the Collaboration
Portal site definition in the order defined, order's NOT the problem.&amp;nbsp; What is
you ask?
&lt;/p&gt;
&lt;p&gt;
So - turns out that the page layouts are tagged as being part of the Master Page Content
Type - what's up with that?!?&lt;br&gt;
&amp;nbsp;&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_20.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=201 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_9.png" width=700 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Eidt the page and change the Content Type to the correct one (Page Layout), then set
the Associated Content Type.&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_16.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=67 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_7.png" width=221 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_22.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=97 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/EnableMOSSPublishingFeatureonsitecollect_EF64/image_thumb_10.png" width=487 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Check In, Publish a Major Version, and Approve it. Fixed!
&lt;/p&gt;
&lt;p&gt;
Bug...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=55b63fa4-0865-4826-a3b6-b2947f03db10" /&gt;</description>
      <comments>http://blog.richfinn.net/blog/CommentView,guid,55b63fa4-0865-4826-a3b6-b2947f03db10.aspx</comments>
      <category>Microsoft Office SharePoint Server</category>
      <category>WSS</category>
    </item>
    <item>
      <trackback:ping>http://blog.richfinn.net/blog/Trackback.aspx?guid=f1c9eb38-1bdc-4d99-b17c-22933c89c07f</trackback:ping>
      <pingback:server>http://blog.richfinn.net/blog/pingback.aspx</pingback:server>
      <pingback:target>http://blog.richfinn.net/blog/PermaLink,guid,f1c9eb38-1bdc-4d99-b17c-22933c89c07f.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.richfinn.net/blog/CommentView,guid,f1c9eb38-1bdc-4d99-b17c-22933c89c07f.aspx</wfw:comment>
      <wfw:commentRss>http://blog.richfinn.net/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f1c9eb38-1bdc-4d99-b17c-22933c89c07f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This seems to have come up a lot for me lately: We have a client who wants to know
what it takes to upgrade from WSSv3 to MOSS. What do they need to do to make the MOSS
Features available in their current WSS sites?
</p>
        <p>
Having been primarily only working with MOSS, I haven't done much with just WSS and
have never run through the upgrade process to MOSS.  There was very little documentation
out there other than some forum posts, so today I ran through it for the heck of it
and was impressed, but unsurprised, that it was pretty smooth.
</p>
        <p>
To begin, I installed the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EF93E453-75F1-45DF-8C6F-4565E8549C2A&amp;displaylang=en" target="_blank">slipstreamed
WSS+SP1 available from Microsoft downloads</a> onto a fresh Windows Server 2003 virtual. 
I set it up using SQL 2005 instead of SQL Express, which was a little lazy on my part,
because I should have run through what it would take to move the SQL Express stuff
over to SQL 2005. Oh well.
</p>
        <p>
I set up my web application with a site collection at the root based on the standard
Team Site definition.  This site then got two sub sites.  All three sites
had a single Word document in it's Shared Documents doc library.
</p>
        <p>
Then, I installed MOSS+SP1 from MSDN Subscriber Downloads. Here's the steps with some
screen shots that I thought were of value:
</p>
        <p>
1) Ran install of MOSS.  Pretty straightforward.  Extracted files, entered
key, selected server type, installation of bits and securing of resources, etc, etc...
</p>
        <p>
2) Ran configuration wizard. Says 'This wizard will upgrade SharePoint Products and
Technologies'. Config wizard is aware of config db. Runs through nine tasks without
hanging on anything for too long, and then completes.
</p>
        <p>
3) Opened Central Admin. On the Operations tab:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_2.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="113" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb.png" width="584" border="0" /></a></p>
        <p>
When clicked:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_4.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="152" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_1.png" width="584" border="0" /></a></p>
        <p>
Check and click OK:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_6.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="296" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_2.png" width="584" border="0" /></a></p>
        <p>
Completed pretty quick:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_8.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="123" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_3.png" width="584" border="0" /></a><br /><br />
One thing to note here - this just enabled the Enterprise SKU Features, I think because
I entered an Enterprise key from MSDN, so none of the Standard Features were activated.
FYI...
</p>
        <p>
4) Started new services:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_10.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="142" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_4.png" width="584" border="0" /></a></p>
        <p>
5) Created SSP - nothing special here
</p>
        <p>
6) To get Search lined up, I created a Search Center site at the root of the site
collection, and changed the site collection search settings to use the new search
center I just created:<br /><a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_12.png"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="144" alt="image" src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_5.png" width="584" border="0" /></a><br /></p>
        <p>
That was pretty much it. Like I said, impressed, but not surprised.
</p>
        <img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=f1c9eb38-1bdc-4d99-b17c-22933c89c07f" />
      </body>
      <title>Upgrade WSSv3 to MOSS?</title>
      <guid isPermaLink="false">http://blog.richfinn.net/blog/PermaLink,guid,f1c9eb38-1bdc-4d99-b17c-22933c89c07f.aspx</guid>
      <link>http://blog.richfinn.net/blog/2008/06/24/UpgradeWSSv3ToMOSS.aspx</link>
      <pubDate>Tue, 24 Jun 2008 20:47:45 GMT</pubDate>
      <description>&lt;p&gt;
This seems to have come up a lot for me lately: We have a client who wants to know
what it takes to upgrade from WSSv3 to MOSS. What do they need to do to make the MOSS
Features available in their current WSS sites?
&lt;/p&gt;
&lt;p&gt;
Having been primarily only working with MOSS, I haven't done much with just WSS and
have never run through the upgrade process to MOSS.&amp;nbsp; There was very little documentation
out there other than some forum posts, so today I ran through it for the heck of it
and was impressed, but unsurprised, that it was pretty smooth.
&lt;/p&gt;
&lt;p&gt;
To begin, I installed the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=EF93E453-75F1-45DF-8C6F-4565E8549C2A&amp;amp;displaylang=en" target=_blank&gt;slipstreamed
WSS+SP1 available from Microsoft downloads&lt;/a&gt; onto a fresh Windows Server 2003 virtual.&amp;nbsp;
I set it up using SQL 2005 instead of SQL Express, which was a little lazy on my part,
because I should have run through what it would take to move the SQL Express stuff
over to SQL 2005. Oh well.
&lt;/p&gt;
&lt;p&gt;
I set up my web application with a site collection at the root based on the standard
Team Site definition.&amp;nbsp; This site then got two sub sites.&amp;nbsp; All three sites
had a single Word document in it's Shared Documents doc library.
&lt;/p&gt;
&lt;p&gt;
Then, I installed MOSS+SP1 from MSDN Subscriber Downloads. Here's the steps with some
screen shots that I thought were of value:
&lt;/p&gt;
&lt;p&gt;
1) Ran install of MOSS.&amp;nbsp; Pretty straightforward.&amp;nbsp; Extracted files, entered
key, selected server type, installation of bits and securing of resources, etc, etc...
&lt;/p&gt;
&lt;p&gt;
2) Ran configuration wizard. Says 'This wizard will upgrade SharePoint Products and
Technologies'. Config wizard is aware of config db. Runs through nine tasks without
hanging on anything for too long, and then completes.
&lt;/p&gt;
&lt;p&gt;
3) Opened Central Admin. On the Operations tab:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_2.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=113 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
When clicked:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_4.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=152 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_1.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Check and click OK:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_6.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=296 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_2.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Completed pretty quick:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_8.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=123 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_3.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;br&gt;
One thing to note here - this just enabled the Enterprise SKU Features, I think because
I entered an Enterprise key from MSDN, so none of the Standard Features were activated.
FYI...
&lt;/p&gt;
&lt;p&gt;
4) Started new services:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_10.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=142 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_4.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
5) Created SSP - nothing special here
&lt;/p&gt;
&lt;p&gt;
6) To get Search lined up, I created a Search Center site at the root of the site
collection, and changed the site collection search settings to use the new search
center I just created:&lt;br&gt;
&lt;a href="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_12.png"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=144 alt=image src="http://blog.richfinn.net/blog/content/binary/WindowsLiveWriter/UpgradeWSSv3toMOSS_CFFE/image_thumb_5.png" width=584 border=0&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
That was pretty much it. Like I said, impressed, but not surprised.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.richfinn.net/blog/aggbug.ashx?id=f1c9eb38-1bdc-4d99-b17c-22933c89c07f" /&gt;</description>
      <comments>http://blog.richfinn.net/blog/CommentView,guid,f1c9eb38-1bdc-4d99-b17c-22933c89c07f.aspx</comments>
      <category>Microsoft Office SharePoint Server</category>
      <category>WSS</category>
    </item>
  </channel>
</rss>