BuildManager 对象介绍

第三方开发人员使用 BuildManager 对象来管理可迁移可执行 (PE) 文件。 PE 文件是从自定义工具进行编译的,这些自定义工具向项目系统指出其输出将被编译到临时 PE 中。

BuildManager 对象和自定义工具用于开发可视化设计器。 Visual Studio 中的设计器提供文件的图形用户界面。 为了创建用户界面,设计器可能需要具备实例化项目项文件中所描述的类型的能力。 来自自定义工具的临时 PE 文件为程序集文件,它们封装作为自定义工具输出的项目项中所描述的类型。 因此,设计器和自定义工具常常一起工作来生成设计时用户界面。 从 XSD 文件生成类的自定义工具就是此类工具的一个很好的示例。 为了发现通过数据集提供的内容,为了提供用于启用数据绑定等功能的设计时支持的 UI,可视化设计器有时需要实例化生成的类。

自定义工具

自定义工具以项目项文件的内容作为输入,并生成一个新的项目项文件,随后可能会也可能不会编译该文件。 典型的事件序列为:

  1. 用户或设计器设置项目项的 CustomTool 属性。

  2. 自定义工具以项目项内容作为输入而运行。 如果自定义工具不能识别输入,则按自定义工具所确定的情况向用户报告错误。 有关更多信息,请参见 RunCustomTool

  3. 自定义工具输出与项目引用一起被编译到一个可迁移可执行文件(也称为临时 PE)中。

    提示

    如果注册自定义工具时 GeneratesDesignTimeOutput 注册表值设置为 1,那么此输出仅编译到某个临时 PE 中。

  4. 可通过调用 BuildManager 对象的 BuildDesignTimeOutput 方法来获得此 PE 的说明。

    BuildDesignTimeOutput 返回的临时 PE 输出如下所示:

    <root>
        <Application private_binpath="full output path to temporary PE,
    excluding the name"/>
        <Assembly
            codebase = "filename of the temporary PE, e.g., sample.dll""
            name = "name of the temporary PE == filename without the 
    extension, e.g., "sample""
            version = "always "0.0.0.0""
            snapshot_id = "unique ID number" 
            replaceable = "currently unused; always set to "True""
        />
    </root>
    

BuildManager 对象

BuildManager 对象提供对临时 PE 的访问。 DesignTimeOutputMonikers 属性是项目中所有 PE 名字对象(名称)的数组。 项目系统基于项目层次结构分配 PE 名字对象。 例如,如果 Project1 的 Folder1 中有一个 XML 设计器文件 SomeData.xsd,它生成输出 SomeData.cs,那么名字对象将为 Project1\Folder1\SomeData.cs。 BuildDesignTimeOutput 方法将名字对象作为参数,并以 XML 字符串的形式返回此 PE 的说明。

当从项目中删除生成某个 PE 的项目项文件时,将引发 BuildManagerEventsClass 对象的 DesignTimeOutputDeleted 事件。 每当运行生成临时 PE 的自定义工具(也称作单文件生成器)时,都会引发 DesignTimeOutputDirty 事件。 在如下情况下,将运行项目中所有的单文件生成器:

  • 升级后立刻打开某个项目。

  • 已更改根命名空间。

在如下情况下,将运行单个的单文件生成器:

  • 保存具有单文件生成器的文档(例如数据集)。

  • 具有单文件生成器的文档已打开且已更新,并且用户切换到 Visual Studio 中的其他文档。

  • 具有单文件生成器的项目中的某个文件被重命或被移动。

  • 用户用符号重命名单文件生成器的输出文件中使用的类型。 例如,如果用户对“Type”类型调用符号重命名且该类型 ID 用于 dataset1.vb(为数据集的输出),则重命名操作完成后将调用单文件生成器。

单击下表中的链接,查看如何使用 BuildManager 对象进行编程的演示。

若要

请参见

显示临时 PE 文件的名字对象,并监视 BuildManagerEvents

如何:使用 BuildManager 和 BuildManagerEvents 对象

第三方供应商

还可以通过 ITypeResolutionService 接口访问 BuildManager 对象的大多数功能。 然而,需要综合性设计器的第三方供应商必须使用 DesignTimeOutputMonikers 属性和 BuildDesignTimeOutput 方法。 有关更多信息,请参见 Visual Studio 自动化的范围