Introducción al objeto BuildManager
El objeto BuildManager lo utilizan desarrolladores de otros proveedores para administrar archivos ejecutables portables (PE). Los archivos PE se compilan a partir de herramientas personalizadas que le indican al sistema de proyectos que su resultado se compilará en un archivo PE temporal.
El objeto BuildManager y las herramientas personalizadas se utilizan en el desarrollo de diseñadores visuales. Un diseñador de Visual Studio proporciona una interfaz gráfica de usuario para un archivo. Para crear la interfaz de usuario, el diseñador debe poder crear instancias de los tipos descritos en los archivos de los elementos de proyecto. Los archivos PE temporales procedentes de herramientas personalizadas son archivos de ensamblado que encapsulan tipos descritos en elementos de proyecto resultantes de una herramienta personalizada. Así, los diseñadores y las herramientas personalizadas suelen colaborar para generar la interfaz de usuario en tiempo de diseño. Un buen ejemplo de esto es la herramienta personalizada que genera clases a partir de un archivo XSD. En ocasiones, los diseñadores visuales deben crear instancias de las clases generadas, para detectar qué se ofrece a través de un conjunto de datos a fin de proporcionar una interfaz de usuario para habilitar la compatibilidad en tiempo de diseño en características como el enlace de datos.
Herramientas personalizadas
Una herramienta personalizada toma como entrada el contenido de un archivo de elemento de proyecto y genera un nuevo archivo de elemento de proyecto, que puede o no compilarse a continuación. La siguiente es una secuencia típica de eventos:
El usuario o un diseñador establece la propiedad CustomTool de un elemento de proyecto.
Se ejecuta la herramienta personalizada con el contenido del elemento de proyecto como entrada. Si la herramienta personalizada no reconoce la entrada, se informa al usuario de los errores, según lo determinado por la herramienta personalizada. Para obtener más información, vea RunCustomTool.
La herramienta personalizada se compila, junto con las referencias del proyecto, en un archivo ejecutable portable (PE temporal).
Nota Los resultados sólo se compilan en un archivo PE temporal si la herramienta personalizada está registrada con el valor de Registro GeneratesDesignTimeOutput establecido en 1.
Hay una descripción del archivo PE disponible si se llama al método BuildDesignTimeOutput del objeto BuildManager.
El resultado del archivo PE temporal que devuelve BuildDesignTimeOutput es el siguiente:
<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>
El objeto BuildManager
El objeto BuildManager proporciona acceso a los archivos PE temporales. La propiedad DesignTimeOutputMonikers es una matriz de todos los monikers (nombres) de archivos PE del proyecto. El sistema del proyecto asigna monikers de archivo PE según la jerarquía del proyecto. Por ejemplo, si hay un archivo de diseñador XML denominado SomeData.xsd en la carpeta Folder1 del proyecto Project1, que genera como resultado SomeData.cs, el moniker sería Project1\Folder1\SomeData.cs. El método BuildDesignTimeOutput toma como parámetro un moniker y devuelve una descripción del archivo PE en una cadena XML.
El evento DesignTimeOutputDeleted del objeto BuildManagerEventsClass se produce cuando se elimina del proyecto un archivo de elemento que genera un archivo PE. El evento DesignTimeOutputDirty se produce siempre que se ejecuta una herramienta personalizada (generador de un solo archivo) que genera un archivo PE temporal. Todos los generadores de un solo archivo de un proyecto se ejecutan cuando:
Se abre un proyecto inmediatamente después de una actualización.
El espacio de nombres de raíz ha cambiado.
Los generadores de un solo archivo se ejecutan individualmente cuando:
Se guarda el documento con un generador de un solo archivo (por ejemplo, un conjunto de datos).
El documento con un generador de un solo archivo está abierto y se modificó y el usuario cambia a un documento diferente dentro de Visual Studio.
Se cambia el nombre o se mueve un archivo del proyecto con un generador de un solo archivo.
El usuario ha cambiado simbólicamente el nombre de un tipo que se utiliza dentro del archivo de salida de un generador de un solo archivo. Por ejemplo, si el usuario invoca un cambio de nombre simbólico del tipo 'Type' y dicho tipo se utiliza en dataset1.vb (el resultado de un conjunto de datos), una vez que se complete la operación de cambio de nombre, se invocará el generador de un solo archivo.
Haga clic en el vínculo de la siguiente tabla para ver una demostración de cómo programar con el objeto BuildManager.
Para |
Vea |
---|---|
Mostrar los monikers de los archivos PE temporales y supervisar BuildManagerEvents. |
Cómo: Utilizar los objetos BuildManager y BuildManagerEvents |
Otros proveedores
También se puede tener acceso a gran parte de la funcionalidad del objeto BuildManager a través de la interfaz ITypeResolutionService. Sin embargo, si otros proveedores desean un diseñador completo deben utilizar la propiedad DesignTimeOutputMonikers y el método BuildDesignTimeOutput. Para obtener más información, vea Espectro de automatización de Visual Studio.