Sdílet prostřednictvím


IL3003: Poznámky "RequiresAssemblyFilesAttribute" se musí shodovat napříč všemi implementacemi rozhraní nebo přepsáním

Hodnota
ID pravidla IL3003
Kategorie SingleFile
Oprava způsobující chybu nebo přerušení Pevných

Příčina

Když publikujete aplikaci jako jeden soubor (například nastavením PublishSingleFile vlastnosti true v projektu), implementace rozhraní nebo odvozené třídy se členy, které nemají odpovídající poznámky [RequiresAssemblyFiles] , můžou vést k volání člena s atributem, který není kompatibilní s jedním souborem. Existují čtyři možné scénáře, ve kterých je možné vygenerovat upozornění:

  • Člen základní třídy má atribut, ale přepsání člen odvozené třídy nemá atribut:

    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() {}
    }
    
  • Člen základní třídy nemá atribut, ale přepsání člen odvozené třídy má atribut:

    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() {}
    }
    
  • Člen rozhraní má atribut, ale jeho implementace nemá atribut:

    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 () { }
    }
    
  • Člen rozhraní atribut nemá, ale jeho implementace má atribut:

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

Jak opravit porušení

Pro všechna rozhraní a přepsání musí implementace odpovídat definici z hlediska přítomnosti nebo nepřítomnosti atributu RequiresAssemblyFilesAttribute. Oba členy buď obsahují atribut, nebo ani jeden z nich. Odeberte nebo přidejte atribut na členu rozhraní/základní třídy nebo implementujte/odvozený člen třídy tak, aby byl atribut na obou nebo ani na jednom.

Kdy potlačit upozornění

Toto upozornění byste neměli potlačit.