技术开发 频道

VS集成之代码生成机制实现强类型编程

  二、将MessageCodeGenerator注册成COM组件

  到目前我们MessageCodeGenerator完全通过托管程序编写,但是VS和扩展是通过COM的方式进行交互的,所以我们需要将MessageCodeGenerator注册成COM组件。我们首先需要做的是对MessageCodeGenerator所在的程序集进行注册。一般地,进行注册的程序集都具有一个强名称,所以我们先对程序集进行签名。这只需要对定义MessageCodeGenerator所在的项目的“签名”选项进行如下设置就可以了。

将MessageCodeGenerator注册成COM组件
 

  我们还需要对程序集的COM可见性进行相应的设置。对于COM可见性的设置,我们只需在AssemblyInfo.cs文件中,添加如下一个ComVisibleAttribute特性并将参数设置成true即可(默认为false)。

// Setting ComVisible to false makes the types in this assembly not visible    
// to COM components.  If you need to access a type in this assembly from    
// COM, set the ComVisible attribute to true on that type.  
[assembly: ComVisible(
true)]

 

  为了让我们定义的MessageCodeGenerator通过COM组件的形式暴露出来,我们需要功过在器类型上通过应用一个GuidAttribute指定一个唯一标识。这个唯一标识可以通过VS自带的GUID生成器生成。

[Guid("F9A0FCB3-864F-4B87-885B-FAEBC860BD64")]  
public class MessageCodeGenerator : BaseCodeGeneratorWithSite  
{    
    
//Others...  
}

 

  程序集的注册通过命令行工具RegAsm.exe完成,我们只需要启动通过VS 2010的命名行工具,执行RegAsm.exe命令对编译生成的程序集进行注册。

RegAsm "c:\CodeDOMGenerator\Artech.CodeDomGenerator.CodeGenerator.dll"

 

  实际上,我们也可以直接通过VS对相应的项目进行相应的设置,让VS在编译完成后自动完成对目标程序基的注册。你只需要在项目设置对话框中的Build页,钩选“Register for COM interop”即可。

  注:由于我们的MessageCodeGenerator内部引用到了另一个程序集Microsoft.VisualStudio.Shell.Interop.dll中的某些类型,你需要通过执行如下RegAsm.exe命令行对该程序基进行注册,并采用/tlb开关生成类型库。

将MessageCodeGenerator注册成COM组件  

0
相关文章