Share via


IL3003: 'RequiresAssemblyFilesAttribute' ek açıklamaları tüm arabirim uygulamaları veya geçersiz kılmaları arasında eşleşmelidir

Değer
Kural Kimliği IL3003
Kategori SingleFile
Düzeltme bozuk veya bölünemez Bölüne -mez

Neden

Bir uygulamayı tek bir dosya olarak yayımladığınızda (örneğin, bir projede özelliğini true ayarlayarakPublishSingleFile), eşleşen ek açıklamalarına sahip olmayan üyelerle arabirim uygulamaları veya türetilmiş sınıflar[RequiresAssemblyFiles], tek dosyayla uyumlu olmayan özniteliğine sahip bir üyenin çağrılmasına neden olabilir. Uyarının oluşturulabileceği dört olası senaryo vardır:

  • Bir temel sınıfın üyesi özniteliğine sahiptir, ancak türetilmiş sınıfın geçersiz kılınan üyesi şu özniteliğe sahip değildir:

    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() {}
    }
    
  • Bir temel sınıfın üyesi özniteliğine sahip değildir, ancak türetilen sınıfın geçersiz kılınan üyesi şu özniteliğe sahiptir:

    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() {}
    }
    
  • Arabirim üyesi özniteliğine sahiptir, ancak uygulamasının özniteliği yoktur:

    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 () { }
    }
    
  • Arabirim üyesi özniteliğine sahip değil, ancak uygulaması şu özniteliğe sahip:

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

İhlalleri düzeltme

Tüm arabirimler ve geçersiz kılmalar için, uygulamanın 'RequiresAssemblyFilesAttribute' özniteliğinin varlığı veya yokluğu bakımından tanımıyla eşleşmesi gerekir. Her iki üye de özniteliğini içerir veya hiçbirini içermez. özniteliğini arabirim/temel sınıf üyesine veya uygulayan/türeyen sınıf üyesine özniteliğini kaldırın veya ekleyin; böylece öznitelik her ikisinde de veya her ikisinde de olur.

Uyarıların ne zaman bastırılması gerekiyor?

Bu uyarıyı gizlememelisiniz.