Bagikan melalui


IL3003: Anotasi 'RequiresAssemblyFilesAttribute' harus cocok di semua implementasi atau penimpaan antarmuka

Nilai
ID Aturan IL3003
Golongan SingleFile
Perbaikan rusak atau tidak pecah Non-pemisahan

Penyebab

Saat Anda menerbitkan aplikasi sebagai satu file (misalnya, dengan mengatur PublishSingleFile properti ke true dalam proyek), implementasi antarmuka atau kelas turunan dengan anggota yang tidak memiliki anotasi [RequiresAssemblyFiles] yang cocok dapat menyebabkan panggilan anggota dengan atribut , yang tidak kompatibel dengan file tunggal. Ada empat kemungkinan skenario di mana peringatan dapat dihasilkan:

  • Anggota kelas dasar memiliki atribut tetapi anggota pengganti kelas turunan tidak memiliki 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() {}
    }
    
  • Anggota kelas dasar tidak memiliki atribut tetapi anggota penimpaan kelas turunan memang memiliki 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() {}
    }
    
  • Anggota antarmuka memiliki atribut tetapi implementasinya tidak memiliki 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 () { }
    }
    
  • Anggota antarmuka tidak memiliki atribut tetapi implementasinya memang memiliki 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 () { }
    }
    

Cara memperbaiki pelanggaran

Untuk semua antarmuka dan penimpaan, implementasi harus sesuai dengan definisi dalam hal kehadiran atau tidak adanya atribut 'RequiresAssemblyFilesAttribute'. Kedua anggota berisi atribut atau tidak satu pun dari mereka. Hapus atau tambahkan atribut pada anggota kelas antarmuka/dasar atau anggota kelas implementasi/turunan sehingga atribut berada di keduanya atau tidak.

Kapan harus menekan peringatan

Anda tidak boleh menyembunyikan peringatan ini.