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

CLIMSBuildDefault
(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 strippingProperty, PropertyMap, Event, EventMap, MethodSemantics, and associated Constant rows are deleted. Accessor methods survive as regular methods.
  • Compiler attribute stripping[CompilerGenerated], [Nullable], [NullableContext], [RefSafetyRules] are removed.
  • initonly stripping — the readonly flag on fields is removed, eliminating a decompiler hint.
  • Parameter renaming — all parameters renamed to a; default values stripped.

When to Disable

  • Reflection on properties/eventstypeof(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 PropertyUsageAnalyzer automatically detects and protects data-bound properties, but custom binding scenarios may need manual exclusions.

Ready to protect your .NET code?

View Pricing All Options