71、.NET SDK工具:REGASM.EXE、AXIMP.EXE和REGSVCS.EXE详解

.NET SDK工具:REGASM.EXE、AXIMP.EXE和REGSVCS.EXE详解

在.NET开发中,有一些实用的工具可以帮助我们完成组件注册、类型库导出等重要任务。本文将详细介绍三个重要的工具:REGASM.EXE、AXIMP.EXE和REGSVCS.EXE。

1. REGASM.EXE

REGASM.EXE是.NET Framework程序集注册实用工具,用于在Windows注册表中注册和注销程序集,以便COM使用。它还可以选择为输入程序集导出并注册类型库。

1.1 语法
regasm AssemblyFileName [Options]
  • AssemblyFileName :指定要(反)注册的程序集的文件名(如果适用,还包括路径)。对于多文件程序集,文件名必须是包含程序集清单的文件。如果未提供路径,REGASM.EXE会先在当前目录查找文件,若找不到则搜索命令窗口的路径。
1.2 默认注册条目

当不使用任何选项运行REGASM.EXE时,会为每个coclass添加以下注册表项:

HKEY_CLASSES_ROOT\ProgID\[default]="NamespaceQualifiedClassName"
HKEY_CLASSES_ROOT\ProgID\CLSID\[default]="{CLSID}"
HKEY_CLASSES_ROOT\CLSID\{CLSID}\[default]="NamespaceQualifiedClassName"
HKEY_CLASSES_ROOT\CLSID\{CLSID}\Implemented Categories\
➥{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}
HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32\[default]=
➥"WindowsSystemDirectory\mscoree.dll"
HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32\Assembly="FullAssemblyName"
HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32\Class=
➥"NamespaceQualifiedClassName"
HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32\RuntimeVersion="Version"
HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32\ThreadingModel="Both"
HKEY_CLASSES_ROOT\CLSID\{CLSID}\ProgId\[default]="ProgID"

当在Interop程序集上运行时,仅添加加粗的条目,其余保持其原始设置。当在主Interop程序集上运行时,默认会额外注册一个条目:

HKEY_CLASSES_ROOT\TypeLib\{LIBID}\MajorVersion.MinorVersion\
➥PrimaryInteropAssemblyName="FullAssemblyName"
1.3 选项说明
选项 说明
/codebase 在每个CLSID下使用CodeBase值注册程序集文件的位置,例如: HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32\CodeBase=file:///C:/.../MyAssembly.dll 。此选项仅适用于强命名程序集,因为依赖代码库的简单命名程序集可能会受到其他依赖代码库的简单命名程序集的负面影响。
/regfile 创建一个注册表文件而不是执行注册。此文件是一个简单的文本文件,列出了键和值,可由REGEDIT.EXE等程序在以后进行注册。此选项不能与 /unregister /tlb 选项同时使用。
/registered 仅在导出类型库时引用已注册的依赖类型库。此选项仅在与 /tlb 一起使用时才有意义。
/tlb 导出并注册类型库。可以指定输出类型库的文件名,例如: /tlb:MyAssembly.tlb 。此选项不能与 /regfile 选项同时使用。
/unregister 注销程序集,而不是默认的注册操作。如果与 /tlb 选项一起使用,还可以注销相应的类型库。此选项不能与 /regfile 选项同时使用。
/nologo 抑制每次运行实用工具时打印的两行版权信息。
/silent 隐藏两行版权信息,还抑制任何成功消息和警告。仅在使用此选项时才会将错误打印到控制台。
/verbose 提供实用工具执行操作的更多详细信息。仅在使用 /tlb 时才有区别。
/help /? 列出选项摘要。
1.4 模拟Visual Studio .NET的“为COM互操作注册”设置

可以使用以下命令来模拟Visual Studio .NET的“为COM互操作注册”设置:

regasm FullPath\AssemblyFileName /codebase /tlb
2. AXIMP.EXE

AXIMP.EXE是.NET ActiveX控件到Windows窗体程序集生成器,它将包含至少一个已注册ActiveX控件的类型库作为输入,通常会创建至少两个程序集:一个Interop程序集(以及任何依赖的Interop程序集)和一个ActiveX程序集,用于在Windows窗体上托管ActiveX控件。

2.1 语法
aximp TypeLibFileName [Options]
  • TypeLibFileName :指定要导入的类型库或包含类型库的文件的文件名(如果适用,还包括路径)。与TLBIMP.EXE不同,AXIMP.EXE不会搜索输入文件的路径。如果在命令行中未提供路径,文件必须在当前目录中。
2.2 选项说明
选项 说明
/delaysign 与TLBIMP.EXE的 /delaysign 选项类似,仅与 /keyfile /keycontainer 选项一起使用,从加密密钥对中提取公钥。
/keycontainer 期望一个包含加密密钥容器名称的文件名。
/keyfile 期望一个包含加密密钥对的文件名。
/out 用于选择输出ActiveX程序集的名称和位置。
/publickey 期望一个仅包含公钥的文件名。
/source 生成ActiveX程序集的C#源代码,便于自定义程序集。
/nologo 抑制运行实用工具时有时会打印的三行版权信息。
/silent 隐藏三行版权信息,还抑制任何成功消息和警告。如果发生错误,则会将版权信息和错误信息打印到控制台。
/verbose 在版本1.0中,此选项对AXIMP.EXE的输出没有影响。
/help /? 列出选项摘要。
3. REGSVCS.EXE

REGSVCS.EXE是.NET Framework服务安装实用工具,用于将包含服务组件的程序集安装和卸载到组件服务(COM+)目录中。

3.1 语法
regsvcs [options] AssemblyFileName 
  • AssemblyFileName :指定要(反)安装的程序集的文件名(如果适用,还包括路径)。对于多文件程序集,文件名必须是包含程序集清单的文件。如果未提供路径,REGSVCS.EXE会先在当前目录查找文件,若找不到则搜索命令窗口的路径。
3.2 选项说明
选项 说明
/appname 用于自定义安装的应用程序名称。
/c 强制创建一个新应用程序,而不是尝试查找现有应用程序。
/componly 仅配置组件,不配置任何接口或方法。
/exapp 使用现有应用程序而不是创建新应用程序。
/extlb 使用现有类型库而不是导出新类型库。
/fc 如果找到现有应用程序则使用,否则创建一个新应用程序。
/noreconfig 指示实用工具不重新配置现有目标应用程序。
/parname 在支持COM+应用程序分区的Windows版本上,用于选择要使用或创建的分区名称或ID。
/reconfig 在适当的时候指示工具重新配置现有目标应用程序。
/tlb 与REGASM.EXE的 /tlb 选项类似,允许用户选择导出类型库的名称和位置。
/u 用于卸载目标应用程序。
/nologo 抑制每次运行实用工具时打印的两行版权信息。
/quiet 隐藏两行版权信息,还抑制任何成功消息和警告。仅在使用此选项时才会将错误打印到控制台。
/help /? 列出选项摘要。

mermaid流程图:REGASM.EXE操作流程

graph LR
    A[开始] --> B{选择操作}
    B -->|注册| C{是否使用选项}
    C -->|是| D[选择选项,如/codebase、/tlb等]
    C -->|否| E[默认注册]
    B -->|注销| F{是否使用/tlb选项}
    F -->|是| G[注销程序集和类型库]
    F -->|否| H[仅注销程序集]
    D --> I[执行注册操作]
    E --> I
    G --> J[完成注销]
    H --> J
    I --> K[结束]
    J --> K

mermaid流程图:AXIMP.EXE操作流程

graph LR
    A[开始] --> B{选择选项}
    B -->|/source| C[生成C#源代码]
    B -->|/out| D[指定输出ActiveX程序集名称和位置]
    B -->|其他选项| E[应用相应选项]
    C --> F[生成程序集]
    D --> F
    E --> F
    F --> G[结束]

综上所述,REGASM.EXE、AXIMP.EXE和REGSVCS.EXE是.NET开发中非常有用的工具,通过合理使用它们的选项,可以满足不同的开发需求。希望本文的介绍能帮助你更好地理解和使用这些工具。

深入理解工具使用场景与注意事项

4. 工具使用场景分析
4.1 REGASM.EXE使用场景
  • COM互操作性 :当需要让.NET程序集被COM客户端使用时,REGASM.EXE是必不可少的工具。例如,在一个混合开发的项目中,既有.NET编写的组件,又有COM客户端程序,就可以使用REGASM.EXE将.NET程序集注册到Windows注册表中,供COM客户端调用。
  • 类型库管理 :通过 /tlb 选项,可以导出并注册类型库,方便COM客户端获取程序集的类型信息。这在与COM组件交互频繁的项目中非常有用。
  • 调试与测试 /regfile 选项可以生成注册表文件,用于查看REGASM.EXE会在注册表中放置哪些条目,这对于调试和测试注册过程非常有帮助。
4.2 AXIMP.EXE使用场景
  • ActiveX控件集成 :在Windows Forms应用程序中使用ActiveX控件时,AXIMP.EXE可以将ActiveX控件的类型库转换为.NET程序集,使得在.NET环境中可以方便地使用这些控件。
  • 自定义开发 /source 选项可以生成C#源代码,方便开发人员对ActiveX程序集进行自定义开发,满足特定的业务需求。
4.3 REGSVCS.EXE使用场景
  • COM+服务组件管理 :当开发包含服务组件的程序集,并需要将其安装到组件服务(COM+)目录中时,REGSVCS.EXE可以完成安装和卸载操作,同时还可以进行应用程序和类型库的配置。
  • 多版本应用管理 :在支持COM+应用程序分区的Windows版本上, /parname 选项可以用于管理多个版本的同一应用程序,每个版本可以单独配置。
5. 注意事项与常见问题
5.1 REGASM.EXE注意事项
  • 强命名程序集 /codebase 选项仅适用于强命名程序集,使用简单命名程序集时会发出警告。在使用该选项时,需要确保程序集具有强名称。
  • 选项冲突 /regfile 不能与 /unregister /tlb 同时使用, /tlb 不能与 /regfile 同时使用,在使用时需要注意选项的兼容性。
  • Interop程序集处理 :在Interop程序集上使用 /tlb 选项会报错,需要确保类型库已注册。
5.2 AXIMP.EXE注意事项
  • 文件路径 :AXIMP.EXE不会搜索输入文件的路径,因此在命令行中未提供路径时,文件必须在当前目录中。
  • 选项依赖 /delaysign 选项需要与 /keyfile /keycontainer 一起使用,否则无法正常工作。
5.3 REGSVCS.EXE注意事项
  • 选项完整性 :REGSVCS.EXE的选项不能缩短,必须完全指定,并且所有选项必须在程序集文件名之前使用。
  • 应用程序创建与删除 /c /fc /u 选项只能一次使用一个,需要根据实际需求选择合适的选项。

操作步骤总结

6. REGASM.EXE操作步骤
  1. 打开命令提示符。
  2. 输入 regasm 命令,后跟程序集文件名和相应的选项,例如:
regasm C:\Path\To\MyAssembly.dll /codebase /tlb:MyAssembly.tlb
  1. 按回车键执行命令。
7. AXIMP.EXE操作步骤
  1. 打开命令提示符。
  2. 输入 aximp 命令,后跟类型库文件名和相应的选项,例如:
aximp C:\Path\To\MyTypeLib.tlb /out:AxMyComponent.dll /source
  1. 按回车键执行命令。
8. REGSVCS.EXE操作步骤
  1. 打开命令提示符。
  2. 输入 regsvcs 命令,先输入选项,再跟程序集文件名,例如:
regsvcs /appname:MyApp /tlb:MyAssembly.tlb C:\Path\To\MyAssembly.dll
  1. 按回车键执行命令。

mermaid流程图:REGSVCS.EXE操作流程

graph LR
    A[开始] --> B{选择操作}
    B -->|安装| C{选择应用程序处理方式}
    C -->|创建新应用| D[/使用/c选项/]
    C -->|使用现有应用| E[/使用/exapp选项/]
    C -->|查找或创建| F[/使用/fc选项/]
    D --> G{是否配置类型库}
    E --> G
    F --> G
    G -->|导出新类型库| H[/使用/tlb选项/]
    G -->|使用现有类型库| I[/使用/extlb选项/]
    H --> J[执行安装操作]
    I --> J
    B -->|卸载| K[/使用/u选项/]
    K --> L[执行卸载操作]
    J --> M[结束]
    L --> M

总结

REGASM.EXE、AXIMP.EXE和REGSVCS.EXE是.NET开发中重要的工具,它们分别在COM互操作性、ActiveX控件集成和COM+服务组件管理等方面发挥着重要作用。通过合理使用这些工具的选项,可以满足不同的开发需求。在使用过程中,需要注意选项的兼容性、文件路径和程序集的命名等问题,以避免出现错误。希望本文的介绍能帮助你更好地掌握这些工具的使用方法。

工具名称 主要功能 常用选项 注意事项
REGASM.EXE 注册和注销程序集,导出和注册类型库 /codebase /regfile /tlb 强命名程序集、选项冲突
AXIMP.EXE 将ActiveX控件类型库转换为.NET程序集 /source /out 文件路径、选项依赖
REGSVCS.EXE 安装和卸载包含服务组件的程序集到COM+目录 /appname /c /u 选项完整性、应用程序创建与删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值