SmartAssembly - 5.5
Learning SmartAssembly - 5.5
Error reporting and DLLs
Reporting exceptions in DLLs
DLLs are intended to be used by an external application and so the DLL throws an exception which is then handled by the executable file which called the DLL. Therefore, SmartAssembly cannot report unhandled exceptions in a DLL; the executable which called the DLL receives the exception instead.
It may be possible to create a work around by slightly modifying the DLL.
Method 1: Using SmartAssembly.ReportException.dll
This method involves calling the SmartAssembly Report Exception DLL from inside your DLL.
This is the preferred method, but it requires the SmartAssembly SDK (available in SmartAssembly Professional only).
- Reference the dependency %ProgramFiles%/Red Gate/SmartAssembly 5/SDK/bin/SmartAssembly.ReportException.dll (this dependency will be removed when processed).
- For any public method of your DLL that can throw an exception which you wish to report, add a call to
ExceptionReporting.Reportas follows:using SmartAssembly.ReportException;public class MyClass{private void DoSomethingInternal(){//Your code here}public bool DoSomething(){try{DoSomethingInternal();return true;}catch (Exception exception){ExceptionReporting.Report(exception);return false;}}}
Method 2: Creating a DLL with an entry point
This alternative method requires your DLL to have a specific entry point (most commonly add-ins and some web services). It involves changing your DLL so that it behaves similarly to an executable. This allows SmartAssembly to receive the exception as it will be passed to the Main() method.
This method might not work in all cases, since it will depend on the design of your application.
- Create a Console App executable file instead of a DLL. The only difference between the two is that the Console App has an entry-point.
- Do not type any code in the
Main()method, SmartAssembly will add its own code in this here. - In the static constructor of your plug-in class, call the
Main()method.class Program{static void Main(){//empty}}class MyPlugin : IPlugin{static MyPlugin(){//ensure that sa initialization is executedProgram.Main();}//your code here...} - When you have finished writing the DLL code, rename the file from [filename].exe to [filename].dll.
- Use SmartAssembly to merge the DLL into your assembly.
Was this article helpful?
SmartAssembly
- Using Smartassembly to obfuscate a windows service
- Obfuscation not renaming identically-named methods in different classes
- Serialization exceptions occurring in obfuscated assemblies
- SmartAssembly skipping obfuscation of some classes in your assembly
- SmartAssembly is not merging or embedding all assembly dependencies
- Can I customize the path to the MDB database?
- System.InvalidOperationException when attempting to connect to local SmartAssembly database
- Protecting website code using SmartAssembly
- Visual Studio Deployment Projects including unprotected builds
- SmartAssembly MSBUILD tasks failing because of difference in log4net assembly
- SmartAssembly Error Reporting: This application has submitted too many reports
- The assembly is being merged, but the dependent assembly isn't
- ERR 2002: Server did not recognize the value of HTTP Header SOAPAction
- The error report is not associated with a valid project ID - SmartAssembly
- Application built with an evaluation edition of SmartAssembly
- How end users can change their participation in Feature Usage Reporting
- Log file for SmartAssembly
- Moving SmartAssembly to another computer
- 'Using JET databases is not possible in 64-bit applications' error when using MSBuild or TFS
- SmartAssembly stack trace is invalid when Method Parent Obfuscation is enabled
- Upgrading SmartAssembly version 4.x to version 5
- Upgrading SmartAssembly Standard to Professional
- Problems building WPF applications with SmartAssembly 6.7
all products
- Some Red Gate products identified as containing a trojan by Anti-Virus software
- Activation may fail with Unknown Error -1
- Product uses web help although a CHM file is available locally
- Argument exception resulting from missing environment variable
- Check for updates may fail when used through proxies
- 'Unidentified Publisher' error when repairing or uninstalling
- Licensing activates product as standard edition
- Moving Red Gate software products to another machine
- Red Gate tools log locations
- The application UI opening slowly when there is no internet access
SmartAssembly
all products
- Red Gate product acknowledgements
- Activating your products
- Activating your products
- Red Gate bundle history
- Check for updates
- Troubleshooting Check for Updates errors
- Current versions
- Deactivating your products
- Installing Red Gate products from the .msi file
- Requesting additional activations
- Serial numbers for bundles
- Reactivating using a different serial number
- Extending your trial
- Finding your serial numbers
- Moving a serial number from one computer to another
- No response received for manual activation
- Licensing and activation resources
- Licensing and activation resources
- Troubleshooting licensing and activation errors
- Licensing and activation FAQs
- Red Gate tools log file locations
- Download old versions of products
- Download product prerequisites & utilities
- Support & upgrades
- Upgrading your software
- Upgrading FAQs

Optimizing and protecting code
Error reporting