سؤال

لدي جزء ويب قمت بتطويره، وإذا قمت بتثبيت جزء الويب يدويًا فلا بأس.

ومع ذلك، عندما قمت بتعبئة جزء الويب باتباع الإرشادات الموجودة على موقع الويب هذا كدليل: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)

وهذا مصحوب برسالة خطأ مقتضبة إلى حد ما:"لا يمكن استيراد جزء الويب".

لقد قمت بالتحقق وتم تسجيل ملف .dll الخاص بي على أنه آمن، وهو موجود في GAC، وتم تنشيط الميزة، وتظهر أجزاء الويب في مكتبة أجزاء الويب مع كافة الخصائص الصحيحة التي توضح أنه تمت قراءة ملفات أجزاء الويب بنجاح.

يبدو أن كل شيء في مكانه الصحيح، ولكنني أتلقى هذا الخطأ وشرحًا بسيطًا من 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 الأصلي تم إنشاؤه على نظام 32 بت مع تثبيت Visual Studio Extensions for WSS.

ومع ذلك، نظرًا لأنني الآن أستخدم جهاز 64 بت، فإن VSEWSS غير متاح، وأعتقد أن ذلك يؤدي إلى عدم استبدال المعرف الفريد العمومي (GUID) أعلاه لأنني لا أستخدم أدوات النشر هذه.

يعمل استبدال GUID باسم النوع الكامل.

لذا، إذا واجهت رسالة الخطأ من عقدة importErrorMessage الخاصة بك، فتأكد من أن عقدة النوع الخاصة بك في ملف .webpart تبدو أكثر مثل هذا (مثال غير ذي صلة):

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

وهذا بالصيغة:الفئة، مساحة الاسم، الإصدار، الثقافة، المفتاح العام

يمكنك الحصول على ذلك بسهولة من ملف web.config المرتبط بمثيل SharePoint الخاص بك، حيث سيكون موجودًا في قائمة عناصر التحكم الآمنة.

نصائح أخرى

لقد واجهنا نفس المشكلة ووجدنا أن مُنشئ جزء الويب الخاص بنا تم استدعاؤه بواسطة WebPartImporter وداخل المُنشئ كنا نقوم بتنفيذ SPSecurity.RunWithElevatedPrivileges.

لسبب ما، لا يستطيع WebPartImporter التعامل مع هذا الأمر.لذلك، قمنا ببساطة بنقل الكود الخاص بنا من المُنشئ إلى OnInit (حيث ينتمي بالفعل) وكل شيء على ما يرام.

كل الاقتراحات العظيمة.كانت مشكلتي فريدة وسخيفة:لقد قمت بنشر الحل على تطبيق الويب الأول ولكن ليس على التطبيق الثاني.ومع ذلك، لا يزال SharePoint يسمح لي بتنشيط الميزة في مجموعة الموقع الثانية لتطبيق الويب (لست متأكدًا من السبب).هذا يعني أن تطبيق الويب الثاني لا يحتوي على إدخال تحكم آمن في ملف Web.config هذا (وكنت أتحقق بغباء من Web.config الأول).

لذا، تحقق مرة أخرى من أنك تبحث في تطبيق الويب/web.config الصحيح.

الآن أحصل على إجابة لمشكلة مماثلة على النحو التالي:

عندما أحاول إضافة جزء ويب جديد إلى الصفحة، تظهر لي Sharepoint رسالة خطأ، أخبرني - لا يمكن استيراد جزء الويب الخاص بي، يتم تعريف رسالة الخطأ هذه في ملف .webpart.

لذلك حاولت إضافة بعض أجزاء الويب الأخرى في الصفحة، مظهر أسئلة غريب، بعضها يمكن إضافته، وبعضها لا يمكن إضافته.

بعد أن تتبعت التعليمات البرمجية الخاصة بجزء الويب الخاص بي وقمت بتحليلها، وجدت السبب:

الكود القديم لجزء الويب ProjectInfo (اسم جزء الويب الخاص بي) هو:

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]; 
        .....
 }

توقف الآن، اعتقدت أنه ربما تكون هناك مشكلة في ترتيب صفحة الويب.كما هو الحال مع جزء التحكم في تحميل صفحة الويب، سيتم تشغيل وظيفة إنشاء ProjectInfo () في البداية.في الواقع، صفحة الويب لم تكمل بدايتها.بحلول الوقت.

لذلك قمت باختبار.أولاً، قمت بوضع شبكة ويب جيدة في الصفحة، فلا بأس.ثم أحاول وضع جزء الويب في الصفحة والذي لا يمكن إضافته الآن.~~ حسنا!!إنها تعمل... لأن الصفحة بدأت بالفعل.انتهى.

نعم!لقد قمت بتصحيح الكود الخاص بي:

   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)   
===========================================================================

"لا يمكن استيراد جزء ويب..."

المشكلة كانت:GUIDs غير متطابقة

تحقق مما إذا كان المرشد الموجود في فئة جزء الويب وفي فئة .xml وفي فئة .webpart متماثلين.

كنت أقوم بنسخ ولصق التعليمات البرمجية من مصادر أجزاء الويب الأخرى.(Mutliple Document Upload Wepart on Codeplex) ونسيت إصلاح الأدلة.

لقد واجهت هذا الخطأ أيضًا عندما تم التوقيع على التجميعات الموجودة في GAC التي أشار إليها جزء الويب الخاص بي بواسطة ملف مفتاح اسم واضح مختلف عما كنت أتوقعه.لقد اكتشفت ذلك عندما قررت تحديث ملفات DLL هذه.عند إدراجه في GAC، لاحظت وجود إدخالين لنفس ملف DLL ولكن كان لديهم رموز مفتاح عامة مختلفة

لقد حصلت على هذا الخطأ عندما قمت بإنشاء جزء ويب للفئة الأساسية ثم ورثت فئة مشتقة منه.كانت الفئة الأساسية جيدة ولكن الفئة المشتقة فشلت عندما حاولت إضافتها إلى صفحة ويب بنفس الخطأ الموجود في المنشور الأصلي.في حالتي كان علي أن أضيف أ عام المعدل للفئة:

public class DerivedWebPart : BaseWebPart

لقد أضفت أيضًا مُنشئًا في الفئة المشتقة لاستدعاء الفئة الأساسية الأولى - على الرغم من أنني أعتقد أنك لا تحتاج إلى هذا حقًا:

    public DerivedWebPart() : base()
    {
    }

لقد واجهت مشكلة مشابهة جدًا لهذه، ولكن الأدلة الإرشادية لم تكن هي المشكلة:جزء الويب الخاص بي لا يحتوي على CLSCompliannt تم ضبط السمة على خطأ.مثل ذلك:

namespace MyNamespace
{

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

    }
}

لقد وجدت أن ملفي لم يتم استيراده في المرة الأولى، ولكن إذا قمت بالنقر فوق "جديد" وأضفته، فسوف ينجح الأمر.

ومن هناك حصلت على نسخة من XML وحفظتها في مشروعي.لقد عمل جزء الويب بشكل رائع بعد ذلك.

استغرق الأمر مني أيامًا فقط للوصول إلى هذه النقطة.الكثير من الوقت الضائع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top