3

asp.net v3.5 Web アプリをアップグレード中です。XmlDataSource オブジェクトで使用する XSLT 変換でいくつかの問題に直面しています。

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(); 

拡張オブジェクト:

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

私は前に同様の質問をしました: .net 4 xslt conversion 拡張機能が壊れています。あいまいな呼び出しについての答えは正しかったのですが、別の正しいオブジェクトを使用しても機能しません。エラーは表示されません。データが表示されないだけです。

私もこれを試しました。

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);
    }
}

これはコンソール アプリケーションでは適切に機能しますが、Web アプリケーションではセキュリティ例外が発生し、これ以上の詳細はありません。

[SecurityException: 要求が失敗しました。]
System.RuntimeMethodHandle.PerformSecurityCheck(Object obj、RuntimeMethodHandleInternal メソッド、RuntimeType 親、UInt32 invocationFlags) +0
System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、Binder バインダー、Object[] パラメーター、CultureInfo culture, Boolean skipVisibilityChecks) +323
System.Reflection.RuntimeMethodInfo.Invoke(オブジェクト obj, BindingFlags invokeAttr, バインダー バインダー, Object[] パラメータ, CultureInfo カルチャ) +38
System.Reflection.MethodBase.Invoke(オブジェクト obj, オブジェクト[] パラメータ) +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 をデバッグするための優れたツールはありますか?

ありがとうございます

4

1 に答える 1

5

数日後、私はついに解決策を見つけました...

この投稿から来ました: Rendering a control generate security exception in .Net 4

アセンブリに [assembly: SecurityRules(SecurityRuleSet.Level1)] を設定すると動作します。

于 2010-08-08T21:42:10.840 に答える