Condividi tramite


IL3003: Le annotazioni 'RequiresAssemblyFilesAttribute' devono corrispondere in tutte le implementazioni o gli override dell'interfaccia

Valore
ID regola IL3003
Categoria SingleFile
La correzione causa un'interruzione o meno Non causa un'interruzione

Causa

Quando si pubblica un'app come singolo file, ad esempio impostando la proprietà PublishSingleFile su true in un progetto, le implementazioni dell'interfaccia o le classi derivate con membri che non hanno annotazioni corrispondenti di [RequiresAssemblyFiles] possono portare a chiamare un membro con l'attributo e ciò non è compatibile con un singolo file. Esistono quattro possibili scenari in cui l'avviso può essere generato:

  • Un membro di una classe base ha l'attributo, ma il membro di override della classe derivata non ha l'attributo:

    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 membro di una classe base non ha l'attributo, ma il membro di override della classe derivata ha l'attributo:

    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 membro dell'interfaccia ha l'attributo, ma la rispettiva implementazione non ha l'attributo:

    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 membro dell'interfaccia non ha l'attributo, ma la rispettiva implementazione ha l'attributo:

    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 () { }
    }
    

Come correggere le violazioni

Per tutte le interfacce e gli override, l'implementazione deve corrispondere alla definizione in termini di presenza o assenza dell'attributo 'RequiresAssemblyFilesAttribute'. Entrambi i membri contengono l'attributo o nessun membro lo contiene. Rimuovere o aggiungere l'attributo nel membro di interfaccia/classe di base o nel membro della classe di implementazione/derivazione in modo che l'attributo si trovi su entrambi o nessuno dei due.

Quando eliminare gli avvisi

Non eliminare questo avviso.