Rustemsoft logo Get Opaquer
Home / .NET 11 application protection

.NET 11 release readiness

Preparing .NET 11 Releases for Obfuscation: Compatibility, Protection, and Testing

Moving an application to a new .NET target is only part of the release work. The protected assembly must also remain compatible with the runtime, preserve the application's behavior, and make implementation details harder to inspect.

By the Rustemsoft Technical Team · November 11, 2026

The short answer

Opaquer .NET Obfuscator supports .NET 11. Rustemsoft redeveloped it for .NET 11 and tested it with several types of .NET 11 applications. It can obfuscate net11.0 assemblies through identifier renaming, string encryption, and control flow obfuscation. The free Basic edition provides a way to evaluate the protected output on your own application; production releases should always pass the application's own test suite after obfuscation.

01 / The release question

A new target framework does not remove the need to protect the assembly

.NET 11 became generally available on November 10, 2026. It is a Standard Term Support release, and net11.0 projects use C# 15 by default. Teams adopting the release therefore have two separate engineering questions: does the protection tool understand the new target, and does the transformed application still behave correctly?

These questions should not be collapsed into a single claim of compatibility. An obfuscator operates on compiled output, including intermediate language and metadata. The fact that a project compiles successfully does not, by itself, establish that a protection tool can process the resulting assembly or that reflection, serialization, resource loading, and runtime execution will remain intact afterward.

Opaquer has been redeveloped for .NET 11 and tested with several types of .NET 11 applications. That provides a starting point for teams preparing net11.0 releases, while application-specific validation remains part of the deployment process.

02 / Compatibility scope

Check the application type as well as the target framework

Framework support is one dimension of a protection decision. The project type and the way it uses metadata are also important. Opaquer's documented coverage includes .NET Framework 1.0–4.8, .NET Core, and .NET 5–10; .NET 11 support has been added through Rustemsoft's redevelopment and testing.

Project or requirementRelevant Opaquer capabilityAvailability
.NET 11 assembliesRedeveloped for .NET 11 and tested with several application typesAll editions
.NET Framework, .NET Core, .NET 5–10Documented support across legacy and modern targetsSee manual
Console apps, services, class libraries, Windows desktop appsAssembly-level obfuscation optionsFeature-dependent
C# WPF on .NET 6 or laterXAML/BAML resource protectionSee documentation
VB.NET WPF or .NET Framework 4.x WPFNot supported by the WPF XAML/BAML protection featureNot available for this feature

The WPF qualification matters: the documented XAML/BAML protection feature applies to C# WPF applications built on .NET 6 or later. It should not be interpreted as support for every WPF project configuration.

03 / What is being protected?

Think in layers, not in a single “obfuscate” switch

A compiled .NET assembly can expose more than method bodies. Type and member names provide clues about an application's structure; string literals may reveal URLs, messages, or embedded values; and readable control flow can help an analyst follow the program's decisions. Opaquer addresses these different inspection paths with separate protection features.

Layer A

Identifiers and metadata

Name obfuscation changes selected class, method, field, property, and other member identifiers. Private, public, and internal names can be covered, with exclusions for members that must remain discoverable by name.

Layer B

String values

String encryption replaces readable literals with encrypted data and a runtime decryption routine. Values can remain within the assembly or be placed in a separate native C++ DLL.

Layer C

Method logic

Lightweight Control Flow introduces opaque predicates, decoy branches, and less direct execution paths. Enterprise adds High-Intensity Control Flow with selective code virtualization.

Illustrative metadata transformation

ILDasm view

Before renaming

.class private sealed Module1
{
  .field private static string str
  .field private static DateTime today

  .method public static void Main()
  {
    IL_0001: ldsfld ...:: str
    IL_0006: ldsfld ...:: today
    IL_0015: call Console::WriteLine
    IL_001c: ret
  }
}

After name obfuscation

.class private sealed '0AAAA'
{
  .field private static string '1AAA0'
  .field private static DateTime '2AAAA'

  .method public static void '1AAAA'()
  {
    IL_0001: ldsfld ...:: '1AAA0'
    IL_0006: ldsfld ...:: '2AAAA'
    IL_001c: ret
  }
}

This example illustrates the effect of identifier renaming, not a guarantee that every symbol in every assembly will be renamed. Opaquer's exclusions and naming settings should be configured to match the application's runtime and integration requirements.

04 / Select the appropriate edition

Match the protection workflow to the build process

NeedCapabilityEdition
Core assembly protectionPrivate and public name obfuscation, string encryption, Lightweight Control FlowBasic (free)
Repeatable command-line buildsCommand-line interface and integration into build events or pipelinesPro ($189.99)
Additional resistance for selected methodsHigh-Intensity Control Flow and selective code virtualization, up to 3 methods per assemblyEnterprise ($489.99)
Team and restricted build environmentsTeam deployment and internet-free build-server supportEnterprise

The Enterprise selective virtualization feature has an internet requirement at runtime. Review the current edition comparison and pricing before choosing a deployment design.

05 / Release workflow

Treat the protected binary as a separate release candidate

The safest way to introduce obfuscation is to make it a visible stage in the release process. Keep the original Release build, create the protected output separately, and test the artifact that will actually be distributed.

  1. 1

    Build the net11.0 Release configuration

    Produce a clean, reproducible input assembly and retain the matching unprotected artifact.

  2. 2

    Configure protection deliberately

    Open the assembly in Opaquer, select naming, string, and control-flow options, and exclude members that external components locate by name.

  3. 3

    Start with a limited protection profile

    Apply Lightweight Control Flow to a small group of sensitive methods first. Expand the selection after the application passes its tests.

  4. 4

    Inspect the generated assembly

    Use ILSpy or dotPeek to verify that the intended names, strings, and method logic have been transformed.

  5. 5

    Run tests against the protected output

    Exercise reflection, serialization, interop, async-heavy paths, WPF resource loading where applicable, and the application's normal integration scenarios.

  6. 6

    Automate only after the manual profile is stable

    Save settings to XML and invoke the Pro command-line interface from a Visual Studio post-build event or Azure DevOps step. Opaquer must be installed on a self-hosted agent.

Build-pipeline example: the options you are likely to use

After saving the assembly configuration in the GUI, the Pro command-line interface can be called with options such as the following. The exact paths, key, and switches should match the saved project settings.

Opaquer.exe -SOURCE:"bin\Release\net11.0\App.dll" ^
  -OUTPUT:"protected\App.dll" ^
  -KEY:"your-project-key" ^
  -ALLPRIVATE -CONCEALSTRINGS -FLOW

Treat this as an illustrative command shape, not a drop-in script. Check the installed version's manual for exact syntax and project-specific requirements. Keep the XML renaming map with the matching release so diagnostic stack traces can be translated later.

What obfuscation does not replace

Obfuscation raises the effort required to understand and modify a distributed assembly. It is not a substitute for server-side authorization, secure secret storage, key rotation, or sound licensing design. A value that must remain confidential should not be treated as safe merely because a string literal has been encrypted in a client-side binary.

For particularly sensitive values, Opaquer can store encrypted strings in a separate native C++ DLL rather than keeping them inside the managed assembly. That DLL must be deployed with the application. Regardless of the selected technique, design the system so that critical decisions and secrets are not protected solely by obscurity on an end-user machine.

Evaluate with your own assembly

Prepare your .NET 11 build for protection

Start with Opaquer Basic, apply a conservative profile, and verify the resulting application before making obfuscation part of your production pipeline.

Frequently asked questions

Can Opaquer obfuscate assemblies built for .NET 11?+
Yes. Opaquer was redeveloped for .NET 11 and tested with several types of .NET 11 applications. It protects net11.0 assemblies using name obfuscation, string encryption, and control flow obfuscation. Run your own functional and integration tests against the protected output before shipping.
What other .NET targets are covered?+
Opaquer supports .NET 11. Its manual also documents .NET Framework 1.0 through 4.8, .NET Core, and .NET 5 through 10, for console programs, Windows desktop applications, services, and class libraries.
Can I evaluate Opaquer without buying a license?+
Yes. Basic is free and includes private and public name obfuscation, string value encryption, and Lightweight Control Flow. Pro ($189.99) adds the command-line interface. Enterprise ($489.99) adds High-Intensity Control Flow with selective code virtualization, team deployment, and internet-free build-server support. See current pricing.
Does WPF protection apply to .NET 11?+
Opaquer's WPF XAML/BAML protection applies to C# applications built on .NET 6 or later, including net11.0. It does not support VB.NET WPF projects or .NET Framework 4.x WPF projects. Test the protected UI and resource loading.
How can a .NET 11 project run Opaquer in a build pipeline?+
Save the assembly settings in the GUI, then call the Pro command-line interface from a Visual Studio post-build event or Azure DevOps step. Options include -SOURCE, -OUTPUT, -KEY, -ALLPRIVATE, -CONCEALSTRINGS, and -FLOW. Opaquer must be installed on a self-hosted agent.
How are encrypted strings restored at runtime?+
Opaquer injects a decryption routine that restores encrypted string literals at runtime. Encrypted values can remain in the output assembly or be stored in a separate native C++ DLL. The native DLL option is recommended for higher security and must be deployed alongside the assembly.
How do I interpret stack traces after renaming?+
Opaquer creates an XML renaming map containing original and obfuscated names. Retain the map that corresponds to each release so obfuscated class and method names can be translated during diagnostics.

Further Opaquer resources