.net 4 xslt объекты расширения - PullRequest
       2

.net 4 xslt объекты расширения

3 голосов
/ 06 августа 2010

Я в процессе обновления веб-приложения asp.net v3.5.до v4, и у меня возникают некоторые проблемы с преобразованиями XSLT, которые я использую для объектов XmlDataSource.

Часть файла XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ExtensionObject="ds:ExtensionObject"> 
  <xsl:output method="xml" indent="yes" encoding="utf-8"/> 
  <xsl:template match="/Menus"> 
    <MenuItems> 
      <xsl:call-template name="MenuListing" /> 
    </MenuItems> 
  </xsl:template> 

  <xsl:template name="MenuListing"> 
    <xsl:apply-templates select="Menu" /> 
  </xsl:template> 

  <xsl:template match="Menu"> 
      <MenuItem> 
        <xsl:attribute name="Text"> 
          <xsl:value-of select="ExtensionObject:HtmlEncode(MenuTitle)"/> 
        </xsl:attribute> 
        <xsl:attribute name="ToolTip"> 
          <xsl:value-of select="MenuTitle"/> 
        </xsl:attribute> 
      </MenuItem> 
  </xsl:template> 
</xsl:stylesheet> 

И это инициализация:

xmlDataSource.TransformArgumentList.AddExtensionObject("ds:ExtensionObject", new ExtensionObject()); 
xmlDataSource.Data = Cache.FetchPageMenu(); 

ExtensionObject:

public class ExtensionObject {
    public static string HtmlEncode(string input) {
        return "test";
    } 
}

Я задавал похожий вопрос раньше: .net 4 xslt преобразование Функция расширения нарушена .Ответ был неоднозначным в отношении неоднозначного вызова, но даже с другим правильным объектом он просто не будет работать.Я не получаю никаких ошибок, просто данные не отображаются.

Я также пробовал это;

static void test() {
    // Create the XslCompiledTransform and load the stylesheet.
    XslCompiledTransform xslt = new XslCompiledTransform(true);
    xslt.Load(System.Web.Hosting.HostingEnvironment.MapPath("~/transforms/menu.xslt"));

    // Create an XsltArgumentList.
    XsltArgumentList xslArg = new XsltArgumentList();
    xslArg.AddExtensionObject("ds:ExtensionObject", new ExtensionObject());

    using (XmlWriter w = XmlWriter.Create("output.xml")) {
        // Transform the file.
        xslt.Transform(Cache.FetchPageMenu(), xslArg, w);
    }
}

Это работает правильно в консольном приложении, но в веб-приложении яполучить исключение защиты, опять же без каких-либо дополнительных сведений;

[SecurityException: запрос не выполнен.]
System.RuntimeMethodHandle.PerformSecurityCheck (объект obj, родительский класс RuntimeMethodHandleInternal, метод RuntimeType, вызов UInt32 * 0 +)1023 * System.Reflection.связыватель, параметры Object [], культура CultureInfo) + 38
System.Reflection.MethodBase.Invoke (параметры Object obj, Object []) + 35
System.Xml.Xsl.XsltOld.FuncExtension.Invoke (XsltContext xsltContext), Object [] args, XPathNavigator docContext) + 164
MS.Internal.Xml.XPath.FunctionQuery.Evaluate (XPathNodeIterator nodeIterator) + 430

Я использую локальный asp.net v4 IIS7 с полным доверием.

В чем может быть проблема с объектами ExtensionObjects.Кроме того, почему это так сложно отладить, есть ли хороший инструмент для отладки xslt с объектами расширения?

Спасибо agian ..

1 Ответ

5 голосов
/ 09 августа 2010

Через несколько дней я наконец нашел решение ...

Это пришло из этого поста: Визуализация элемента управления создает исключение безопасности в .Net 4

Установите [сборка: SecurityRules (SecurityRuleSet.Level1)] для сборки, и она работает.

...