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