2012-05-29 31 views
1

我有下面的代碼片段XmlCompiledTransform.Load拋出一個NullReferenceException間歇

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) 

回答

1

XslCompiledTransform.Load Method注部分直接複製:

有在調試模式下編譯和XSLT 在Release模式編譯XSLT之間的差異。在某些情況下,編譯爲 調試模式的樣式表在加載過程中不會拋出錯誤,但在變換過程中稍後會失敗 。在發佈模式下編譯的相同樣式表將在加載期間失敗 。這種行爲的一個示例是,將不屬於節點集類型的變量分配給需要 節點集的表達式。

+0

我得到了不同的錯誤enableDebug = true - InvalidOperationException'本地變量作用域未正確關閉。 堆棧跟蹤: 在System.Reflection.Emit.MethodBuilder.CreateMethodBodyHelper(IL的ILGenerator) 在System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() 在System.Reflection.Emit.TypeBuilder.CreateType() 的系統。 Xml.Xsl.IlGen.XmlILModule.BakeMethods() 在System.Xml.Xsl.XmlILGenerator.Generate(QilExpression查詢,TypeBuilder typeBldr) 在System.Xml.Xsl.XslCompiledTransform.LoadInternal(對象樣式,XsltSettings設置的XmlResolver stylesheetResolver) – malay

相關問題