다음을 통해 공유


CA1405: COM 노출 형식의 기본 형식은 COM 노출이어야 합니다.

TypeName

ComVisibleTypeBaseTypesShouldBeComVisible

CheckId

CA1405

범주

Microsoft.Interoperability

변경 수준

DependsOnFix

원인

COM(Component Object Model) 노출 형식이 COM에 노출되지 않는 형식에서 파생됩니다.

규칙 설명

COM 노출 형식이 새 버전에서 멤버를 추가하는 경우 현재 버전에 바인딩된 COM 클라이언트에서 문제가 발생하지 않도록 하려면 엄격한 지침을 따라야 합니다. COM에서 볼 수 없는 형식은 새 멤버를 추가할 때 이러한 COM 버전 관리 규칙을 따를 필요가 없는 것으로 간주됩니다. 하지만 COM 노출 형식이 COM에서 볼 수 없는 형식에서 파생되고 ClassInterfaceType.AutoDual 또는 AutoDispatch(기본값)의 클래스 인터페이스를 노출하는 경우 기본 형식의 모든 public 멤버(특별히 COM에서 볼 수 없다고 표시되지 않은 경우)가 COM에 노출됩니다. 기본 형식이 이후 버전에서 새 멤버를 추가하는 경우 파생된 형식의 클래스 인터페이스에 바인딩된 모든 COM 클라이언트에 문제가 발생할 수 있습니다. COM 클라이언트에서 문제가 발생할 가능성을 줄이려면 COM 노출 형식이 COM 노출 형식에서만 파생되어야 합니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 기본 형식을 COM에서 볼 수 있도록 만들거나 파생된 형식을 COM에서 볼 수 없도록 만듭니다.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

예제

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

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(False)> _ 
   Public Class BaseClass

      Sub SomeSub(valueOne As Integer)
      End Sub

   End Class

   ' This class violates the rule.
   <ComVisibleAttribute(True)> _ 
   Public Class DerivedClass
      Inherits BaseClass

      Sub AnotherSub(valueOne As Integer, valueTwo As Integer)
      End Sub

   End Class

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

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(false)]
   public class BaseClass
   {
      public void SomeMethod(int valueOne) {}
   }

   // This class violates the rule.
   [ComVisible(true)]
   public class DerivedClass : BaseClass
   {
      public void AnotherMethod(int valueOne, int valueTwo) {}
   }
}

참고 항목

참조

System.Runtime.InteropServices.ClassInterfaceAttribute

개념

클래스 인터페이스 소개

기타 리소스

비관리 코드와의 상호 운용