CA1408: AutoDual ClassInterfaceType을 사용하지 마십시오.
항목 | 값 |
---|---|
RuleId | CA1408 |
범주 | Microsoft.Interoperability |
주요 변경 내용 | 주요 변경 |
원인
COM(구성 요소 개체 모델) 노출 형식이 ClassInterfaceType의 AutoDual
값으로 설정된 ClassInterfaceAttribute 특성으로 표시되었습니다.
규칙 설명
이중 인터페이스를 사용하는 형식에서는 클라이언트가 특정 인터페이스 레이아웃에 바인딩할 수 있습니다. 이후 버전에서 해당 형식이나 기본 형식의 레이아웃이 변경되면 인터페이스에 바인딩된 COM 클라이언트의 바인딩이 해제될 수 있습니다. ClassInterfaceAttribute 특성을 지정하지 않으면 기본적으로 디스패치 전용 인터페이스가 사용됩니다.
달리 표시되지 않은 경우 제네릭이 아닌 모든 public 형식은 COM에 표시되고, public이 아닌 모든 제네릭 형식은 COM에 표시되지 않습니다.
위반 문제를 해결하는 방법
이 규칙의 위반 문제를 해결하려면 ClassInterfaceAttribute 특성의 값을 ClassInterfaceType의 None
값으로 변경하고 인터페이스를 명시적으로 정의합니다.
경고를 표시하지 않는 경우
형식과 해당 기본 형식의 레이아웃이 이후 버전에서 변경될 수 있는 경우 이 규칙의 경고를 표시합니다.
예시
다음 예제에서는 규칙을 위반하는 클래스와 명시적 인터페이스를 사용하도록 클래스를 다시 선언하는 방법을 보여 줍니다.
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로 표시하십시오.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기