自定义 Web 部件部署产生“无法导入此 Web 部件”错误
Posted
技术标签:
【中文标题】自定义 Web 部件部署产生“无法导入此 Web 部件”错误【英文标题】:Custom web part deployment produces 'Cannot import this webpart' error 【发布时间】:2011-08-22 12:14:28 【问题描述】:我在 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 部件。 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
【问题讨论】:
【参考方案1】:它找不到 Web 部件中引用的程序集。您看到的错误实际上是这行代码的等价物。
无法导入此 Web 部件。
您需要做的是验证 .webpart 定义文件中的完整类和程序集引用名称并进行相应更新。
不幸的是,我不能告诉你它应该是什么,因为你的项目定义可能会输出与你的类定义不同的信息的程序集。
【讨论】:
如果这是问题所在 - 我在部署到本地计算机时不会看到同样的错误吗?我已经使用相同的 Powershell 脚本在本地部署没有任何问题... 呸,它打断了我。有几件事需要检查。 1. 检查程序集是否已加载到 GAC 或关联的 web bin 文件夹中。如果没有,请检查您生成的解决方案 .wsp 是否实际包含程序集。 2. 如果您在 gac 中看到程序集并且仍然看到此问题,请尝试将 web.config 信任级别更新为完全以上是关于自定义 Web 部件部署产生“无法导入此 Web 部件”错误的主要内容,如果未能解决你的问题,请参考以下文章
将自定义 Web 部件部署到 SharePoint 2013
如何将自定义 WebPartPage 部署到特定目标站点 (Web)
摘要链接 Web 部件与 SharePoint 2007/2010 中的自定义 Web 部件冲突