2012-05-29 4 views
1

나는 다음과 같은 코드가 언젠가 NullReferenceExcecption을 던져 언젠가는 같은 XSLT 파일에서 작동XmlCompiledTransform.Load는 간헐적으로

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

을 니펫을 한 NullReferenceException이 발생합니다.

위의 코드가 잘못되었음을 알려주세요. 어떤 도움을 주시면 감사하겠습니다.

다음은 스택 추적 직접 XslCompiledTransform.Load Method 노트 섹션에서 복사

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

에게 있습니다 :

릴리스 모드로 컴파일 디버그 모드에서 컴파일 된 XSLT의 차이 및 XSLT 이 있습니다. 경우에 따라 디버그 모드로 컴파일 된 스타일 시트는로드 중에 오류를 발생시키지 않지만 변환 중에 나중에 오류가 발생합니다. 릴리스 모드에서 컴파일 된 동일한 스타일 시트는로드 중에 에 실패합니다. 이러한 동작의 예는 이 노드 집합 유형이 아닌 변수가 노드 집합이 필요한 표현식에 할당 된 경우입니다.

+0

다른 오류가 발생합니다. enableDebug = true - InvalidOperationException '로컬 변수 범위가 제대로 닫히지 않았습니다. 스택 추적 : System.Reflection.Emit.MethodBuilder.CreateMethodBodyHelper (ILGenerator 위원장) 에서 System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() 에서 System.Reflection.Emit.TypeBuilder.CreateType() 에서 시스템에. Xml.Xsl.IlGen.XmlILModule.BakeMethods() System.Xml.Xsl.XslCompiledTransform.LoadInternal (개체 스타일 시트, XsltSettings 설정, XmlResolver에의 stylesheetResolver)에서 System.Xml.Xsl.XmlILGenerator.Generate (QilExpression 쿼리하는 TypeBuilder typeBldr) 에서 – malay

관련 문제