CA2126: 型のリンク要求には継承要求が必要です
TypeName |
TypeLinkDemandsRequireInheritanceDemands |
CheckId |
CA2126 |
分類 |
Microsoft.Security |
互換性に影響する変更点 |
あり |
原因
シールされていないパブリックな型がリンク要求によって保護され、オーバーライド可能なメソッドを持っていますが、その型またはメソッドが継承確認要求によって保護されていません。
規則の説明
メソッドまたはメソッドの宣言型のリンク要求は、指定のアクセス許可を得るためにメソッドの直前の呼び出し元を必要とします。メソッドの継承確認要求は、指定のアクセス許可を得るためにオーバーライドするメソッドを必要とします。型の継承確認要求は、指定のアクセス許可を得るために派生クラスを必要とします。
違反の修正方法
この規則の違反を修正するには、リンク要求と同じアクセス許可の継承確認要求によって型またはメソッドの安全を確保します。
警告を抑制する状況
この規則による警告は抑制しないでください。
使用例
この規則に違反する型を次の例に示します。
Imports System
Imports System.Security.Permissions
Namespace SecurityLibrary
<EnvironmentPermission(SecurityAction.LinkDemand, Read:="PATH")> _
Public Class TypesWithLinkDemands
Protected Overridable Sub UnsecuredMethod()
End Sub
<EnvironmentPermission(SecurityAction.InheritanceDemand, Read:="PATH")> _
Protected Overridable Sub SecuredMethod()
End Sub
End Class
End Namespace
using System;
using System.Security.Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction.LinkDemand, Read = "PATH")]
public class TypesWithLinkDemands
{
public virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction.InheritanceDemand, Read = "PATH")]
public virtual void SecuredMethod() { }
}
}
using namespace System;
using namespace System::Security::Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction::LinkDemand, Read = "PATH")]
public ref class TypesWithLinkDemands
{
protected:
virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction::InheritanceDemand,
Read = "PATH")]
virtual void SecuredMethod() {}
};
}
関連規則
CA2112: セキュリティで保護された型はフィールドを公開してはなりません
CA2122: リンク確認要求で間接的にメソッドを公開しないでください
CA2123: オーバーライドのリンク確認要求は基本と同様にします