IL3003: As anotações 'RequiresAssemblyFilesAttribute' devem corresponder em todas as implementações ou substituições de interface
Value | |
---|---|
ID da regra | IL3003 |
Categoria | Ficheiro único |
A correção está quebrando ou não quebrando | Sem quebra |
Motivo
Quando você publica um aplicativo como um único arquivo (por exemplo, definindo a PublishSingleFile
propriedade como true
em um projeto), implementações de interface ou classes derivadas com membros que não têm anotações correspondentes podem [RequiresAssemblyFiles]
levar a chamar um membro com o atributo, que não é compatível com um único arquivo. Existem quatro cenários possíveis em que o aviso pode ser gerado:
Um membro de uma classe base tem o atributo, mas o membro substituto da classe derivada não tem o atributo:
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() {} }
Um membro de uma classe base não tem o atributo, mas o membro predominante da classe derivada tem o atributo:
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() {} }
Um membro da interface tem o atributo, mas sua implementação não tem o atributo:
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 () { } }
Um membro da interface não tem o atributo, mas sua implementação tem o atributo:
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 () { } }
Como corrigir violações
Para todas as interfaces e substituições, a implementação deve corresponder à definição em termos da presença ou ausência do atributo 'RequiresAssemblyFilesAttribute'. Ou ambos os membros contêm o atributo ou nenhum deles. Remova ou adicione o atributo no membro da interface/classe base ou implementando/derivando o membro da classe para que o atributo esteja em ambos ou em nenhum deles.
Quando suprimir avisos
Não deve suprimir este aviso.