次の方法で共有


IL3003 'RequiresAssemblyFilesAttribute' 注釈は、すべてのインターフェイスの実装またはオーバーライドで一致しなければなりません。

ルール ID IL3003
カテゴリ SingleFile
修正が破壊的か非破壊的か 非破壊的

原因

アプリを単一ファイルとして発行する場合 (たとえば、プロジェクト内で PublishSingleFile プロパティを true に設定することによって)、[RequiresAssemblyFiles] の注釈が一致しないメンバーを持つインターフェイスの実装または派生クラスでは、単一ファイルと互換性のない属性を持つメンバーを呼び出す可能性があります。 警告が生成される可能性があるシナリオには、次の 4 つがあります。

  • 基底クラスのメンバーには属性があるが、派生クラスのオーバーライドするメンバーには属性がない。

    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() {}
    }
    
  • 基底クラスのメンバーには属性がないが、派生クラスのオーバーライドするメンバーには属性がある。

    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() {}
    }
    
  • インターフェイス メンバーには属性があるが、その実装には属性がない。

    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 () { }
    }
    
  • インターフェイス メンバーには属性がないが、その実装には属性がある。

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

違反の修正方法

すべてのインターフェイスおよびオーバーライドで、'RequiresAssemblyFilesAttribute' 属性の有無に関して実装と定義が一致する必要があります。 両方のメンバーに属性が含まれているか、どちらにも含まれていません。 インターフェイスまたは基底クラスのメンバー、もしくは実装または派生クラスのメンバーの属性を削除するか追加して、属性が両方に設定されるか、どちらにも設定されないようにします。

どのようなときに警告を抑制するか

この警告を抑制しないでください。