例如,下面的代码可以编译好,但在运行时抛出异常。 我的问题是,如何获取运行时错误行号?感谢。
using System;
using System.Collections.Generic;
using System.Text;
namespace mytempNamespace {
public class mytempClass : {
public void show() {
String msg=null;
String msgNew=msg.Substring(3);
}
}
}
编译时,结果没问题
CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, myClassCode);
Assembly assembly = compilerResults.CompiledAssembly;
当我调用方法" show"时,程序集会抛出异常。 如何在CodeDom中获取运行时错误行号?
答案 0 :(得分:1)
使用StackTrace提取异常的文件,行和列信息。
StackTrace stackTrace = new StackTrace(exception, true);
if (stackTrace.FrameCount > 0)
{
StackFrame frame = stackTrace.GetFrame(0);
int lineNumber = frame.GetFileLineNumber();
int columnNumber = frame.GetFileColumnNumber();
string fileName = frame.GetFileName();
string methodName = frame.GetMethod().Name;
// do stuff
}
您需要编译代码并设置CompilerParameters
以输出调试信息:
CompilerParameters parms = new CompilerParameters()
{
GenerateInMemory = false,
IncludeDebugInformation = true,
OutputAssembly = myOutputAssembly,
// other params
};
CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, myClassCode);
Assembly assembly = compilerResults.CompiledAssembly;
希望有所帮助!