IL3003: 'RequiresAssemblyFilesAttribute' annotations must match across all interface implementations or overrides.

Value
Rule ID IL3003
Category SingleFile
Fix is breaking or non-breaking Non-breaking

Cause

When publishing as a single file (for example, by setting the PublishSingleFile property in a project to true), interface implementations or derived classes with members that don't have matching annotations of [RequiresAssemblyFiles] can lead to calling a member with the attribute, which is not single-file compatible. There are four possible scenarios where the warning can be generated:

A member of a base class has the attribute but the overriding member of the derived class does not have the attribute:

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

A member of a base class does not have the attribute but the overriding member of the derived class does have the attribute:

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

An interface member has the attribute but its implementation does not have the attribute:

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

An interface member does not have the attribute but its implementation does have the attribute:

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

How to fix violations

For all interfaces and overrides, the implementation must match the definition in terms of the presence or absence of the 'RequiresAssemblyFilesAttribute' attribute. Either both the members contain the attribute or neither of them. Remove or add the attribute on the interface/base class member or implementing/deriving class member so that the attribute is on both or neither.

When to suppress warnings

This warning should not be suppressed.