سؤال

هناك ملفان XSL.يتضمن أحدهما الآخر باستخدام <xsl:include>.يحدد القالب الرئيسي القوالب الفعلية التي سيتم الاتصال بها اعتمادًا على قيم العقدة، وتحتوي القوالب المضمنة على قواعد تحويل فعلية.لا يوجد شئ خاص هنا.

لكن الملف المضمن يحتوي على كتلة البرنامج النصي:

  <msxsl:script language="VB" implements-prefix="user">
    <msxsl:assembly href="C:\Absolute\Path\MyEscaper.dll" />
    <msxsl:using namespace="ZebraEscaper.MyCompany" />
    <![CDATA[
    Public Function escape(s As String) As String
      Return EncodeField(s, True)
    End Function
    ]]>
  </msxsl:script>

يتم استخدام الدالة user:escape() لاحقًا في القالب المضمن.

الآن، أذهب إلى مصحح أخطاء VS2008 XSLT.

يدعو القالب الرئيسي <xsl:apply-templates> ويتم تنفيذ القالب المضمن.ويحدث استثناء FileNotFound، "تعذر تحميل الملف أو التجميع 'MyEscaper، Version=1.0.0.0، Culture=محايد، PublicKeyToken=null' أو أحد تبعياته.لا يمكن للنظام العثور على الملف المحدد."

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

لذا فإن السؤال - لماذا لا يستطيع النظام العثور على التجميع عندما يكون القالب متضمنًا؟

معلومات اكثر

ينص الوثائق على أنه "يتم حل اسم مسار التجميع مرتين - مرة واحدة أثناء التجميع ومرة ​​واحدة أثناء التنفيذ." إذا قمت بإجراء خطأ مطبعي في المسار ، فأنا أحصل على نفس الاستثناء FileNotfound ، ولكن تم تنسيقه بشكل مختلف ، حيث يقول النظام أنه لا يمكن العثور عليه الملف://C:\Absolute\Path\MyEscaper.dll.ومع ذلك، عندما يكون المسار صحيحًا، يدعي الاستثناء أنه لا يمكن العثور عليه MyEscaper.dll، الإصدار = blabla، الرمز المميز العام = null, ، ويحدث هذا الاستثناء في CompiledStylesheet.dll الذي تم إنشاؤه بواسطة .Net.أعتقد أنه يُطلب من ورقة الأنماط المترجمة استدعاء التجميع بالاسم، وليس بواسطة href، وبما أنها ليست في مجلدها المؤقت، يفشل الاستدعاء.

لما ذلك؟أين ولماذا تتم ترجمة المسار المطلق (بشكل خاطئ) إلى مسار نسبي، وكيف يمكنني التحكم فيه؟

هل كانت مفيدة؟

المحلول

لذا.

لسبب ما، في السيناريو المضمن، يتم حل المسار إلى التجميع بشكل مختلف أثناء الترجمة وأثناء التنفيذ.لماذا الأمر كذلك، ليس لدي أدنى فكرة.

تم العثور على حلين عاقلين فقط:

  1. انقل كل التعليمات البرمجية من التجميع المشار إليه إلى قالب XSL، مما يجعله برنامجًا نصيًا مضمنًا.في حالة الوظائف المساعدة الصغيرة التي يفضلها بالفعل.خلاف ذلك،

  2. قم بتوقيع التجميع المشار إليه باسم واضح، وأضفه إلى GAC، وقم بالرجوع إليه من القوالب باستخدام name, ، لا href.بهذه الطريقة سيتم البحث عن التجميع بنفس الطريقة أثناء التجميع والتنفيذ، وسيتم العثور عليه.

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