Com registration methods should be matched

TypeName

ComRegistrationMethodsShouldBeMatched

CheckId

CA1410

Category

Microsoft.Interoperability

Breaking Change

NonBreaking

Cause

A type declares a method marked with the System.Runtime.InteropServices.ComRegisterFunctionAttribute attribute but does not declare a method marked with the System.Runtime.InteropServices.ComUnregisterFunctionAttribute attribute, or vice versa.

Rule Description

For COM clients to create a .NET Framework type, the type must first be registered. If it is available, a method marked with the ComRegisterFunctionAttribute attribute is called during the registration process to run user specified code. A corresponding method marked with the ComUnregisterFunctionAttribute attribute is called during the unregistration process to reverse the operations of the registration method.

How to Fix Violations

To fix a violation of this rule add the corresponding registration or unregistration method.

When to Exclude Warnings

Do not exclude a warning from this rule.

Example

The following example shows a type that violates the rule. The commented code shows the fix for the violation.

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(True)>
Namespace InteroperabilityLibrary

   Public Class ClassToRegister
   End Class

   Public Class ComRegistration

      <ComRegisterFunctionAttribute> _ 
      Friend Shared Sub RegisterFunction(typeToRegister As Type)
      End Sub

'      <ComUnregisterFunctionAttribute> _ 
'      Friend Shared Sub UnregisterFunction(typeToRegister As Type)
'      End Sub

   End Class

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

[assembly: ComVisible(true)]
namespace InteroperabilityLibrary
{
   public class ClassToRegister
   {
   }

   public class ComRegistration
   {
      [ComRegisterFunction]
      internal static void RegisterFunction(Type typeToRegister) {}

//      [ComUnregisterFunction]
//      internal static void UnregisterFunction(Type typeToRegister) {}
   }
}

Com registration methods should not be visible

See Also

Reference

Assembly Registration Tool (Regasm.exe)
System.Runtime.InteropServices.RegistrationServices

Concepts

Registering Assemblies with COM