我试图找到我们所有重新抛出异常的代码,其中抛出的新异常不包含作为内部异常的原始异常。这是一个例子:
catch(DBApplicationException dbEx)
{
BaseApplicationException bEx = new BaseApplicationException(dbEx.Message, dbEx);
bEx.MethodName = System.Reflection.Assembly.GetExecutingAssembly().FullName + "::" + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();
bEx.Severity = ExceptionSeverityLevel;
PublishingManager.Publish(bEx,"");
throw bEx;
}
catch(Exception e)
{
BaseApplicationException bEx = new BaseApplicationException(e.Message);
bEx.MethodName = System.Reflection.Assembly.GetExecutingAssembly().FullName + "::" + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();
bEx.Severity = ExceptionSeverityLevel;
PublishingManager.Publish(bEx,"");
throw bEx;
}
第一个 catch (catch (DBApplicationException dbEx) 被重新抛出为 BaseApplicationException,但如您所见,它将消息设置为 dbEx.Message,然后将 InnerException 指定为 dbEx,但第二个 catch 段重新抛出没有 InnerException , 它只包含 e.Message。
因此,对于我的正则表达式模式,我只想找到不包含内部异常的整个 catch 块,现在,我使用的模式将这两个 catch 块一起返回。
这是我的正则表达式模式:
catch((.|\n|\r)*){((.|\n|\r)*)Exception\(((?!,).)+\);((.|\n|\r)*)}
这是我测试这种情况的方法块:
public static DataSet SearchUserSessions(string username, string first, string last, string startDate, string endDate)
{
DataSet ds = null;
try
{
SqlParameter [] arParms = new SqlParameter[]
{
new SqlParameter("@UserName", username),
new SqlParameter("@FirstName", first),
new SqlParameter("@LastName", last),
new SqlParameter("@SessionStart", startDate),
new SqlParameter("@SessionEnd", endDate)
};
DB db = new DB();
ds = db.ExecuteDataset(SecurityConfig.ConnectionString, CommandType.StoredProcedure,
SPSearchUserSessions, (DB.Provider)SecurityConfig.ConnectionProviderType,
arParms);
}
catch(DBApplicationException dbEx)
{
BaseApplicationException bEx = new BaseApplicationException(dbEx.Message, dbEx);
bEx.MethodName = System.Reflection.Assembly.GetExecutingAssembly().FullName + "::" + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();
bEx.Severity = ExceptionSeverityLevel;
PublishingManager.Publish(bEx,"");
throw bEx;
}
catch(Exception e)
{
BaseApplicationException bEx = new BaseApplicationException(e.Message);
bEx.MethodName = System.Reflection.Assembly.GetExecutingAssembly().FullName + "::" + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();
bEx.Severity = ExceptionSeverityLevel;
PublishingManager.Publish(bEx,"");
throw bEx;
}
return ds;
}