【问题标题】:XmlCompiledTransform.Load throws a NullReferenceException intermittentlyXmlCompiledTransform.Load 间歇性抛出 NullReferenceException
【发布时间】:2012-06-03 08:20:56
【问题描述】:

我有以下代码sn-p

this.xslCompiledTransform = new XslCompiledTransform();

// initialize xsl transform
using (Stream xsltStream = currentAssembly.GetManifestResourceStream(this.TransformationFile))
using (XmlReader schemaReader = XmlReader.Create(xsltStream))
{
    XsltSettings settings = new XsltSettings() { EnableScript = true };
    this.xslCompiledTransform.Load(schemaReader, settings, null);
}

它有时会抛出 NullReferenceExcecption,有时它会在同一个 xslt 文件上工作。

你能告诉我上面的代码有什么问题吗?任何帮助将不胜感激。

下面是堆栈跟踪

    Object reference not set to an instance of an object.

Stack Trace:
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitFor(QilIterator ndFor)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisitEnsureStack(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitXPathNodeValue(QilUnary ndVal)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisitEnsureStack(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitXsltInvokeEarlyBound(QilInvokeEarlyBound ndInvoke)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitTextCtor(QilUnary ndText, Boolean disableOutputEscaping)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitLoop(QilLoop ndLoop)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitElementCtor(QilBinary ndElem)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitElementCtor(QilBinary ndElem)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitSequence(QilList ndSeq)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitElementCtor(QilBinary ndElem)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.VisitConditional(QilTernary ndCond)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd, Type itemStorageType, Boolean isCached)
   at System.Xml.Xsl.IlGen.XmlILVisitor.NestedVisit(QilNode nd)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Function(QilFunction ndFunc)
   at System.Xml.Xsl.IlGen.XmlILVisitor.Visit(QilExpression qil, GenerateHelper helper, MethodInfo methRoot)
   at System.Xml.Xsl.XmlILGenerator.Generate(QilExpression query, TypeBuilder typeBldr)
   at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)

【问题讨论】:

    标签: c# xml exception xslt nullreferenceexception


    【解决方案1】:

    直接抄自XslCompiledTransform.Load Method备注部分:

    在 Debug 模式下编译的 XSLT 与 XSLT 之间存在差异 在发布模式下编译。在某些情况下,样式表编译在 调试模式在加载期间不会抛出错误,但稍后会失败 变换期间。在发布模式下编译的相同样式表将 加载期间失败。这种行为的一个例子是当一个变量 不是节点集类型被分配给一个表达式,其中 节点集是必需的。

    【讨论】:

    • 我收到不同的错误 enableDebug=true - InvalidOperationException'局部变量范围未正确关闭。堆栈跟踪:在 System.Reflection.Emit.MethodBuilder.CreateMethodBodyHelper(ILGenerator il) 在 System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() 在 System.Reflection.Emit.TypeBuilder.CreateType() 在 System.Xml.Xsl.IlGen。 XmlILModule.BakeMethods() 在 System.Xml.Xsl.XmlILGenerator.Generate(QilExpression 查询,TypeBuilder typeBldr) 在 System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)
    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 2013-05-30
    • 2020-09-20
    相关资源
    最近更新 更多