IL3003: Anmerkungen zu „RequiresAssemblyFilesAttribute“ müssen für alle Implementierungen oder Überschreibungen von Schnittstellen übereinstimmen.

Wert
Regel-ID IL3003
Kategorie SingleFile
Fix führt oder führt nicht zur Unterbrechung Nicht betroffen

Ursache

Wenn Sie eine App als Einzeldatei veröffentlichen (z. B. indem Sie in einem Projekt die Eigenschaft PublishSingleFile auf true setzen), können Schnittstellenimplementierungen oder abgeleitete Klassen mit Membern, die keine passenden Anmerkungen zu [RequiresAssemblyFiles] haben, dazu führen, dass ein Member mit dem Attribut aufgerufen wird, was nicht mit einer Einzeldatei kompatibel ist. Es gibt vier mögliche Szenarios, in denen die Warnung generiert werden kann:

  • Ein Member einer Stammklasse hat das Attribut, aber der überschreibende Member der abgeleiteten Klasse hat das Attribut nicht:

    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() {}
    }
    
  • Ein Member einer Stammklasse hat das Attribut nicht, aber der überschreibende Member der abgeleiteten Klasse hat das Attribut:

    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() {}
    }
    
  • Ein Schnittstellenmember hat das Attribut, aber seine Implementierung hat das Attribut nicht:

    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 () { }
    }
    
  • Ein Schnittstellenmember hat das Attribut nicht, aber seine Implementierung hat das Attribut:

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

Behandeln von Verstößen

Für alle Schnittstellen und Überschreibungen muss die Implementierung in Bezug auf das Attribut „RequiresAssemblyFilesAttribute“ übereinstimmen: Entweder es muss in beiden vorhanden sein, oder es muss in beiden fehlen. Entweder enthalten beide Member oder keines von ihnen das Attribut. Sie müssen das Attribut aus oder zu dem Schnittstellen-/Basisklassenmember oder dem implementierenden/abgeleiteten Klassenmember entfernen bzw. hinzufügen, sodass das Attribut für beide oder keinen von beiden gilt.

Wann sollten Warnungen unterdrückt werden?

Sie sollten diese Warnung nicht unterdrücken.