Skip to content

Referencia

Anotaciones

Expresa reglas de proteger y conservar en tu código con los atributos de Nebula.Annotations — [Keep], [Exclude], [Rename], [Protect], [EncryptStrings].

Desde 2.2.0 puedes expresar reglas de proteger/conservar en código con atributos, en lugar de (o junto a) las reglas del archivo de configuración. Los atributos viajan con el código, sobreviven a las refactorizaciones y se leen de forma natural en el punto donde aplican.

Instalación

dotnet add package Nebula.Annotations

Los atributos son metadatos solo de tiempo de compilación: Nebula los lee al proteger y los elimina de la salida, por lo que tu ensamblado protegido no arrastra ninguna dependencia en tiempo de ejecución del paquete.

Atributos

using Nebula.Annotations;

[Keep]                                   // conserva el nombre de este tipo (los miembros se siguen protegiendo)
public class PluginContract { }

[Exclude]                                // excluye por completo de la ofuscación (nombre preservado)
public class InteropSurface { }

public class Repository
{
    [Rename(false)]                      // conserva el nombre de este miembro
    public void BoundByReflection() { }

    [Protect(ProtectionKind.Virtualize)] // virtualiza este método (Pro)
    public static int Hotpath(int a, int b) => a * b + 1;

    [EncryptStrings]                      // cifra los literales de cadena de este método
    public string Secret() => "do-not-ship-in-cleartext";
}
AtributoEfecto
[Keep]Conserva el nombre del elemento. Aplicado a un tipo, conserva el nombre del tipo; las demás transformaciones siguen aplicándose.
[Exclude]Excluye el elemento de la ofuscación (nombre preservado).
[Rename(false)]Conserva el nombre (como [Keep]); [Rename(true)] es el valor por defecto.
[Protect(ProtectionKind.Virtualize)]Virtualiza el método. Pro — no tiene efecto en la edición Free. ProtectionKind.ControlFlow solicita ofuscación de flujo de control.
[EncryptStrings]Marca un método o tipo cuyas cadenas deben cifrarse (requiere que el cifrado de cadenas esté activado).

Cómo se combinan atributos y reglas

Los atributos se fusionan con las reglas de keep-list de tu config y con la detección automática de Nebula (reflexión, serialización, DI, XAML). Un nombre preservado por cualquiera de ellos se preserva — las anotaciones nunca debilitan la protección, solo añaden la intención que la herramienta podría no inferir. [Protect(Virtualize)] limita la virtualización a los métodos anotados; solo tiene efecto en una edición que ofrezca virtualización (Pro).

Para ver qué preserva ya la detección automática — antes de añadir atributos — ejecuta nebula doctor y revisa su propuesta.

Verifícalo

Tras una compilación protegida, abre el Informe de protección: un tipo [Keep] aparece en la superficie pública residual (su nombre está intencionadamente en claro), y un método [Protect(Virtualize)] se cuenta en métodos virtualizados. Las anotaciones mismas no aparecen en el ensamblado de salida.