Search code examples
sharepointsharepoint-2010web-parts

Webpart "Not registered as safe" after changing AssemblyVersion


I (successfully) deployed some sharepoint2010 - Webparts using msbuild. Everything works fine until I decided to change the assemblyVersion. Whenever I do that the message

Web Part Error: A Web Part or Web Form Control on this Page cannot be displayed or imported. The type RTContacts, RTContacts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2721ba85ef1e4b88 could not be found or it is not registered as safe.

A solution would be to stay on 1.0.0.0, but there should be a better way...

Perhaps interesting to mention is that we use a centralized AssemblyFile which is included as a link.

The manifest contains the correct assemblyversion:

<Assemblies>
<Assembly Location="RTContacts.dll" DeploymentTarget="GlobalAssemblyCache">
  <SafeControls>
    <SafeControl Assembly="RTContacts, Version=1.0.4325.18399, Culture=neutral, PublicKeyToken=2721ba85ef1e4b88" Namespace="RTContacts" TypeName="*" />
  </SafeControls>
</Assembly>

When I add the WebPart again to that Site, it is displayed correctly, but already existing webParts seem to link to the old version.


Solution

  • You are having these problems because you're using the versioning attributes incorrectly.

    If you examine, for example, Microsoft.SharePoint.dll in Reflector you will see v14.0.0.0 (for SharePoint 2010).

    This AssemblyVersion will stay exactly the same for Beta, RCx, RTM all service packs and CU's etc - the only thing that changes is the AssemblyFileVersion (this is the thing you see in Windows Explorer under properties)

    See this for more details

    SharePoint features: How can I use wildcard assembly versioning?

    But don't take my word for it - Microsoft KB556041 - How to use Assembly Version and Assembly File Version

    If you follow this then no Assembly binding redirections are necessary and when you update your web part the existing instances will not be broken.