2017-03-29 23 views
0

.NETコードに例外があり、PDBファイルが利用可能な場合、例外メッセージに表示されるソースコード行番号のエラーが表示されます。これは、PDBファイルが提供されていますが、私は、任意の行番号を取得しないコマンドライン実行、中に異なるように思える:c#コマンドラインにエラー行番号なし

Anwendung: MNX.CommandLine.EpkFtpEventhandler.exe Frameworkversion: v4.0.30319 Beschreibung: Der Prozess wurde aufgrund eines Ausnahmefehlers beendet. Ausnahmeinformationen: System.Data.SqlClient.SqlException Stapel: bei System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(System.String, Boolean, Int32, Boolean) bei System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(System.Threading.Tasks.TaskCompletionSource`1, System.String, Boolean, Int32, Boolean) bei System.Data.SqlClient.SqlCommand.ExecuteNonQuery() bei MNX.DB.WriteLocal(System.String) bei MNX.DB.Write(System.String) bei MNX.CommandLine.EpkFtpEventHandler.Main(System.String[])

誰もがなぜ知っていますか?

+0

メッセージ以外の例外の詳細を確認しましたか? – MetaColon

+0

私が考えることができる唯一のその他の有用な詳細はStackTraceプロパティですが、行番号を渡すとは思いません。他の情報があれば、コード全体をtry/catchして報告します。 – needfulthing

答えて

0

Exception.StackTraceは、キャッチから来たときに行番号を戻しました。私が例外をキャッチしたときだけ、奇妙なことに、キャッチされずにスローされたときではありません。

0

Debug > Options > Debugging > Symbolsにアクセスしてシンボルキャッシュを空にし、その後でソリューションをクリーニングしてください。

Empty symbol cache

+0

ここでVSを使用していない場合、/ debugフラグを使用してコマンドラインをcsc.exeでコンパイルしました。エラーメッセージは、コンソール出力とイベントログに表示されます。 – needfulthing

0

使用スタックフレームとあなたがトライキャッチでコーディング囲む:

try 
{ 
    throw new Exception(); 
} 
catch (Exception ex) 
{ 
    // Get stack trace for the exception with source file information 
    var st = new StackTrace(ex, true); 
    // Get the top stack frame 
    var frame = st.GetFrame(0); 
    // Get the line number from the stack frame 
    var line = frame.GetFileLineNumber(); 
    // Print the line number 
    Console.WriteLine($"An Error ({ex.Message}) occurred in line {line}"); 
} 

を盗作を避けるために:私はthis questionからアイデアを得ました。

私はよく分かりませんなぜこれはコンソールアプリケーションには通常表示されませんが、これも同様に行う必要があります。

+0

私はvar行から行番号として0を得るだけです。 Exception.StackTraceは私に回線番号を返しました。私が例外をキャッチしたときだけ、奇妙なことに、キャッチされずにスローされたときではありません。 – needfulthing