How can we help you today? How can we help you today?
Jon Kirkwood

Activity overview

Latest activity by Jon Kirkwood

Hi Tim Thank you for reaching out on the Redgate forums regarding your SmartAssembly query.  You're correct that obfuscating a large solution with multiple assemblies — especially when working with ReadyToRun, self-contained builds — requires a bit more setup, particularly without using the merge feature.  The recommended approach in this scenario is to use a traversal project.  Here’s how that typically works:  Create a .saproj file for each assembly you want to obfuscate. Each .saproj will define the input/output paths and relevant obfuscation settings. Set up a traversal MSBuild project that sequentially runs SmartAssembly for each of those .saproj files. This is done by referencing the SmartAssembly MSBuild task like so:<SmartAssembly ProjectFile="Path\To\YourAssembly.saproj" /> These entries can be listed one after another inside a custom MSBuild target, allowing you to run all obfuscation steps in a single build pass.  Each project will need to be defined explicitly, as SmartAssembly does not currently support wildcards or dynamic project discovery.  Ensure obfuscation occurs before the ReadyToRun compilation — obfuscating after native image generation isn’t supported, as native images cannot be modified by SmartAssembly.    While this process is more manual than using the merge feature, it provides the flexibility needed for large applications deploying assemblies individually.  / comments Official comment
Hi TimThank you for reaching out on the Redgate forums regarding your SmartAssembly query. You're correct that obfuscating a large solution with multiple assemblies — especially when working with R...
0 votes
It can sometimes take a while for objects to appear in the search parameters.  You can force an update of the index by selecting Index > Reindex (CTRL + ALT + D) This will refresh SQL Prompt and search for newly created or modified objects [image] / comments
It can sometimes take a while for objects to appear in the search parameters. You can force an update of the index by selecting Index > Reindex (CTRL + ALT + D)This will refresh SQL Prompt and sear...
0 votes
Hi PradnayaN,  Thanks for reaching out on the Redgate forums. This sounds like an issue with obfuscating assemblies that are involved in reflection, dependency injection, or are entry points.  We recommend starting with minimal obfuscation settings and excluding the main assembly and any shared contracts or reflection-heavy code to ensure runtime stability.   Here are some initial steps to try first to see if you can clear your issues with obfuscation Don't Obfuscate Entry Point or Shared Contracts Exclude: Program.dll or main project. Any shared interfaces or base class libraries (used in reflection or dependency injection). DTOs, gRPC contracts, Razor components, etc. ➜ Use [DoNotObfuscate] or SmartAssembly project file filters. Turn Off Type/Method Renaming for Reflection-Heavy Code If you use: Dependency Injection Reflection JSON serialization/deserialization ➜ Obfuscated names won’t match expected strings. Fix: Add [Obfuscation(Exclude = true)] or exclude via SA project rules. Assembly Load Failures? If your app dynamically loads assemblies, you must not obfuscate public types or names unless explicitly handled. ➜ Check AppDomain.AssemblyResolve or plugin patterns. Use Debug Logs or Fusion Log Viewer Might help to catch missing method/assembly load failures. Minimal Working Obfuscation Start with: <Obfuscation NameMangling="0" FieldsNameMangling="0" /> Then incrementally raise levels after testing that the previous setting worked.  / comments Official comment
Hi PradnayaN, Thanks for reaching out on the Redgate forums.This sounds like an issue with obfuscating assemblies that are involved in reflection, dependency injection, or are entry points. We reco...
0 votes