다음을 통해 공유


COM 노출 값 형식에 public이 아닌 필드를 사용하지 마십시오.

업데이트: 2007년 11월

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

범주

Microsoft.Interoperability

변경 수준

주요 변경

원인

COM에 노출된 것으로 표시된 값 형식이 public이 아닌 인스턴스 필드를 선언합니다.

규칙 설명

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

기본적으로 모든 public 값 형식은 COM에서 볼 수 있습니다. 하지만 가양성(false positives)을 줄이기 위해 이 규칙에서는 형식의 COM 노출 여부를 명시적으로 지정하도록 요구합니다. 포함 어셈블리는 false로 설정된 System.Runtime.InteropServices.ComVisibleAttribute로 표시되어야 하며 형식은 true로 설정된 ComVisibleAttribute로 표시되어야 합니다.

위반 문제를 해결하는 방법

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

경고를 표시하지 않는 경우

필드를 노출해도 괜찮은 경우에는 이 규칙에서 경고를 표시하지 않아도 안전합니다.

예제

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

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(True)> _ 
   Public Structure SomeStructure

      Friend SomeInteger As Integer

   End Structure

End Namespace
using System;
using System.Runtime.InteropServices;

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

관련 규칙

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

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

참고 항목

개념

상호 운용할 .NET 형식의 정규화

기타 리소스

비관리 코드와의 상호 운용