The situation
Server software installed in a customer's data centre is in the same position as a desktop app: the binaries sit on a machine where someone else has administrator rights.
The audience differs though. Client-side administrators are more technical than typical end users, and often have a legitimate reason to inspect what runs on their network.
What you are exposed to
- A customer's team studying your implementation to build it in-house.
- Integration details, internal endpoints or partner names leaking through class names.
- Per-seat or per-node licensing being circumvented.
What obfuscation does here
- Internal service, repository and helper names disappear, which removes the readable map of your architecture.
- The API surface other systems integrate with can be kept intact while everything behind it is renamed.
- Batch mode handles a multi-assembly deployment in a single pass on Pro.
What it does not do
- Dependency-injection containers that scan by type-name convention will find nothing after renaming — register explicitly.
- Entity Framework convention-based mapping breaks if entity or property names change; configure the mapping explicitly.
- Obfuscated stack traces are harder to read in support cases, and no name mapping is kept here — archive your unobfuscated build for that.
Suggested setup
| Plan | Pro in practice — server products are usually several assemblies and larger than the free 1 MB limit. |
| Public names | Off for assemblies other components bind to; on for the host application if it does not expose types to plugins. |
| Workflow | Wire the API into your release pipeline so every build is protected without anyone remembering to do it. |
Test this before you ship
Obfuscation only breaks things that resolve a name at runtime, so a short checklist catches nearly everything:
- The service starts and passes its health check.
- Dependency injection resolves every top-level service.
- Database access works — that catches Entity Framework mapping problems.
- Configuration binding still populates your options classes.
If something does break, obfuscation and reflection lists each cause with its fix.