外接程序注册

更新:2007 年 11 月

创建了外接程序后,必须先向 Visual Studio 注册此外接程序,才可以在外接程序管理器中激活它。在 Visual Studio 的先前版本中,这是通过使用注册表项实现的,但目前是通过使用 XML 文件实现的。

说明:

使用外接程序向导创建外接程序时,会自动创建一个 .Addin 文件。只有在需要手动创建或编辑外接程序的注册文件时,才会用到下面的信息。

在 Visual Studio .NET 2002 和 Visual Studio .NET 2003 中,要求使用程序集注册工具 (regasm.exe) 在 Windows 中将外接程序程序集注册为 COM 组件。另外,必须先使用 Windows 注册表中的项向 Visual Studio 注册外接程序,此外接程序才会出现在“外接程序管理器”中。

从 Visual Studio 2005 开始,这些步骤已有所改变。不再需要使用 regasm 向 Windows 注册 .NET 程序集。而只需将程序集 .DLL 文件与文件扩展名为 .Addin 的 XML 文件一起放入特定的目录(如本主题后面所述)。此 XML 文件描述了 Visual Studio 在外接程序管理器中显示外接程序所需的信息。在 Visual Studio 启动时,它会查找 .Addin 文件位置(见下表),获取可用的 .Addin 文件。如果找到相应文件,则会读取 XML 文件并向“外接程序管理器”提供在单击外接程序进行启动时所需的信息。

这种简化的注册方法允许对托管代码外接程序采用 XCopy 式的安装方法。如果将所有文件放入正确的位置,外接程序就可以正常运行。此外,这种方法使用带有注释的 XML 来定义外接程序的注册设置,使信息变得比注册表项更易于理解和编辑。

.Addin 文件

扩展名为 .Addin 的新 XML 文件可替换旧的外接程序注册表设置。外接程序向导完成后,会自动创建 .Addin 文件的两个副本:

.Addin 文件位置

.DLL 文件位置

说明

外接程序文件夹

(例如,\Documents and Settings\All Users\Shared Documents\Visual Studio 2008\Addins)

- 或 -

\Documents and Settings\<用户名>\My Documents\Visual Studio 2008\Addins)

项目调试文件夹

(例如,\My Documents\Visual Studio Projects\MyAddin1\MyAddin1\bin)

用于在调试环境中运行外接程序。应该始终指向当前生成配置的输出路径。

根项目文件夹

(例如,\My Documents\Visual Studio\Projects\MyAddin1)

本地路径 (MyAddin1.dll)

用于部署外接程序项目。将其包含在项目中以方便编辑,并使用本地路径安装以进行 XCopy 式部署。

.Addin XML 文件拆分为下面的标记部分:

设置

说明

宿主应用程序

(必选。) 指定可以加载外接程序的应用程序的名称和版本号。

程序集

(必选。) 指定外接程序的二进制形式的位置。该字段可以设置为本地路径、网络路径或有效的 URL。

完整的类名称

(必选。) 指定用于连接到外接程序的类的名称。

加载行为

(可选)定义是在启动时加载外接程序还是手动加载外接程序。

命令预加载

(可选)指定外接程序的预加载状态,即外接程序是否应该使用一种方法(如 Commands.AddNamedCommand)来创建自己的用户界面 (UI)。

命令行安全

(可选)指定外接程序兼容的 Visual Studio 模式,如,仅支持命令行、仅支持集成开发环境 (IDE) 或同时支持两者。

下面是每种设置的详细信息。

宿主应用程序

宿主应用程序的 <Name> 标记包含应用程序的名称。这是在应用程序的标题栏中显示的名称或者由 DTE.Name 返回的名称。例如,对于 Visual Studio,标记将包含“Microsoft Visual Studio”;而对于宏 IDE,标记将包含“Microsoft Visual Studio Macros”。

每个 .Addin 文件可以有多个宿主应用程序值。每个值必须在 <HostApplication> 标记内用 <Name> 标记括起来。除了 <Name> 标记之外,每个 <HostApplication> 标记还必须包含用 <Version> 标记括起来的应用程序的版本号。例如:

   <HostApplication>
      <!-- First Host App name (required). -->
      <Name>Microsoft Visual Studio</Name>
      <Version>9.0</Version>
   </HostApplication>
   <HostApplication>
      <!-- An additional supported program/version. -->
      <Name>Microsoft Visual Studio Macros</Name>
      <Version>9.0</Version>
   </HostApplication>

或者可以指定星号 (*),表示任何版本的 Visual Studio 的 <Version> 值。有关这些标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

友好名称

<FriendlyName> 标记位于 <Addin> 标记下,它为“外接程序管理器”中的外接程序指定将在“可用外接程序”列中显示的字符串。下面是有关其用法的示例:

   <FriendlyName>My New Super Addin</FriendlyName>

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

说明

<Description> 标记位于 <Addin> 标记下,它为“外接程序管理器”中的外接程序指定将在“说明”框中显示的字符串。下面是有关其用法的示例:

   <Description>This add-in will change your life!</Description>

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

“关于”框的详细信息

创建外接程序时,如果选择了生成“帮助”中“关于”对话框的设置的选项,则会将该标记添加到 .Addin 文件中。该标记指定将在 Visual Studio“帮助”的“关于”对话框中为外接程序显示的文本。下面是有关其用法的示例:

   <AboutBoxDetails>For add-in support, call 1-800-xxx-
     xxxx.</AboutBoxDetails>

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

“关于”图标数据

创建外接程序时,如果选择了生成“帮助”中“关于”对话框的设置的选项,则会将该标记添加到 .Addin 文件中。该标记包含二进制数据,可用来指定将在 Visual Studio“帮助”的“关于”对话框中为外接程序显示的图标。下面是有关其用法的示例:

<AboutIconData>0000010006 . . . FFFF0000</AboutIconData>

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

程序集

<Assembly> 标记位于 <Addin> 标记下,用来指定外接程序二进制文件的位置。此标记可以设置为本地路径、网络路径 ("file")、注册程序集名称 ("assembly") 或有效的 URL ("url")。有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

  • 下面是 URL 外接程序位置的示例。在这种情形中,src 参数设置为 url,以指示外接程序 DLL 的基于 Web 的位置:

    <Assembly src="url">http://somewebsite.com/MyAddin4.dll</Assembly>
    
  • 下面是本地路径位置的示例。在这种情形中,src 参数设置为 file,以指示外接程序 DLL 的本地位置:

    <Assembly src="file">C:\Documents and Settings\jdoe\Application Data\Microsoft\Visual Studio\8.0\AddIns\MyAddin4.dll</Assembly>
    
  • 下面是本地路径的示例。在这种情形中,src 参数设置为 assembly,以指示外接程序 DLL 的基于 Web 的位置:

    <Assembly src="assembly">BookshelfDefineAddin</Assembly>
    

完整的类名称

<FullClassName> 标记指定用于连接到外接程序的类的全名,此名称包含带有类的命名空间。下面是一个使用方法的示例:

    <FullClassName>MyAddin4.Connect</FullClassName>

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

加载行为

<LoadBehavior> 标记定义外接程序是在 IDE 启动时自动加载还是手动启动。<LoadBehavior> 标记位于 <Addin> 标记下。下面是一个使用方法的示例:

    <LoadBehavior>1</LoadBehavior>

虽然 <LoadBehavior> 标记的使用是可选的,但建议使用此标记明确定义外接程序何时加载。

说明

0

在 IDE 启动时不加载外接程序,而必须手动加载。

1

在 IDE 启动时自动加载外接程序。

4

在从命令行用生成开关 (devenv /build) 启动 devenv 时加载外接程序。

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

命令预加载

<CommandPreload> 标记指定是否必须预加载外接程序。将 .Addin 文件放在磁盘上后,首次启动 Visual Studio 时,预加载将加载外接程序。下面是一个使用方法的示例:

    <CommandPreload>1</CommandPreload>

此标记允许指定在 Visual Studio 启动后必须加载外接程序。它使外接程序有机会创建所需的用户界面元素(如命令栏按钮)或者执行其他仅首次需要的初始化任务(如创建默认的外接程序设置)。然后将立即卸载此外接程序,直到用户执行此外接程序创建的一个命令为止,在 IDE 所有后续的实例中此命令将在需要时加载此外接程序。

说明

0

在用户通过外接程序管理器启动外接程序或者将外接程序设置为在启动时加载之前,不会加载此外接程序。

1

将 .Addin XML 文件放在磁盘上后,首次启动 Visual Studio 时,将会自动加载外接程序。

可以检查实现的 OnConnection 方法,以查看使用第二个参数为 OnConnection 指定的连接类型是否为 ext_cm_UISetup。如果是,则可以使用 AddNamedCommandAddControl 方法执行您需要的任何命令安排。

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

命令行安全

可选的 <CommandLineSafe> 标记指示外接程序是否已设计为在由 devenv 命令行启动时(如执行命令行生成或相似的操作时)避免显示某个用户界面。(可以通过选择“外接程序向导”中的“我的外接程序从不提供模式用户界面”选项来完成此操作。) 此外,它还指定外接程序兼容的 Visual Studio 模式,如,仅支持命令行或仅支持 IDE。下面是一个使用方法的示例:

    <CommandLineSafe>0</CommandLineSafe>

说明

0

指定外接程序不是命令行安全的并且会显示用户界面。

1

指定外接程序是命令行安全的并且不会显示用户界面。

有关此标记的层级位置,请参见本主题稍后部分的“示例 .Addin XML 文件”一节。

示例 .Addin XML 文件

下面是完整的 .Addin XML 文件的示例。它显示了上述标记的层次结构和位置。

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<Extensibility 
  xmlns="https://schemas.microsoft.com/AutomationExtensibility">
    <HostApplication>
        <Name>Microsoft Visual Studio Macros</Name>
        <Version>9.0</Version>
    </HostApplication> 
    <HostApplication>
        <Name>Microsoft Visual Studio</Name>
        <Version>9.0</Version>
    </HostApplication>
    <Addin>
        <FriendlyName>My great new add-in.</FriendlyName>
        <Description>This add-in does it all.</Description>
        <AboutBoxDetails>Copyright 2008.</AboutBoxDetails>
        <AboutIconData>0000 . . . FFFF0000</AboutIconData>
        <Assembly>MyNewAddin.dll</Assembly>
        <FullClassName>MyNewAddin.Connect</FullClassName>
        <LoadBehavior>1</LoadBehavior>
        <CommandPreload>1</CommandPreload>
        <CommandLineSafe>0</CommandLineSafe>
    </Addin>
</Extensibility>

请参见

任务

如何:使用外接程序管理器控制外接程序

如何:创建外接程序

演练:创建向导

概念

自动化对象模型图表

参考

Visual Studio 命令和开关

其他资源

创建外接程序和向导