On-premise and customer-hosted software

Your server product runs on infrastructure your customer's administrators fully control.

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

Worth being clear about the limits before you rely on this.
  • 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.

Try it on your own build

Upload a DLL or EXE and compare the two in a decompiler. It takes about a minute.