CA1408: AutoDual ClassInterfaceType을 사용하지 마십시오.

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

원인

COM(구성 요소 개체 모델) 노출 형식이 ClassInterfaceTypeAutoDual 값으로 설정된 ClassInterfaceAttribute 특성으로 표시되었습니다.

규칙 설명

이중 인터페이스를 사용하는 형식에서는 클라이언트가 특정 인터페이스 레이아웃에 바인딩할 수 있습니다. 이후 버전에서 해당 형식이나 기본 형식의 레이아웃이 변경되면 인터페이스에 바인딩된 COM 클라이언트의 바인딩이 해제될 수 있습니다. ClassInterfaceAttribute 특성을 지정하지 않으면 기본적으로 디스패치 전용 인터페이스가 사용됩니다.

달리 표시되지 않은 경우 제네릭이 아닌 모든 public 형식은 COM에 표시되고, public이 아닌 모든 제네릭 형식은 COM에 표시되지 않습니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 ClassInterfaceAttribute 특성의 값을 ClassInterfaceTypeNone 값으로 변경하고 인터페이스를 명시적으로 정의합니다.

경고를 표시하지 않는 경우

형식과 해당 기본 형식의 레이아웃이 이후 버전에서 변경될 수 있는 경우 이 규칙의 경고를 표시합니다.

예시

다음 예제에서는 규칙을 위반하는 클래스와 명시적 인터페이스를 사용하도록 클래스를 다시 선언하는 방법을 보여 줍니다.

using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(true)]
namespace InteroperabilityLibrary
{
   // This violates the rule.
   [ClassInterface(ClassInterfaceType.AutoDual)]
   public class DualInterface
   {
      public void SomeMethod() {}
   }

   public interface IExplicitInterface
   {
      void SomeMethod();
   }

   [ClassInterface(ClassInterfaceType.None)]
   public class ExplicitInterface : IExplicitInterface
   {
      public void SomeMethod() {}
   }
}

CA1403: 자동 레이아웃 형식은 COM 노출이면 안 됩니다.

CA1412: ComSource 인터페이스를 IDispatch로 표시하십시오.

참고 항목