2011-05-10 72 views
0

我已經在Visual Studio 2010中構建了一個空白的SharePoint項目,其中包含一些自定義Web部件。當我在我的本地開發機器上測試過它們時,它們可以毫無困難地添加到頁面中。自定義Web部件部署產生'無法導入此Webpart'錯誤

當我部署通過PowerShell來遠程SharePoint服務器中的WSP,Web部件顯示在Web部件庫,但增加一個頁面讓我的錯誤「無法導入此Web部件」。日誌中沒有更多信息。根據我通過Google找到的一些答案,我已經檢查過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策略(因爲這些策略將部署到垃圾箱而不是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部件庫中查看的網頁組件的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

它無法找到在網絡部分引用的組件。你看到的錯誤實際上是這行代碼的等價物。

無法導入此Web部件。

你需要做的是驗證您的.webpart定義文件的完整類和程序集引用的名稱和相應的更新。

可惜我不能告訴你,它應該是什麼正是因爲你的項目定義可以輸出比類確定指標不同的信息彙編。

+0

如果這是問題 - 當我部署到本地計算機時,看不到同樣的錯誤嗎?我已經使用相同的Powershell腳本在本地進行部署,沒有任何問題... – grimorde 2011-05-11 07:22:16

+0

唉,它把我切斷了。 有幾件事要檢查。 1.檢查程序集是否已加載到GAC或關聯的Web bin文件夾中。如果沒有,請檢查您生成的解決方案.wsp是否包含程序集。 2.如果您在gac中看到程序集並且仍然看到此問題,請嘗試將web.config信任級別更新爲完整 如果選項2有效,那麼缺少信任裝配中的條目和/或裝配體中的引用。 還要確保你總是在部署後重新啓動IIS – 2011-05-11 13:58:10

+0

1.是的,它確實在bin目錄下2.仍然無法導入完全信任集的Web部件錯誤。 – grimorde 2011-05-11 14:27:58