2012-05-06 12 views
5

¿Cómo accedo al contexto actual del proyecto dentro de una tarea personalizada en MSBuild? Al principio, parecía como si la referencia GlobalProjectCollection en ProjectCollection permitiera el acceso, pero parece estar vacía, al menos cuando se ejecuta MSBuild desde la línea de comandos.¿Cómo accedo al contexto actual del proyecto dentro de una tarea personalizada?

puedo conseguir Actualmente nueva instancia de Project con sede fuera del archivo de proyecto actual de la siguiente manera:

List projectAssemblies = new List(); 
using (XmlReader projectFileReader = 
    XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode)) 
{ 
    Project project = new Project(projectFileReader); 
    foreach (ProjectItem item in project.AllEvaluatedItems) 
    { 
     ... woo hoo ... 
    } 
} 

pero parece como un montón de problemas. ¿Cómo puedo acceder al proyecto desde el que se invoca mi tarea?

Respuesta

5

No puede. MSBuild se diseñó específicamente para que las tareas individuales solo tengan acceso a los parámetros que pasaste explícitamente a la tarea, y nada más. Eso hace que los archivos de MSBuild sean más fáciles de leer, ahora que sabe que cada tarea solo se ve afectada por lo que especificó cuando llamó a esta tarea.

El código que tiene no está creando una copia del proyecto, está creando una nueva instancia, por lo que no debe esperar que las propiedades sean las mismas. Por ejemplo, una instancia del proyecto actualmente en ejecución (desde donde se llama a su tarea) podría tener propiedades anuladas desde la línea de comando o cambiadas a lo largo del desarrollo del proyecto, mientras que su proyecto recién creado tendría valores predeterminados de las propiedades después del primero El motor de MSBuild pasa por el archivo.

+1

Tiene razón. Incluso la tarea tiene referencias de su proyecto contenedor pasado a ella, en lugar de hacer referencia a algún objeto padre desde dentro. Como esto es lo que estoy tratando de hacer, buscaré derivar referencias de manera similar a esta tarea central. – bojolais

+0

¿Qué pasa con las propiedades globales? ¿Se puede acceder a esos dentro de una tarea? – Irek

Cuestiones relacionadas