Why is this an issue?

Methods declared as Public, Protected, or Protected Friend can be accessed from other assemblies, which means you should validate parameters to be within the expected constraints. In general, checking against Nothing is recommended in defensive programming.

This rule raises an issue when a parameter of a publicly accessible method is not validated against Nothing before being dereferenced.

Noncompliant code example

Public Class Sample

    Public Property Message As String

    Public Sub PublicMethod(Arg As Exception)
        Message = Arg.Message   ' Noncompliant
    End Sub

    Protected Sub ProtectedMethod(Arg As Exception)
        Message = Arg.Message   ' Noncompliant
    End Sub

End Class

Compliant solution

Public Class Sample

    Public Property Message As String

    Public Sub PublicMethod(Arg As Exception)
        If Arg IsNot Nothing Then Message = Arg.Message   ' Noncompliant
    End Sub

    Protected Sub ProtectedMethod(Arg As Exception)
        ArgumentNullException.ThrowIfNull(Arg)
        Message = Arg.Message   ' Noncompliant
    End Sub

    Private Sub PrivateMethod(Arg As Exception)
        Message = Arg.Message   ' Compliant: method is not publicly accessible
    End Sub

End Class

Exceptions

Imports System.Runtime.CompilerServices

<AttributeUsage(AttributeTargets.Parameter, Inherited:=False)>
Public NotInheritable Class ValidatedNotNullAttribute
    Inherits Attribute

End Class

Public Module Guard

    Public Sub NotNull(Of T As Class)(<ValidatedNotNullAttribute> Value As T, <CallerArgumentExpression("Value")> Optional Name As String = "")
        If Value Is Nothing Then Throw New ArgumentNullException(Name)
    End Sub

End Module

Public Module SampleUsage

    Public Function CustomToUpper(Value As String) As String
        Guard.NotNull(Value)
        Return Value.ToUpper
    End Function

End Module