質問

自分で開発した Web パーツがあり、その Web パーツを手動でインストールしても問題ありません。

ただし、ガイドとしてこの Web サイトの手順に従って Web パーツをパッケージ化すると、次のようになります。http://www.theartofsharepoint.com/2007/05/how-to-build-solution-pack-wsp.html

ログ ファイルに次のエラーが記録されます。

09/23/2008 14:13:03.67  w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       8l4d    Monitorable Error importing WebPart. Cannot import Project Filter.   
09/23/2008 14:13:03.67  w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       89ku    High        Failed to add webpart http%253A%252F%252Fuk64p12%252FPWA%252F%255Fcatalogs%252Fwp%252FProjectFilter%252Ewebpart;Project%2520Filter.  Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import Project Filter.     at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(...  
09/23/2008 14:13:03.67* w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       89ku    High        ...String eventArgument)     

関連するビットは次のとおりです。

http%253A%252F%252Fuk64p12%252FPWA%252F%255Fcatalogs%252Fwp%252FProjectFilter%252Ewebpart;Project%2520Filter.
Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import Project Filter.
at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)
at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)
at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)
at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)

そして、それにはかなり簡潔なエラー メッセージが伴います。「Web パーツをインポートできません」。

確認したところ、.dll は安全なものとして登録されており、GAC 内にあり、機能がアクティブ化されており、Web パーツ ファイルが正常に読み取られたことを示す正しいプロパティをすべて備えた Web パーツが Web パーツ ライブラリに表示されています。

すべてが適切に配置されているように見えますが、SharePoint からエラーが表示され、その解決方法についてほとんど説明がありません。

解決策を見つけるお手伝いをしていただければ幸いです。

役に立ちましたか?

解決

理解した。

エラー メッセージは、.webpart ファイルからのものです。

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <!--
      The following Guid is used as a reference to the web part class, 
      and it will be automatically replaced with actual type name at deployment time.
      -->
      <type name="7F8C4D34-6311-4f22-87B4-A221FA8735BA" />
      <importErrorMessage>Cannot import Project Filter.</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">Project Filter</property>
        <property name="Description" type="string">Provides a list of Projects that can be used to Filter other Web Parts.</property>
      </properties>
    </data>
  </webPart>
</webParts>

問題は、元の .webpart ファイルが、Visual Studio Extensions for WSS がインストールされた 32 ビット システムで作成されたことです。

ただし、現在 64 ビット マシンを使用しているため、VSEWSS は利用できません。これらの展開ツールを使用していないため、上記の GUID は置換されないと考えられます。

GUID を完全な型名に置き換えると機能します。

そのため、importErrorMessage ノードからのエラー メッセージが表示された場合は、.webpart ファイル内の type ノードが次のようになっていることを確認してください (無関係な例)。

<type name="TitleWP.TitleWP, TitleWP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" />

これは次の形式になります。クラス、名前空間、バージョン、カルチャ、公開鍵

これは、安全なコントロール リストに含まれるため、SharePoint インスタンスに関連付けられた web.config ファイルから簡単に取得できます。

他のヒント

これと同じ問題が発生し、Web パーツのコンストラクターが WebPartImporter によって呼び出されており、コンストラクター内で SPSecurity.RunWithElevatedPrivileges を実行していることがわかりました。

何らかの理由で、WebPartImporter はこれを処理できません。そこで、コードをコンストラクターから OnInit (実際に属していた場所) に移動するだけで、すべてがうまくいきました。

どれも素晴らしい提案ばかりです。私の問題は独特で愚かなものでした。最初の Web アプリケーションにはソリューションをデプロイしていましたが、2 番目の Web アプリケーションにはデプロイしていませんでした。ただし、SharePoint では、2 番目の Web アプリのサイト コレクションで機能をアクティブにすることができました (理由はわかりません)。これは、2 番目の Web アプリには、この Web.config ファイルに安全なコントロール エントリがないことを意味します (そして、私は愚かにも最初の Web.config をチェックしていました)。

そのため、正しい Web アプリケーション/web.config を参照していることを再確認してください。

これで、以下のような同様の問題に対する答えが得られます。

新しい wep パーツをページに追加しようとすると、sharepoint によってエラー メッセージが表示されます。「Web パーツをインポートできません。このエラー メッセージは .webpart ファイルで定義されています。」

そこで、ページに他の Web パーツを追加しようとしました。奇妙な質問の外観で、追加できるものと追加できないものがあります。

Web パーツのコードをトレースして分析したところ、次の理由が見つかりました。

Web パーツ ProjectInfo (Web パーツ名) の古いコードは次のとおりです。

namespace ProjectInfo
....
 public class ProjectInfo:System.Web.UI.WebControls.WebParts.Web.part
 {
        .....
        private SPWeb _spWeb;
        private SPList _spList;
        private string _listName = "ProjectDocs";
        ......
 }
public ProjectInfo()
 {
        .....
            _spWeb = SPContext.Current.Web;
            //It show me a error here when i trace the code
            _spList = _spWeb.Lists[_listName]; 
        .....
 }

もうやめてください、おそらく Web ページの初期化順序に問題があるのではないかと思いました。Web ページの読み込み Web パーツ コントロールとして、最初に構成関数 ProjectInfo() が実行されます。実際には、Web ページはまだ初期化を完了していません。その時には。

それでテストをしました。まず、ページに適切な Web を配置しました。問題ありません。次に、今追加できなかった Web パーツをページに配置してみます。~~OK!!動作しています...ページがすでに初期化されているためです。終了した。

わかりました!コードを修正しました:

   namespace ProjectInfo
    ....
     public class ProjectInfo:System.Web.UI.WebControls.WebParts.Web.part
     {
            .....
            private SPWeb _spWeb;
            private SPList _spList;
            private string _listName = "ProjectDocs";
            ......
     }
    public ProjectInfo()
     {
            .....
                //Remove code in constructure function.
                //_spWeb = SPContext.Current.Web;
                //It show me a error here when i trace the code
                //_spList = _spWeb.Lists[_listName]; 
            .....
     }

   protected override void CreateChildControls()
        {
         ....
           base.CreateChildControls();

            _spWeb = SPContext.Current.Web;
            _spList = _spWeb.Lists[_listName];
          ....
         }

テストした後、エラー メッセージは再度発生しませんでした。笑~~

この説明がお役に立てば幸いです。

私はこの異常を何度か見たことがありますが、適切な解決策はありませんでした。

アセンブリ、名前空間、クラス名がどこでも正しいことを確認してください。これで私は何度も電話を切られました。

有効な SafeControls エントリがあることを確認してください。

.webpart ファイルが有効であることを確認してください (可能であれば、SharePoint にファイルを作成させてください)

もしあなたが、すべてが正しいと絶対的に確信しているのであれば、あなたは、私が何度か訪れたことがある場所に陥っていることになります。私が思いつく唯一のことは、VS がアセンブリを間違ってコンパイルしているということです。私が見つけた唯一の解決策は、新しい VS プロジェクトを作成して必要に応じて設定し、古い CS ファイルのテキストを新しい CS ファイルにコピーすることです...ファイル自体をコピーしないでください...目標はすべてを新鮮なものにすることです。

これは私にとってはうまくいきました。幸運を。

ワーカー プロセスをリサイクルしたり、IIS をリセットしたりしましたか?

私のものは解決しました。

このエラーが発生していました:

===========================================================================
Error importing WebPart. Cannot import ........ Web Part.
Failed to add webpart 
Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import ... Web Part.     at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)   
===========================================================================

「Webパーツをインポートできません...」

問題は次のとおりです。一致しない GUID

webpart クラスの guid と、.xml および .webpart クラスの guid が同じかどうかを確認してください。

他の Web パーツ ソースからコードをコピーアンドペーストしていました。(Codeplex の複数のドキュメントのアップロード Wepart)、GUID を修正するのを忘れていました。

また、Web パーツが参照している GAC 内のアセンブリが、予期していたものとは異なる厳密な名前のキー ファイルによって署名されていた場合にも、このエラーが発生しました。これらの DLL を更新しようと決めたときにこのことに気づきました。これを GAC に挿入すると、同じ DLL に 2 つのエントリがあるが、公開キー トークンが異なることに気づきました。

基本クラス Web パーツを作成し、そこから派生クラスを継承したときに、このエラーが発生しました。基本クラスは問題ありませんでしたが、派生クラスを Web ページに追加しようとすると、元の投稿と同じエラーが発生して失敗しました。私の場合、追加する必要がありました 公共 クラスの修飾子:

public class DerivedWebPart : BaseWebPart

また、基本クラスを呼び出すための派生クラスにコンストラクターを追加しました。ただし、これは実際には必要ではないと思います。

    public DerivedWebPart() : base()
    {
    }

これとよく似た問題がありましたが、GUID は問題ではありませんでした。私のWebパーツには CLSCompliannt 属性を false に設定します。そのようです:

namespace MyNamespace
{

    [CLSCompliant(false)]
    [Guid("...")]
    public class MyWidget : MyWebPartBaseClass
    {

    }
}

最初はインポートされていないことがわかりましたが、「新規」をクリックして追加すると、インポートできるようになります。

そこから XML のコピーを取得し、プロジェクトに保存しました。その後、Web パーツはうまく機能しました。

ここまで来るのに数日しかかかりませんでした。たくさんの時間を無駄にしました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top