c# - Why is CSharpOptParse UsageBuilder failing due to an XPathException only when used in an NUnit test? -


इस समस्या का मूल कारण क्या है? CSharpOptParse, XslTransform.Transform (...), या NUnit? इसके बजाय, क्या अन्य समतुल्य पुस्तकालय का उपयोग किया जा सकता है, यदि यह समस्या अक्षम्य है, जो सक्रिय रूप से समर्थित है?

मैं संस्करण 1.0.1 का उपयोग कर रहा हूं, जिसमें से अंतिम बार फरवरी 2005 में संशोधित किया गया था।

< p> मैं निम्नलिखित वर्ग (बेशक इस उदाहरण के लिए सरलीकृत) CSharpOptParse के साथ उपयोग करने के लिए है:

  सार्वजनिक enum CommandType {प्रयोग} सार्वजनिक वर्ग विकल्प {[OptDef (OptValType.Flag) ] [लोंगओपशननाम ("सहायता")] [विवरण ("यह सहायता दिखाता है")] सार्वजनिक बाल सहायता {get; सेट; } सार्वजनिक कमांड टाईप कमांड टाइप (get {return CommandType.Usage; }}}  

यहां एक बिट परीक्षण कोड है जो इस समस्या की प्रतिकृति करता है:

  TextWriter आउटपुट = कंसोल.ऑउट; विकल्प विकल्प = नया विकल्प {सहायता = सच}; पार्सर पी = पार्सरफैक्टार्टर। बिल्डर (विकल्प); p.Parse (); Output.WriteLine ("उपयोग: कंसोल [- ए]"); उपयोगबिल्डर बिल्डर = नए प्रयोक्ता बिल्डर (); builder.BeginSection ( "तर्क:"); builder.AddOptions (p.GetOptionDefinitions ()); // क्या यहां मुद्दा बनाया जा सकता है? builder.EndSection (); बिल्डर। टेक्स्ट (आउटपुट, ऑप्टस्टाइल। यूनिक्स, सच); // समस्या यहाँ होती है  

क्या यह संभव है कि मैं UsageBuilder को सही वर्गों के साथ सेट अप न करें?

  System.Xml.XPath.XPathException: समारोह संभवतः इस xslt फ़ाइल ???  

जब मुझे लगता है कि कोड मैं निम्न अपवाद मिल चलाने में समस्याओं का कारण हो सकता है 'Ext: FormatText ()' विफल हो गया है ---- & gt; प्रणाली। रिफ्लेक्शन। लक्षित इन्विलेशन एक्स्प्शन: एक आमंत्रण के लक्ष्य से अपवाद फेंक दिया गया है। ---- & gt; System.ArgumentOutOfRangeException: सूचकांक सीमा से बाहर था गैर-नकारात्मक और संग्रह के आकार से कम होना चाहिए। पैरामीटर नाम: STARTINDEX MS.Internal.Xml.XPath.FunctionQuery.Evaluate (XPathNodeIterator nodeIterator) System.Xml.Xsl.XsltOld.Processor.ValueOf पर (ActionFrame संदर्भ, Int32 कुंजी) System.Xml.Xsl.XsltOld.ValueOfAction पर पर। System.Xml.Xsl.XsltOld.Processor.Execute पर System.Xml.Xsl.XsltOld.Processor.Execute पर System.Xml.Xsl.XsltOld.ActionFrame.Execute (प्रोसेसर प्रोसेसर) () पर (प्रोसेसर प्रोसेसर, ActionFrame फ्रेम) निष्पादित (TextWriter लेखक) System.Xml.Xsl.XslTransform.Transform (XPathNavigator इनपुट, XsltArgumentList args, TextWriter आउटपुट, XmlResolver रिज़ॉल्वर) पर System.Xml.Xsl.XslTransform.Transform (IXPathNavigable इनपुट, XsltArgumentList आर्ग्स, TextWriter आउटपुट, XmlResolver रिज़ॉल्वर) CommandLine.OptParse.UsageBuilder.ToText (TextWriter लेखक, OptStyle optStyle, बूलियन includeDefaultValues, Int32 maxColumns) --TargetInvocationException System.RuntimeMethodHandle._InvokeMethodFast (वस्तु लक्ष्य पर पर, वस्तु [] एक रुगुमेंट्स, हस्ताक्षरस्ट्रैंक & amp; सिस्टम पर सिस्टम विधि। विशेषताएँ, रनटाइम टाईपहंडल टाइप ओनर) सिस्टम पर.रंटिमेम MethodHandle.InvokeMethodFast (ऑब्जेक्ट लक्ष्य, ऑब्जेक्ट [] तर्क, हस्ताक्षर हस्ताक्षर, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) सिस्टम पर। Reflection.RuntimeMethodInfo.Invoke (ऑब्जेक्ट obj, BindingFlags invokeAttr, बांधने की मशीन बांधने की मशीन, System.Reflection.RuntimeMethodInfo.Invoke (वस्तु obj, BindingFlags invokeAttr, बाइंडर बांधने की मशीन में वस्तु [] पैरामीटर, CultureInfo संस्कृति, बूलियन skipVisibilityChecks), System.Reflection.MethodBase.Invoke (वस्तु obj, वस्तु पर [] पैरामीटर, CultureInfo संस्कृति) वस्तु [] पैरामीटर) System.Xml.Xsl.XsltOld.XsltCompileContext.FuncExtension.Invoke पर (XsltContext xsltContext, ऑब्जेक्ट [] ARG, XPathNavigator docContext) MS.Internal.Xml.XPath.FunctionQuery.Evaluate पर (XPathNodeIterator नोडइंटरएटर) --अर्जमेटऑफ़रेन्ज अपवाद System.String.LastIndexOfAny (चार [] anyOf, Int32 startIndex, Int32 गिनती)

मुझे पता नहीं है टी इस समस्या का कारण है .... और सबसे अजीब हिस्सा यह है कि केवल मेरे एनयूआईआईटी परीक्षण के भीतर होता है। जब इस कोड को "Console.exe --help" के माध्यम से कहा जाता है तो यह कोई अपवाद नहीं है। मैं CSharpOptParse के साथ कुछ भी गलत नहीं देख सकता है इसलिए यह .NET के XslTransform वर्ग या NUnit में एक समस्या हो सकती है?

क्या किसी और को इस समस्या का अनुभव है? क्या किसी को भी इस मुद्दे को ट्रैक करने या बेहतर लाइब्रेरी पर स्विच करने के बारे में कोई सलाह है?

मुझे पता है यह एक पुराना सवाल है लेकिन ..

अपवाद का कारण होता है क्योंकि ToText () पद्धति कंसोल की चौड़ाई निर्धारित करने का प्रयास करती है और जब आप कुछ भी लिख रहे हों जो कि वास्तविक नहीं है कंसोल।

तय करना सरल है: निश्चित चौड़ाई निर्धारित करें।

कॉल को ToText को बदलें:

  try {use.ToText (Console) .ठीक, ऑप्टस्टाइल। यूनिक्स, सच); } पकड़ {use.ToText (Console.Out, OptStyle.Unix, true, 90); }  

अब अगर सामान्य कॉल विफल हो जाता है, तो वह असफल-सुरक्षित एक को आज़माएगा।


Comments