Aggressive Mode Enterprise
Aggressive mode goes beyond renaming to strip metadata that decompilers use to reconstruct source structure. All renamed methods become privatescope (invisible to the type system), property and event metadata is deleted, compiler attributes are removed, parameters are renamed to a, and default parameter values are stripped.
Usage
| CLI | MSBuild | Default |
|---|---|---|
| (enabled by default at Enterprise) | <ObfuscateAggressive>true</ObfuscateAggressive> | On |
--no-aggressive | <ObfuscateAggressive>false</ObfuscateAggressive> | Disable |
Before & After
YOUR CODE
public class User
{
public string Name { get; }
public string Email { get; }
public bool IsActive { get; set; } = true;
public DateTime CreatedAt { get; }
public User(string name, string email) { ... }
}AFTER OBFUSCATION
public class j
{
private string m_a;
private string b;
private bool c = true;
private DateTime d = DateTime.UtcNow;
// No properties — metadata stripped
string a() => m_a; // was get_Name
string a() => b; // was get_Email
bool a() => c; // was get_IsActive
void a(bool a) { c = a; }
public j(string a, string a) { ... }
}Real ILSpy output. All properties are gone — only raw field access methods remain. All methods share the name a (privatescope). The [DebuggerBrowsable], [CompilerGenerated], [Nullable] attributes are stripped. Parameters are named a.
What Aggressive Mode Does
- Privatescope methods — renamed non-virtual methods get
CompilerControlled(0x00) accessibility. Multiple methods with the same name coexist because the runtime resolves by metadata token, not by name. - Property/event metadata stripping —
Property,PropertyMap,Event,EventMap,MethodSemantics, and associatedConstantrows are deleted. Accessor methods survive as regular methods. - Compiler attribute stripping —
[CompilerGenerated],[Nullable],[NullableContext],[RefSafetyRules]are removed. initonlystripping — thereadonlyflag on fields is removed, eliminating a decompiler hint.- Parameter renaming — all parameters renamed to
a; default values stripped.
When to Disable
- Reflection on properties/events —
typeof(T).GetProperty("Name")will return null after metadata stripping. Exclude specific types. - Data binding frameworks — WPF, MAUI, and Blazor bind to properties by name. Demeanor's
PropertyUsageAnalyzerautomatically detects and protects data-bound properties, but custom binding scenarios may need manual exclusions.
Ready to protect your .NET code?