Dela via


IL3003: "RequiresAssemblyFilesAttribute"-anteckningar måste matcha alla gränssnittsimplementeringar eller åsidosättningar

Värde
Regel-ID IL3003
Kategori SingleFile
Korrigeringen bryter eller bryter inte Hårt

Orsak

När du publicerar en app som en enskild fil (till exempel genom att ange PublishSingleFile egenskapen till true i ett projekt), kan gränssnittsimplementeringar eller härledda klasser med medlemmar som inte har matchande anteckningar [RequiresAssemblyFiles] leda till att en medlem anropas med attributet , vilket inte är en filkompatibelt. Det finns fyra möjliga scenarier där varningen kan genereras:

  • En medlem i en basklass har attributet men den överordnade medlemmen i den härledda klassen har inte attributet:

    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() {}
    }
    
  • En medlem i en basklass har inte attributet men den överordnade medlemmen i den härledda klassen har attributet:

    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() {}
    }
    
  • En gränssnittsmedlem har attributet men dess implementering har inte attributet:

    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 () { }
    }
    
  • En gränssnittsmedlem har inte attributet men dess implementering har attributet:

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

Så här åtgärdar du överträdelser

För alla gränssnitt och åsidosättningar måste implementeringen matcha definitionen när det gäller förekomsten eller frånvaron av attributet RequiresAssemblyFilesAttribute. Antingen innehåller båda medlemmarna attributet eller inget av dem. Ta bort eller lägg till attributet på gränssnitts-/basklassmedlemmen eller implementera/härleda klassmedlem så att attributet finns på båda eller ingetdera.

När du ska ignorera varningar

Du bör inte ignorera den här varningen.