Sorry for the delay!
Start by right clicking "Features" and add, You want the scope to be site (which means site collection level). This is because masterpages sit at the sc level. Theoretically you can put them anywhere and just reference them properly, but then some pages get all wonky.
Add the SharePoint Folders; Layouts and Images (right click on the project and add "SharePoint Images" Folder etc. This is just for good measure if you want to package images with your solution and for handling upgrades to your solution. What happens is sharepoint will copy the contents of the wsp (like a cab file) into the Hive's locations and create a folder for your solution/feature.
Right Click on the project again and add empty element (3x); masterpage, style, and themes. Each of these folders has an elements.xml file. It tells SharePoint what it needs to do to provision it from the solution file. We are going to use it to "copy" the contents of these folders to the right locations on the site. Should look like this

Creating the files to go into the elements; masterpages, Style, themes
Masterpage
I use a blank file, named my.master into the above folder.Paste your code from sharepoint designer (because when you export from SPD and then try to Import there is markup that MS injects (or secretes hahah). (You already have your master done, so you could just copy this file into the masterpages element.
**TIP: you need to have a css scriptlink reference to get to your css if its going to live in a location other than your masterpage, which is good practice.
<SharePoint:CssRegistration ID="CssRegistration1" Name="<% $SPUrl:~sitecollection/Style Library/yourstylename/yourcssfilename.css%>" After="corev4.css" runat="server"/>
This tag needs to be in your Head element of your masterpage
Style
add a css file (anything else you want in here, some people put images etc), you can copy paste into here if you want.
Themes
Copy your .thmx files into this location. Tip; you can use microsoft powerpoint to create themes and export them.
If you did this all correctly, your elements.xml files will be automatically updated and you should see that it's added references to each file you have created in these folders.
Defining Elements.xml (modules)
Masterpage elements.xml
You have to specify the module's correct list id and url (116, and _catalogs/masterpage
). The element(s) is the file you want to load into the module's URL; specifically the file path is where the file is in your project, and the URL is where it ends up. You'll note the elements url is just the filename, technically you could change filenames here, or have multiple copies of the file)
It should look like this
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="masterpages" List="116" Url="_catalogs/masterpage">
<File Path="masterpages\yourfilename.master" Url="yourmasterfilename.master" Type="GhostableInLibrary"/>
</Module>
</Elements>
Style Elements.xml
Pretty much the same thing, except you change the destination to be a folder in the site collections style library so the module definition is different.
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="Style" Url="Style Library/MyStyle">
<File Path="Style\your.css" Url="your.css" Type="GhostableInLibrary" />
</Module>
</Elements>
*you might have more elements that just the css. depends what you pasted into the folder.
Themes Elements.xml
Same steps repeated, however these go into a the special _catalogs folder like the masterpages. Note, you may not have themes in your solution, but just showing this for future reference.
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="Themes" Url="_catalogs/Theme">
<File Path="Themes\Theme1.thmx" Url="Theme1.thmx" Type="GhostableInLibrary" />
<File Path="Themes\Theme2.thmx" Url="Theme2.thmx" Type="GhostableInLibrary" />
Type="GhostableInLibrary" />
</Module>
</Elements>
Updating your Feature
Now edit your feature, and you should be able to include these modules as items in the feature.
Lastly, you need the code on the feature event receiver like I promised :). This will enable and disable the feature, and in doing so, set and reset the custom,default master URLs for the site collection.
- Right click on the feature and add event receiver, you may already have one by default on your feature? (I think it depends on which VS version you are running)
There are two methods you need to code, activation (enabling a feature) and deactivation.
public class Feature1EventReceiver : SPFeatureReceiver
{
// Uncomment the method below to handle the event raised after a feature has been activated.
// Uncomment the method below to handle the event raised after a feature has been activated.
const string defaultmasterPage = "yourmasterfilename.master";
const string custommasterPage = "yourmasterfilename.master";
const string searchMasterPage = "yourmasterfilename.master";
const string themeName = "Theme1";
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
if (site != null)
{
using (SPWeb topLevelSite = site.RootWeb)
{
//Get the relative path
string relativePath = topLevelSite.ServerRelativeUrl;
if (!relativePath.EndsWith("/"))
{
relativePath += "/";
}
//Get Theme collection from site and the them we want
ReadOnlyCollection<ThmxTheme> themes = ThmxTheme.GetManagedThemes(site.RootWeb.Site);
ThmxTheme customTheme = null;
foreach (ThmxTheme theme in themes)
{
if (theme.Name == themeName)
{
customTheme = theme;
break;
}
}
//Apply branding to each web in the site collection
//Apply masterpage and logo
if (site.RootWeb.WebTemplate == "SRCHCENTERLITE" || site.RootWeb.WebTemplate == "SRCHCEN" || site.RootWeb.WebTemplate == "SRCHCENTERFAST")
{
site.RootWeb.CustomMasterUrl = relativePath + "_catalogs/masterpage/" + searchMasterPage;
}
else
{
site.RootWeb.MasterUrl = relativePath + "_catalogs/masterpage/" + defaultmasterPage;
site.RootWeb.CustomMasterUrl = relativePath + "_catalogs/masterpage/" + custommasterPage;
}
site.RootWeb.AlternateCssUrl = "";
site.RootWeb.SiteLogoUrl = "";
site.RootWeb.UIVersion = 4;
site.RootWeb.Update();
//Also apply the theme
if (customTheme != null)
{
customTheme.ApplyTo(site.RootWeb, true);
site.RootWeb.Update();
}
}
}
}
// Uncomment the method below to handle the event raised before a feature is deactivated.
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
if (site != null)
{
using (SPWeb topLevelSite = site.RootWeb)
{
//Get the relative path
string relativePath = topLevelSite.ServerRelativeUrl;
if (!relativePath.EndsWith("/"))
{
relativePath += "/";
}
//Apply branding to each web the wen the site collection
//Apply default masterpage and logo
if (site.RootWeb.WebTemplate == "SRCHCENTERLITE" || site.RootWeb.WebTemplate == "SRCHCEN" || site.RootWeb.WebTemplate == "SRCHCENTERFAST")
{
site.RootWeb.CustomMasterUrl = relativePath + "_catalogs/masterpage/minimal.master";
}
else
{
site.RootWeb.MasterUrl = relativePath + "_catalogs/masterpage/v4.master";
site.RootWeb.CustomMasterUrl = relativePath + "_catalogs/masterpage/v4.master";
}
site.RootWeb.AlternateCssUrl = "";
site.RootWeb.SiteLogoUrl = "";
site.RootWeb.Update();
//reset the theme back to default
ThmxTheme.SetThemeUrlForWeb(site.RootWeb, null, true);
site.RootWeb.Update();
}
}
}
thats it!