2017-06-06 18 views
0

私はC#コンソールアプリケーションを継承しましたが、私はエラー処理の記述に精通していません。どんな問題なく毎晩実行されているこのアプリの数ヶ月後に、それだけで、最後の3日間、毎日、次のエラーを投げ始めた:私は誰かがこの問題を解決するためのアプリに掘ることができますまでコンソールアプリケーションのSystem.Xmlのエラー処理

Unhandled Exception: System.Xml.XmlException: An error occurred while parsing EntityName. Line 5, position 338. 
    at System.Xml.XmlTextReaderImpl.Throw(Exception e) 
    at System.Xml.XmlTextReaderImpl.HandleEntityReference(Boolean isInAttributeValue, EntityExpandType expandType, Int32& charRefEndPos) 
    at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars) 
    at System.Xml.XmlTextReaderImpl.FinishPartialValue() 
    at System.Xml.XmlTextReaderImpl.get_Value() 
    at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r) 
    at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o) 
    at System.Xml.Linq.XDocument.Load(XmlReader reader, LoadOptions options) 
    at System.Xml.Linq.XDocument.Load(String uri, LoadOptions options) 
    at System.Xml.Linq.XDocument.Load(String uri) 
    at Data.Service.AssignmentService.<HandleMarkupActivityStep>d__10.MoveNext() in C:\Users\default\Source\Workspaces\Data\Data - Transfer\Data.Service\AssignmentService.cs:line 381 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Vital4Data.Service.AssignmentService.<ProcessSingleHtmlSource>d__17.MoveNext() in C:\Users\default\Source\Workspaces\Data\Data - Transfer\Data.Service\AssignmentService.cs:line 948 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_1(Object state) 
    at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 
Status changed to Failed 
Job failed due to exit code -532462766 

、Iアプリがこのエラーを無視して、今のところ失敗せずに続行する必要があります。これを達成するためにコードにエラー処理を追加するにはどうすればよいですか?これはtry/catchブロックの候補ですか?またはtry/catchブロックを捕捉して最初にこれを投げたか?私は指導に感謝するので、エラーを無視して実行を続けるようプログラムに指示することができます。

+1

try-catchに空のcatch句を追加するだけです。 – ColinM

+1

*私はこのエラーを無視し、失敗せずに続行する必要がある*非常に素朴で無知なアプローチです。なぜXMLがコードの移動を引き起こしているのかを調べます。問題のXmlファイルを開く*処理されない例外:System.Xml.XmlException:EntityNameの解析中にエラーが発生しました。 *エラー処理の欠如は、災害のためのレシピであり、 'catch'ブロックに' XmlException'を使用して、非常に悪いコードの匂いであるジェネリックな 'Exception'を使用する代わりに何があるかを判断します。 – t0mm13b

+0

@ t0mm13b私は完全に理解していますが、あなたが言及したことを正確に行うことができる専任の専任のリソースがあるまで、これは非常に一時的なバンドエイドです(文字通り5日以内)。 – Stpete111

答えて

1

コンソールアプリケーションは、スケジュールされたジョブでよく使用されます。ColinM氏によると、try-catchを実装する必要がありますが、さらに分析するためにトレースを記録することをおすすめします。

+0

情報をいただきありがとうございます。そして、私は、来週に新しいリソースを手に入れたら、さらに分析するつもりです。 try/catchの実装に関しては、381行目のコードはswitch文内のケースです。try/catch内のswitch文全体を折り返す必要がありますか? – Stpete111

+1

アプリを継承したと言って以来、私はスイッチだけでなく、すべての機能をラップします。あなたはおそらくこのアプリがどれくらいの "パンドラボックス"のどれくらいか分からないので、私はこの瞬間にどんな危険も冒さないでしょう。 新しいリソースが到着したら、コードをよりよくリファクタリングしてください。 乾杯! –