About SmartAssembly Pro

.NET obfuscator and automated error reporting.

SmartAssembly is a software protection and improvement tool designed to help .NET developers to produce better quality software. This all-round solution will obfuscate and protect your .NET code, optimize your .NET assemblies for better deployment, minimize distribution size, increase performance, and add powerful error-reporting and debugging capabilities to your application.

SmartAssembly Pro adds the following over the Standard Edition:

  • Custom Web Server: If you want to gather exception reports directly to your own server rather than using Red Gate's server.
  • SDK (custom libraries): Allows you to customize the exception reporting experience for your user, and access your exception reports programmatically.
  • Shared Exception Reports: View the exception reports for applications built by any user or build system in your organisation.


  • First-rate .NET obfuscator: obfuscate your .NET code and protect your application
  • Automated error reporting: determine how stable your software is, and receive information on the state of your program when it crashes
  • Optimize your .NET assemblies for better deployment

Code Obfuscation
Worried about other people reverse-engineering your software? Obfuscate and protect your code before releasing it into the wild.

Why do you need to obfuscate your code?
If you've invested time, effort and money in your code, it is advisable to protect it by making it difficult to access. Obfuscating your code will protect your program and intellectual property against reverse-engineering, cracking and modification.

Obfuscating your code with SmartAssembly
SmartAssembly offers a large range of obfuscation features. You can choose to use only one or two, or all of them, depending on your circumstances.

  • Pruning - Pruning automatically scans your software and removes any code that is not essential. This includes removing non-useful metadata, such as the names of events, properties, and method parameters that would give someone else clues about what particular types and methods are for.
  • Obfuscation - Obfuscation changes the name of your classes and methods to unreadable characters, making it more difficult for other people to understand your code.
  • Control Flow Obfuscation - Control Flow Obfuscation changes the code inside your methods, converting it into a complex and tangled control structure (spaghetti code). After Control Flow Obfuscation, you can execute your application in exactly the same way as before, but it is now very difficult for anyone else to analyze your code, and almost impossible for a decompiler to recreate the original source code.
  • Reference Dynamic Proxy - This unique obfuscation feature allows you to hide most of the calls to external methods, properties, or fields in your code, by replacing them with calls to the proxy. This makes your program much harder to crack, because it makes it difficult for anyone to find calls that tend to offer inadvertant clues about where to get started (such as a trial expiry dialog).
  • Resources Compression and Encryption - This feature compresses and encrypts your managed resources. This reduces the size of the assembly and adds further protection to your resources.
  • Strings Encoding - Managed software stores all strings in one place and in a clear structure. These strings can enable a cracker to understand your code, or can even reveal important information, such as passwords, SQL requests, serial numbers, or login information. Strings Encoding protects the strings by encrypting them.

Automated Error Reporting
Don't know when your application crashes, and why? SmartAssembly's exception reporting mechanism provides you with a complete state of your program whenever it crashes.

Getting information about exceptions from users is a nightmare.
Most end-users don't report problems and even your best efforts can't address problems you're not informed of. And of the very few end-users who do report the problem (via email or a forum), most are not technically literate, so they can't provide you with precise information about their system or browser, or give an accurate description of the problem they encountered. This makes reproducing the problem and solving it quickly difficult and time-consuming.

How can SmartAssembly's error reporting system help?
SmartAssembly offers an error reporting mechanism that provides you with a complete state of your program whenever it crashes. You get a full stack trace, along with the values of all variables when the crash happened.

Key benefits

  • Discover the volume of crashes your end-users experience. For every bug reported, there will be ten times as many that you haven't heard of
  • Get a complete state of your program when it crashed (not just the stack trace), including the values of variables when the crash happened – without having to go back and forth in inefficient email conversations with the end-user
  • Focus on fixing the high-priority issues first (most commonly encountered errors and most critical ones). And don't waste time fixing problems that are rarely encountered
  • Deliver a higher-spec product to market – on time
  • Red Gate can run the server for you, so you don't incur costs in setting up and maintaining your own server; or if you don't want to rely their our web-server and want to be 100% independent, they provide a Custom Web Server option
  • You can customize your exception reporting dialog and ask the user to type in more information, or his/her email address
  • You can package any data you want with the exception report (e.g. a screenshot at the time of the crash, or a log file)
  • It is easy to set up and you don't need to alter the target program: spend a few seconds configuring the error reporting functionality in the SmartAssembly UI, and it will output an assembly with error-reporting enabled

You could find out what errors your users are coming across by implementing your own error reporting mechanism into your application, but SmartAssembly offers a much cheaper alternative:

  • Red Gate can run the server, so you don't have to set up and maintain a server
  • Coding your own exception dialog would take days to get it right
  • You never know which variable to log until a crash happens, so if you were to build your own mechanism, you wouldn't get a comprehensive set of data. The results you get with SmartAssembly are much more detailed because it logs ALL of the variables

SmartAssembly's Error Reporting tool is therefore the most effective and efficient way to find out what errors your users are coming across; and by choosing to fix the most common errors, you can improve the quality of your software, thus enhancing your professional image and your credibility.