管线开发要求
更新:2007 年 11 月
为了使管线段和外接程序能够被发现和激活,管线段和外接程序必须要符合指定的范围、属性以及目录结构要求。
管线段和程序集
外接程序、协定和视图必须是公共的。适配器及其构造函数可以是内部的。
一般情况下,管线段包含在它们自己的程序集内,但您可以将下列段合并到同一程序集中:
外接程序的宿主视图和外接程序端视图。
宿主端适配器和外接程序端适配器。
仅在同时将视图合并到同一程序集中的情况下,才可以将宿主端适配器与外接程序端适配器合并在同一程序集中。
如果将管线一端的某个段与管线另一端上该段的对等项合并(例如合并外接程序的宿主视图与外接程序视图),则必须将该程序集部署到该段管线的两端。
如果没有将视图合并到同一程序集中,则可以将宿主与外接程序的宿主视图合并在同一程序集中。
属性要求
下面的管线段要求定义它们的类上具有属性:
外接程序需要 AddInAttribute。
协定需要 AddInContractAttribute。
外接程序视图需要 AddInBaseAttribute。
外接程序端适配器需要 AddInAdapterAttribute。
宿主端适配器需要 HostAdapterAttribute。
外接程序管线段的宿主视图不需要属性,因为该对象要传递给 AddInStore.FindAddIns(Type, String, array<String[]) 方法,因此不需要发现该对象。
下面的插图显示了具有其必需的属性的管线段。
具有必需的类型属性的外接程序模型
管线目录要求
为了使 .NET Framework 发现管线段并激活外接程序,必须将管线段放在指定的目录中。需要使用指定的目录名,但它们不区分大小写。唯一没有指定的名称是管线根目录的名称(提供给发现方法)以及包含外接程序的子目录的名称。所有指定的段名称必须是管线根目录下位于同一级别的子目录。
下面的插图显示了这些目录要求。
外接程序开发所必需的目录
下表介绍了必需的目录结构。
目录 |
说明 |
---|---|
管线根目录 |
包含管线段的子目录的目录。此目录没有必需的名称并且可以位于任何位置。 示例:..\Pipeline |
AddIns |
可选。包含一个或多个子目录的目录,每个子目录中包含一个外接程序。 此目录必须命名为 AddIns。 示例:..\Pipeline\AddIns 可以将外接程序放在系统中的其他位置。 |
AddInSideAdapters |
包含外接程序端适配器程序集的目录。 此目录必须命名为 AddInSideAdapters。 示例:..\Pipeline\AddInSideAdapters |
AddInViews |
包含外接程序视图程序集的目录。 此目录必须命名为 AddInViews。 示例:..\Pipeline\AddInViews |
Contracts |
包含协定程序集的目录。 此目录必须命名为 Contracts。 示例:..\Pipeline\Contracts |
HostSideAdapters |
包含宿主端适配器程序集的目录。 此目录必须命名为 HostSideAdapters。 示例:..\Pipeline\HostSideAdapters |
AddInStore.Update 和 AddInStore.Rebuild 方法的重载采用一个表示管线根目录的字符串变量或一个 PipelineStoreLocation 值。这些方法发现系统中可用的外接程序和管线段并维护它们在信息存储区中缓存的信息。有关发现方法的更多信息,请参见外接程序的发现。
宿主应用程序和外接程序管线段的宿主视图通常部署在同一目录中,该目录可以位于任何位置。宿主应用程序需要一个对外接程序段的宿主视图的引用,该外接程序段表示要激活的外接程序。
管线可以在任何位置,可以在 Visual Studio 解决方案的目录结构内。必须将管线段复制到管线中管线段的目录下。管线目录及其子目录可用于包含多个管线。有关各种管线方案的更多信息,请参见外接程序管线方案。
位于其他位置的外接程序
不需要将外接程序放在管线目录结构中。如果外接程序不在管线目录结构中,则必须调用将外接程序的包含目录路径作为参数的 AddInStore.UpdateAddIns 方法或 RebuildAddIns 方法。
还必须在调用 AddInStore.FindAddIns 方法时包含 addInPaths 参数。
如果宿主应用程序知道其外接程序的路径和完整类型名,它可以使用 FindAddIn 方法查找特定的外接程序,这样就避免了管线目录结构上的查询。但是,管线目录结构仍然是必需的。
Visual Studio 中的管线段引用
在项目中添加对另一管线段(例如需要对协定段的引用的外接程序端适配器)的引用时,请对该段的项目而非其程序集进行引用。在本示例中,将对协定项目进行引用。项目引用阻止将被引用程序集部署到管线上,这种部署可以导致冲突。不在本地复制文件也可以防止冲突。
添加项目引用
在“解决方案资源管理器”中右击“引用”文件夹,再选择“添加引用”。
在“项目”选项卡上选择所需的项目,再单击“确定”。
在“引用”文件夹之下单击刚添加的项目引用。
在该引用的“属性”中将“复制本地”设置为“False”。
必需的引用
下表列出了需要对 System.AddIn.dll 和 System.Contract.dll 的程序集引用的管线段。一些段还需要对其他已编译段的引用。
管线段 |
程序集和项目引用 |
命名空间和类型引用 |
---|---|---|
协定 |
System.AddIn.dll System.AddIn.Contract.dll |
System.AddIn.Pipeline System.AddIn.Contract |
外接程序视图 |
System.AddIn.dll |
System.AddIn.Pipeline |
外接程序端适配器 |
System.AddIn.dll System.AddIn.Contract.dll 外接程序视图段 协定段 |
System.AddIn.Pipeline |
宿主端适配器 |
System.AddIn.dll System.AddIn.Contract.dll 宿主视图段 协定段 |
System.AddIn.Pipeline |
宿主 |
System.AddIn.dll 宿主视图段 |
System.AddIn.Hosting 宿主视图 |
外接程序 |
System.AddIn.dll 外接程序视图段 |
System.AddIn 外接程序视图 |
外接程序的宿主视图没有引用要求,但宿主应用程序需要引用。
在 Visual Studio 中部署到管线
在 Visual Studio 中,可以通过更改输出生成路径在管线目录结构中生成管线段。
在 Visual Studio 中部署到管线
从“工具”菜单中指向项目的“属性”,然后选择“生成”选项卡。
将管线段的“输出路径”更改为管线目录结构中它们各自的目录。
宿主应用程序和宿主视图通常部署在同一目录中。管线目录可以在任何位置,但通常与宿主应用程序位于同一目录中。