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 requirement | Relevant Opaquer capability | Availability |
|---|---|---|
| .NET 11 assemblies | Redeveloped for .NET 11 and tested with several application types | All editions |
| .NET Framework, .NET Core, .NET 5–10 | Documented support across legacy and modern targets | See manual |
| Console apps, services, class libraries, Windows desktop apps | Assembly-level obfuscation options | Feature-dependent |
| C# WPF on .NET 6 or later | XAML/BAML resource protection | See documentation |
| VB.NET WPF or .NET Framework 4.x WPF | Not supported by the WPF XAML/BAML protection feature | Not 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.
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.
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.
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 viewBefore 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
| Need | Capability | Edition |
|---|---|---|
| Core assembly protection | Private and public name obfuscation, string encryption, Lightweight Control Flow | Basic (free) |
| Repeatable command-line builds | Command-line interface and integration into build events or pipelines | Pro ($189.99) |
| Additional resistance for selected methods | High-Intensity Control Flow and selective code virtualization, up to 3 methods per assembly | Enterprise ($489.99) |
| Team and restricted build environments | Team deployment and internet-free build-server support | Enterprise |
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
Build the net11.0 Release configuration
Produce a clean, reproducible input assembly and retain the matching unprotected artifact.
-
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
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
Inspect the generated assembly
Use ILSpy or dotPeek to verify that the intended names, strings, and method logic have been transformed.
-
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
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?+
What other .NET targets are covered?+
Can I evaluate Opaquer without buying a license?+
Does WPF protection apply to .NET 11?+
How can a .NET 11 project run Opaquer in a build pipeline?+
-SOURCE, -OUTPUT, -KEY, -ALLPRIVATE, -CONCEALSTRINGS, and -FLOW. Opaquer must be installed on a self-hosted agent.