如何:对基于 .NET 的组件配置免注册激活

更新:2007 年 11 月

免注册激活对于基于 .NET 的组件仅比对于 COM 组件稍微复杂一些。安装程序需要两个清单:

  • COM 应用程序必须有一个 Win32 样式的应用程序清单,用于标识托管组件。

  • 基于 .NET 的组件必须有一个包含运行时所需激活信息的组件清单。

本主题讲解如何将应用程序清单与应用程序关联起来;如何将组件清单与组件关联起来;以及如何在程序集中嵌入组件清单。

创建应用程序清单

  1. 对于与一个或多个托管组件交互操作的 COM 应用程序,使用 XML 编辑器创建(或修改)该应用程序拥有的应用程序清单。

  2. 在文件开头插入以下标准头:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    

    如想查看清单元素及其属性的信息,请在 MSDN Library 中搜索“应用程序清单参考”。

  3. 确定该清单的所有者。在下面的示例中,myComApp 版本 1 拥有该清单文件。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity type="win32" 
                        name="myOrganization.myDivision.myComApp" 
                        version="1.0.0.0" 
                        processorArchitecture="x86" 
      />
    
  4. 确定相关程序集。在下面的示例中,myComApp 依赖于 myManagedComp。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity type="win32" 
                        name="myOrganization.myDivision.myComApp" 
                        version="1.0.0.0" 
                        processorArchitecture="x86" 
                        publicKeyToken="8275b28176rcbbef"
      />
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" 
                        name="myOrganization.myDivision.myManagedComp" 
                        version="6.0.0.0" 
                        processorArchitecture="X86" 
                        publicKeyToken="8275b28176rcbbef"
                        language="*"
          />
        </dependentAssembly>
      </dependency>
    </assembly>
    
  5. 保存并命名清单文件。应用程序清单的名称是在程序集可执行文件名的后面加上 .manifest 扩展名。例如,myComApp.exe 的应用程序清单文件的名称为 myComApp.exe.manifest。

可将应用程序清单与 COM 应用程序安装在相同的目录中。或者,也可将其作为资源添加到应用程序的 .exe 文件中。如想查看其他信息,请在 MSDN Library 中搜索“并行程序集”。

创建组件清单

  1. 使用 XML 编辑器创建一个组件清单来描述托管程序集。

  2. 在文件开头插入以下标准头:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    
  3. 确定该文件的所有者。应用程序清单文件中 <dependentAssembly> 元素下的 <assemblyIdentity> 元素必须与组件清单中的 <assemblyIdentity> 元素相匹配。在下面的示例中,myManagedComp 版本 1.2.3.4 拥有该清单文件。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
           <assemblyIdentity
                        name="myOrganization.myDivision.myManagedComp"
                        version="1.2.3.4" />
                        publicKeyToken="8275b28176rcbbef"
    
  4. 确定程序集中的各个类。使用 <clrClass> 元素可以唯一地标识托管程序集中的各个类。该元素是 <assembly> 元素的子元素,它具有下表所示的属性。

    属性

    说明

    必需

    clsid

    指定要激活的类的标识符。

    description

    用于向用户提供组件信息的字符串。默认为空字符串。

    name

    表示该托管类的字符串。

    progid

    用于后期绑定激活的标识符。

    threadingModel

    COM 线程模型。默认值为“Both”

    runtimeVersion

    将忽略此属性。如果尚未加载运行库,将在激活该类之前加载最高的版本。否则,将使用当前加载的版本。

    tlbid

    包含有关该类的类型信息的类型库的标识符。

    所有属性标记均区分大小写。可以通过使用 OLE/COM ObjectViewer (Oleview.exe) 查看导出的类型库来获取 CLSID、ProgID、线程模型,以及运行库版本。

    以下组件清单标识一个具有两个方法的类。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
           <assemblyIdentity
                        name="myOrganization.myDivision.myManagedComp"
                        version="1.2.3.4" />
                        publicKeyToken="8275b28176rcbbef"
           <clrClass
                        clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}"
                        progid="myManagedComp.testClass1"
                        threadingModel="Both"
                        name="myManagedComp.testClass1"
                        runtimeVersion="v1.0.3705">
           </clrClass>
           <clrClass
                        clsid="{367221D6-3559-3328-ABD3-45B6825F9732}"
                        progid="myManagedComp.testClass2"
                        threadingModel="Both"
                        name="myManagedComp.testClass2"
                        runtimeVersion="v1.0.3705">
           </clrClass>
           <file name="MyManagedComp.dll">
           </file>
    </assembly>
    
  5. 保存并命名清单文件。组件清单的名称是在程序库名称的后面加上 .manifest 扩展名。例如,myManagedComp.dll 的组件清单的名称为 myManagedComp.manifest。

必须将组件清单作为资源嵌入程序集。

在托管程序集中嵌入组件清单

  1. 创建包含以下语句的资源脚本:

    RT_MANIFEST 1 myManagedComp.manifest

    在这条语句中,myManagedComp.manifest 是要嵌入的组件清单的名称。此示例中,脚本文件名是 myresource.rc。

  2. 用 Microsoft Windows 资源编译器 (Rc.exe) 编译脚本。在命令提示处,键入下列命令:

    rc myresource.rc

    Rc.exe 产生 myresource.res 资源文件。

  3. 再次编译该程序集的源文件,并使用 /win32res 选项指定资源文件:

    /win32res:myresource.res
    

    同样,myresource.res 是包含嵌入的资源的资源文件的名称。

请参见

概念

免注册 COM Interop 的要求

配置 COM 组件免注册激活

其他资源

免注册 COM 互操作