2013-10-11 5 views
1

J'utilise SmartAssembly à la fois pour l'obfuscation de code générale et pour la signalisation d'erreur dans une application.Consigner automatiquement l'erreur et mettre fin à l'application avec SmartAssembly

Si mon application rencontre une exception non gérée, j'aimerais que l'exception soit consignée, puis ferme l'application sans intervention de l'utilisateur. Est-il possible de créer un projet SmartAssembly qui le permet?

J'ai essayé de configurer le projet dans l'interface graphique SmartAssembly, ainsi que sur the command-line sans succès. Ci-dessous la commande et les arguments que j'ai essayés, mais jusqu'ici je ne peux pas déterminer comment l'obtenir à la fois mettre fin à l'application et enregistrer l'erreur sans entrée de l'utilisateur.

Créer un projet SA:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" 
/create shell.saproj input=C:\Repositories\MyApp\src\shell.exe 
/output=shell.exe 
/reportappname="MyTestApp" 
/errorreportingtemplate=standard;continueonerror=false,email:"[email protected]" 
/reportprojectname="Shell" 
/reportcompanyname="My Company" 

Générez le projet:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj 

Répondre

2

smartassembly comprend quelques exemples de ErrorReportingTemplates personnalisés,
situé dans Red Gate/SmartAssembly 6/SDK/Exception Reporting/

Les exemples sont regroupés dans quelques catégories:

Without UI Standard Custom UI Via Email Secured Proxy Silverlight Silverlight Basic

Dans chacun de ces dossiers, il existe un fichier .csproj que l'on peut étendre pour obtenir les résultats souhaités. A l'intérieur du dossier Without UI est le projet que nous sommes après, intitulé Sample 01 - Without User Interface.csproj

Si vous êtes juste après un .dll à utiliser et ne se soucient pas d'une solution réutilisable, de modifier ce fichier directement et utilisez le résultat .dll fichier (l'alternative étant de créer un nouveau projet, et tirez dans la référence à SmartAssembly.SmartExceptionsCore).

Modifier la fonction OnReportException pour ressembler à ce qui suit:

protected override void OnReportException(ReportExceptionEventArgs e) 
    { 
     for (int i=0; i<3; i++) 
     { 
      if (e.SendReport()) break; 
     } 
     e.TryToContinue = false; 
     System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess(); 
     proc.Kill(); 
    } 

Here's a Gist of the final result, si vous êtes confus.

Créez le fichier de projet avec l'interface graphique ou via cmd:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" 
/create shell.saproj input=C:\Repositories\MyApp\src\shell.exe 
/output=shell.exe 
/reportappname="MyTestApp" 
/errorreportingtemplate=MySmartAssemblyLogger.dll;continueonerror=false,email:"[email protected]" 
/reportprojectname="Shell" 
/reportcompanyname="My Company" 

Construire avec l'interface graphique ou via cmd:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj 
Questions connexes