向视觉设计器公开类型

Visual Studio 必须有权在设计时访问类和类型定义,才能显示视觉设计器。 类从一组预定义的程序集加载,这些程序集包括当前项目的完整依赖项集(引用及其依赖项)。 可视化设计器可能还需要访问自定义工具生成的文件中定义的类和类型。

Visual Basic 和 Visual C# 项目系统支持通过临时可移植可执行文件(临时 PE)访问生成的类和类型。 自定义工具生成的任何文件都可以编译为临时程序集,以便可以从这些程序集加载类型并公开给设计器。 每个自定义工具的输出都编译为单独的临时 PE,并且此临时编译的成功或失败取决于是否可以编译生成的文件。 尽管项目可能整体未生成,但单个临时 PES 仍可供设计人员使用。

项目系统完全支持跟踪自定义工具的输出文件的更改,前提是这些更改是运行自定义工具的结果。 每次运行自定义工具时,都会生成新的临时 PE,并向设计器发送相应的通知。

注意

由于临时程序可执行文件生成文件在后台发生,因此如果编译失败,则不会向用户报告任何错误。

利用临时 PE 支持的自定义工具必须遵循以下规则:

  • GeneratesDesignTimeSource 必须在注册表中设置为 1。

    没有此设置,就不进行程序可执行文件编译。

  • 生成的代码必须与全局项目设置具有相同的语言。

    无论自定义工具在注册表中DefaultExtension将 GeneratesDesignTimeSource 设置为 1 时请求的扩展,都会编译临时 PE。 该扩展不需要为 .vb.cs.jsl;可以是任何扩展。

  • 自定义工具生成的代码必须有效,并且它必须仅使用项目中存在的引用集自行编译,该代码在 Generate 完成执行时。

    编译临时 PE 时,提供给编译器的唯一源文件是自定义工具输出。 因此,使用临时 PE 的自定义工具必须生成可以独立于项目中其他文件编译的输出文件。