SharePoint 2010 allows us to extend out of the box web
parts. When I try to inherit search box webpart (one of the out of the box
webparts), and try to add new web part to a SharePoint page, I got this error:
“Incompatible Web Part markup detected. Use *.dwp Web Part
XML instead of *.webpart Web Part XML.”
Problem:
Both .dwp and .webpart file types are used to describe where
the code is for a web part. They are XML web part descriptors deployed with the
web part. The difference is .dwp was the file extension used in version 2 of
SharePoint and .webpart is a new extension used in version 3. Inside the files, the schemas are different.
Microsoft.SharePoint.Portal.WebControls.SearchBoxEx is one of the older ones
and therefore requires a .dwp descriptor.
Solution:
We have to create a .dwp descriptor for the webpart.
1. Add a new XML file to the web part and give it the same
name but with a .dwp extension
2. Add this content to the .dwp file
<?xml version="1.0" encoding="utf-8"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
<Assembly>$SharePoint.Project.AssemblyFullName$,Version=1.0.0.0,Culture=Neutral,PublicToken=d15bb591c34f9efb</Assembly>
<TypeName>"EmesnCombi_SQL.EmesnCombi_SQL,
$SharePoint.Project.AssemblyFullName$"</TypeName>
<Title>EmesnCombi_SQL</Title>
<Description>EmesnCombi_SQLt</Description>
</WebPart>
It is important to note that there are two main differences
in the schema compared to the .webpart file;
Ø
The xmlns is http://schemas.microsoft.com/WebPart/v2
instead of http://schemas.microsoft.com/WebPart/v3
Ø
We need the assembly's public token.
3. Set the Assembly version to your assembly's version. This
is usually 1.0.0.0, but you can find it
in AssemblyInfo.cs in your project.
4. Replace the PublicKeyToken.
5. Replace the TypeName with the type name in the .webpart
file.
6. Select the .dwp file in Solution Explorer and change its
Deployment Type property from NoDeployment to ElementFile. This will ensure
.dwp file is deployed with the web part.
7. Verify that Step 6 adds an entry to the .spdata file.
8. Delete the .webpart file. So the final view will be like
this.
9.Edit Elements.xml file and replace both instances of
.webpart with .dwp.
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
<Module Name="EmesnCombi_SQL" List="113" Url="_catalogs/wp">
<File Path="EmesnCombi_SQL\EmesnCombi_SQL.dwp" Url="EmesnCombi_SQL_EmesnCombi_SQL.dwp" Type="GhostableInLibrary">
<Property Name="Group" Value="EmrsnCombi_SQL" />
</File>
</Module>
</Elements>
10. Build and deploy the project
This is how I extended Microsoft.SharePoint.Portal.WebControls.SearchBoxEx.
For the purpose I had to reference two assemblies
Microsoft.Office.Server.Search.dll, microsoft.sharepoint.portal.dll from ISAPI
folder (Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI).

