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' 属性の有無に関して実装と定義が一致する必要があります。 両方のメンバーに属性が含まれているか、どちらにも含まれていません。 インターフェイスまたは基底クラスのメンバー、もしくは実装または派生クラスのメンバーの属性を削除するか追加して、属性が両方に設定されるか、どちらにも設定されないようにします。
どのようなときに警告を抑制するか
この警告を抑制しないでください。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET