<?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 - SPSource</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>
  </channel>
</rss>