IL3003: Las anotaciones "RequiresAssemblyFilesAttribute" deben coincidir en todas las invalidaciones o implementaciones de interfaz

Value
Identificador de la regla IL3003
Categoría SingleFile
La corrección interrumpe o no interrumpe No importante

Causa

Al publicar una aplicación como único archivo (por ejemplo, al establecer la propiedad PublishSingleFile en un proyecto en true), las implementaciones de interfaz o clases derivadas con miembros sin anotaciones coincidentes de [RequiresAssemblyFiles] pueden provocar una llamada a un miembro con el atributo, que no es compatible con archivos únicos. Hay cuatro escenarios posibles en los que se puede generar la advertencia:

  • Un miembro de una clase base tiene el atributo, pero el miembro que realizará el reemplazo de la clase derivada no tiene el atributo:

    public class Base
    {
        [RequiresAssemblyFiles]
        public virtual void TestMethod() {}
    }
    public class Derived : Base
    {
        // IL3003: Base member 'Base.TestMethod' with 'RequiresAssemblyFilesAttribute' has a derived member 'Derived.TestMethod()' without 'RequiresAssemblyFilesAttribute'. For all interfaces and overrides the implementation attribute must match the definition attribute.
        public override void TestMethod() {}
    }
    
  • Un miembro de una clase base no tiene el atributo, pero el miembro que realizará el reemplazo de la clase derivada tiene el atributo:

    public class Base
    {
        public virtual void TestMethod() {}
    }
    public class Derived : Base
    {
        // IL3003: Member 'Derived.TestMethod()' with 'RequiresAssemblyFilesAttribute' overrides base member 'Base.TestMethod()' without 'RequiresAssemblyFilesAttribute'. For all interfaces and overrides the implementation attribute must match the definition attribute.
        [RequiresAssemblyFiles]
        public override void TestMethod() {}
    }
    
  • Un miembro de interfaz tiene el atributo, pero su implementación no tiene el atributo:

    interface IRAF
    {
        [RequiresAssemblyFiles]
        void TestMethod();
    }
    class Implementation : IRAF
    {
        // IL3003: Interface member 'IRAF.TestMethod()' with 'RequiresAssemblyFilesAttribute' has an implementation member 'Implementation.TestMethod()' without 'RequiresAssemblyFilesAttribute'. For all interfaces and overrides the implementation attribute must match the definition attribute.
        public void TestMethod () { }
    }
    
  • Un miembro de interfaz no tiene el atributo, pero su implementación tiene el atributo:

    interface INoRAF
    {
        void TestMethod();
    }
    class Implementation : INoRAF
    {
        [RequiresAssemblyFiles]
        // IL3003: Member 'Implementation.TestMethod()' with 'RequiresAssemblyFilesAttribute' implements interface member 'INoRAF.TestMethod()' without 'RequiresAssemblyFilesAttribute'. For all interfaces and overrides the implementation attribute must match the definition attribute.
        public void TestMethod () { }
    }
    

Cómo corregir infracciones

Para todas las interfaces e invalidaciones, la implementación debe coincidir con la definición en términos de presencia o ausencia del atributo "RequiresAssemblyFilesAttribute". Ambos miembros contienen el atributo o ninguno de ellos lo tiene. Quite o agregue el atributo en el miembro de clase base o interfaz o el miembro de clase que realiza la implementación o derivación para que el atributo esté en ambos o ninguno.

Cuándo suprimir las advertencias

No debe suprimir esta advertencia.