我在Visual Studio 2010中构建了一个空的SharePoint项目,其中包含一些自定义Web部件。当我在我的本地开发机器上测试它们时,它们可以毫无困难地添加到页面中。
当我通过PowerShell将wsp部署到远程SharePoint服务器时,Web部件显示在Web部件库中,但是向页面添加一个部件会出现错误“无法导入此Web部件”。日志中没有进一步的信息。根据我通过谷歌发现的一些答案,我已经检查过Init中没有代码。所有初始处理都在CreateChildControls中完成(虽然我会想到如果这是原因,我会在本地机器上得到相同的错误。)
我最初在https://sharepoint.stackexchange.com/questions/11820/custom-web-part-deployment-produces-cannot-import-this-webpart-error问了这个问题。根据我收到的建议,我决定创建一个新的项目,我做了最少的编码。
新项目只有一个简单的标签网页部分。 Web部件的代码是
using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace TestWebParts.TestHelloWorld
{
[ToolboxItemAttribute(false)]
public class TestHelloWorld : WebPart
{
protected override void CreateChildControls()
{
Label lblThis = new Label();
lblThis.Text = "Testing web part";
Controls.Add(lblThis);
}
}
}
项目中的.webpart文件是
<?xml version="1.0" encoding="utf-8"?>
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="TestWebParts.TestHelloWorld.TestHelloWorld, $SharePoint.Project.AssemblyFullName$" />
<importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
</metaData>
<data>
<properties>
<property name="Title" type="string">TestHelloWorld</property>
<property name="Description" type="string">My WebPart</property>
</properties>
</data>
</webPart>
</webParts>
我已检查过添加了安全控制条目。我已将CAS策略添加到项目中(因为这些策略将部署到bin而不是GAC)。包清单看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<Solution xmlns="http://schemas.microsoft.com/sharepoint/">
<CodeAccessSecurity>
<PolicyItem>
<PermissionSet class="NamedPermissionSet" version="1" Description="Permission set for ECB">
<IPermission class="AspNetHostingPermission" version="1" Level="Minimal" />
<IPermission class="SecurityPermission" version="1" Flags="Execution,ControlPrincipal,ControlAppDomain,ControlDomainPolicy,ControlEvidence,ControlThread" />
<IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
version="1" ObjectModel="True" />
<IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Read="UserName" />
<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" PathDiscovery="*AllFiles*" />
<IPermission class="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" PathDiscovery="*AllFiles*" />
</PermissionSet>
<Assemblies>
<Assembly Name="$SharePoint.Project.AssemblyName$" Vers7ion="$SharePoint.Project.AssemblyVersion$" PublicKeyBlob="$SharePoint.Project.AssemblyPublicKeyBlob$"/>
</Assemblies>
</PolicyItem>
</CodeAccessSecurity>
</Solution>
.wsp在开发机器上安装正常我试图让它运行。当我尝试在Web部件库中查看Web部件时,我收到消息“无法导入此Web部件”,如上所示。我已确认.dll位于bin目录中。 web.config文件包含此条目
<SafeControl Assembly="TestWebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8d63a878e7c304c2" Namespace="TestWebParts.TestHelloWorld" TypeName="*" Safe="True" SafeAgainstScript="True" />
当我从Web部件库查看webpart xml时,我看到了
<?xml version="1.0" encoding="utf-8"?>
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="TestWebParts.TestHelloWorld.TestHelloWorld, TestWebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8d63a878e7c304c2" />
<importErrorMessage>Cannot import this Web Part.</importErrorMessage>
</metaData>
<data>
<properties>
<property name="Title" type="string">TestHelloWorld</property>
<property name="Description" type="string">My WebPart</property>
</properties>
</data>
</webPart>
</webParts>
当我部署到开发机器时,有没有人对可能导致问题的原因有任何想法?我唯一能想到的是我的本地机器是Windows 7而开发机器是Windows Server 2008.两者都在运行SharePoint Foundation
答案 0 :(得分:0)
找不到Web部件中引用的程序集。您看到的错误实际上是来自这行代码的等效。
无法导入此Web部件。
您需要做的是验证.webpart定义文件中的完整类和程序集引用名称并进行相应更新。
不幸的是,我不能告诉你它究竟应该是什么,因为你的项目定义可能正在输出具有与你的类定义不同的信息的程序集。