IL3003: 'RequiresAssemblyFilesAttribute' aantekeningen moeten overeenkomen met alle interface-implementaties of onderdrukkingen
Weergegeven als | |
---|---|
Regel-id | IL3003 |
Categorie | SingleFile |
Oplossing is brekend of vastlopend | Vaste |
Oorzaak
Wanneer u een app publiceert als één bestand (bijvoorbeeld door de PublishSingleFile
eigenschap true
in te stellen in een project), kunnen interface-implementaties of afgeleide klassen met leden die geen overeenkomende aantekeningen [RequiresAssemblyFiles]
hebben, ertoe leiden dat een lid wordt aangeroepen met het kenmerk, wat niet compatibel is met één bestand. Er zijn vier mogelijke scenario's waarin de waarschuwing kan worden gegenereerd:
Een lid van een basisklasse heeft het kenmerk, maar het overschrijvende lid van de afgeleide klasse heeft het kenmerk niet:
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() {} }
Een lid van een basisklasse heeft het kenmerk niet, maar het overschrijvende lid van de afgeleide klasse heeft het kenmerk:
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() {} }
Een interfacelid heeft het kenmerk, maar de implementatie heeft het kenmerk niet:
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 () { } }
Een interfacelid heeft het kenmerk niet, maar de implementatie heeft wel het kenmerk:
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 () { } }
Schendingen oplossen
Voor alle interfaces en onderdrukkingen moet de implementatie overeenkomen met de definitie in termen van de aanwezigheid of afwezigheid van het kenmerk 'RequiresAssemblyFilesAttribute'. Beide leden bevatten het kenmerk of geen van beide. Verwijder of voeg het kenmerk toe aan de interface/het basisklasselid of implementeren/afleiden van klasselid, zodat het kenmerk zich op beide of geen van beide bevindt.
Wanneer waarschuwingen onderdrukken
U moet deze waarschuwing niet onderdrukken.