Ofusca solo en tu servidor de compilación (mantén limpias las compilaciones de los desarrolladores)
Protege solo las compilaciones oficiales y distribuibles — las máquinas de los desarrolladores compilan sin ofuscar y depurables. Una configuración de CI paso a paso con Nebula.NET.
La ofuscación es estupenda para lo que distribuyes y una molestia para lo que depuras. La configuración recomendada es: los desarrolladores compilan con normalidad (sin ofuscar, depurable), y solo el servidor de compilación que produce tus paquetes oficiales aplica la protección — el mismo código fuente, el mismo dotnet build, sin cambios de código. Aquí tienes cómo configurar eso.
La idea
Nebula ofusca tu salida compilada, no tu código fuente, y se controla por configuración — así que si la protección se ejecuta se reduce a un único interruptor que existe solo en el agente de compilación. Las máquinas de los desarrolladores no tienen ese interruptor, así que sus compilaciones quedan intactas.
Opción A — la tarea de MSBuild, condicionada por una variable de entorno
El target de compilación de Nebula solo se ejecuta cuando la propiedad NebulaObfuscate es true, y MSBuild lee eso del entorno. En el agente de compilación, establece:
NebulaObfuscate=true
NEBULA_LICENSE=<your build-server license key>
Cada compilación en ese agente queda protegida después de compilar; las máquinas de los desarrolladores (sin la variable) compilan exactamente como antes. Nada cambia en el comportamiento de tu .csproj en una máquina de desarrollo.
Opción B — cero referencia de paquete (totalmente libre de dependencias)
Si no quieres ninguna referencia a Nebula en tus proyectos, invoca la CLI desde un Directory.Build.targets a nivel de repositorio, condicionado por tu propia variable:
<Project>
<Target Name="NebulaObfuscate" AfterTargets="Build" Condition="'$(NEBULA_OBFUSCATE)' == '1'">
<Exec Command="nebula --config "$(MSBuildProjectDirectory)/nebula.config.json" --output "$(TargetDir)obf"" />
</Target>
</Project>
Establece NEBULA_OBFUSCATE=1 (y NEBULA_LICENSE=…) en el agente e instala la CLI. Las máquinas de los desarrolladores se saltan el paso por completo.
Establecer la variable en el agente
Establécela una vez, como la cuenta bajo la que se ejecutan tus compilaciones:
# Windows agent, machine-wide (run as Administrator):
[Environment]::SetEnvironmentVariable('NEBULA_OBFUSCATE', '1', 'Machine')
[Environment]::SetEnvironmentVariable('NEBULA_LICENSE', 'LIC-XXXX-XXXX-XXXX', 'Machine')
# Linux/macOS agent (service environment or profile):
export NEBULA_OBFUSCATE=1
export NEBULA_LICENSE=LIC-XXXX-XXXX-XXXX
La mayoría de los sistemas de CI también te permiten definir estas como variables de pipeline/agente en su interfaz — establécelas en el agente, nunca en el repositorio. Los pasos completos de cmd/PowerShell/bash están en MSBuild y CI.
Solo licencias la máquina de compilación
Como la protección ocurre en el servidor de compilación, solo la/las máquina(s) de compilación necesitan una licencia — no cada desarrollador. Activa en el agente y listo.
Verifica
Compila en una máquina de desarrollo: la salida es normal y depurable. Compila en el agente: la salida está renombrada, aplanada y cifrada, y tu pipeline archiva el artefacto protegido. El mismo commit, dos binarios muy distintos — exactamente lo que quieres.
Descarga Nebula.NET gratis para probarlo, y consulta la guía de compilación completa en la documentación.
Prueba Nebula.NET
Endurece tu código .NET en minutos — empieza con la edición gratuita.