IL3003: Poznámky "RequiresAssemblyFilesAttribute" se musí shodovat napříč všemi implementacemi rozhraní nebo přepsáním
Hodnota | |
---|---|
ID pravidla | IL3003 |
Kategorie | SingleFile |
Oprava způsobující chybu nebo přerušení | Pevných |
Příčina
Když publikujete aplikaci jako jeden soubor (například nastavením PublishSingleFile
vlastnosti true
v projektu), implementace rozhraní nebo odvozené třídy se členy, které nemají odpovídající poznámky [RequiresAssemblyFiles]
, můžou vést k volání člena s atributem, který není kompatibilní s jedním souborem. Existují čtyři možné scénáře, ve kterých je možné vygenerovat upozornění:
Člen základní třídy má atribut, ale přepsání člen odvozené třídy nemá atribut:
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() {} }
Člen základní třídy nemá atribut, ale přepsání člen odvozené třídy má atribut:
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() {} }
Člen rozhraní má atribut, ale jeho implementace nemá atribut:
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 () { } }
Člen rozhraní atribut nemá, ale jeho implementace má atribut:
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 () { } }
Jak opravit porušení
Pro všechna rozhraní a přepsání musí implementace odpovídat definici z hlediska přítomnosti nebo nepřítomnosti atributu RequiresAssemblyFilesAttribute. Oba členy buď obsahují atribut, nebo ani jeden z nich. Odeberte nebo přidejte atribut na členu rozhraní/základní třídy nebo implementujte/odvozený člen třídy tak, aby byl atribut na obou nebo ani na jednom.
Kdy potlačit upozornění
Toto upozornění byste neměli potlačit.