CA1413: ComVisible 값 형식에 public이 아닌 필드를 사용하지 마십시오.

항목
RuleId CA1413
범주 Microsoft.Interoperability
주요 변경 내용 주요 변경

원인

구체적으로 COM(구성 요소 개체 모델) 노출로 표시된 값 형식에서 public이 아닌 인스턴스 필드를 선언합니다.

규칙 설명

public이 아니며 값 형식이 COM에 노출되는 인스턴스 필드는 COM 클라이언트에서 볼 수 있습니다. 필드 내용을 검토하여 노출되지 않아야 하거나 디자인 또는 보안에 의도하지 않은 영향을 미칠 정보가 있는지 확인합니다.

기본적으로 모든 public 값 형식은 COM에 표시됩니다. 그러나 이 규칙의 가양성을 줄이려면 형식의 COM 표시 유형을 명시적으로 지정해야 합니다. 포함 어셈블리는 false로 설정된 System.Runtime.InteropServices.ComVisibleAttribute로 표시해야 하고, 형식은 true로 설정된 ComVisibleAttribute로 표시해야 합니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하고 필드를 숨김으로 유지하려면 값 형식을 참조 형식으로 변경하거나 형식에서 ComVisibleAttribute 특성을 제거합니다.

경고를 표시하지 않는 경우

필드의 공개 노출이 허용되는 경우 이 규칙의 경고를 표시하지 않아도 됩니다.

예시

다음 예제에서는 규칙을 위반하는 형식을 보여 줍니다.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(true)]
   public struct SomeStruct
   {
      internal int SomeValue;
   }
}

CA1407: COM 노출 형식에 정적 멤버를 사용하지 마십시오.

CA1017: 어셈블리를 ComVisibleAttribute로 표시하십시오.

참고 항목