다음을 통해 공유


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

업데이트: 2007년 11월

TypeName

ComVisibleTypeBaseTypesShouldBeComVisible

CheckId

CA1405

범주

Microsoft.Interoperability

변경 수준

DependsOnFix

원인

COM 노출 형식이 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

기타 리소스

비관리 코드와의 상호 운용