スローされる新しい例外に元の例外が内部例外として含まれていない場合に、例外を再スローするすべてのコードを見つけようとしています。次に例を示します。
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として指定しますが、2番目のcatchセグメントはInnerExceptionなしで再スローされます。 、e.Messageのみが含まれます。
したがって、正規表現パターンの場合、内部例外を含まないcatchブロック全体を検索するだけです。現在、使用しているパターンは、これら2つの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;
}