2010-05-05 12 views

Respuesta

3

El uso de .NET 4:

using Microsoft.Build.Evaluation; 
using Microsoft.Build.Utilities; 

namespace MSBuildTasks 
{ 
    public class GetAllProperties : Task 
    { 
    public override bool Execute() 
    { 
     Project project = new Project(BuildEngine.ProjectFileOfTaskNode); 
     foreach (ProjectProperty evaluatedProperty in project.AllEvaluatedProperties) 
     { 
     if (!evaluatedProperty.IsEnvironmentProperty && 
      !evaluatedProperty.IsGlobalProperty && 
      !evaluatedProperty.IsReservedProperty) 
     { 
      string name = evaluatedProperty.Name; 
      string value = evaluatedProperty.EvaluatedValue; 
     } 

     // Do your stuff 
     } 

     return true; 
    } 
    } 
} 
6

El ejemplo anterior se bloqueará el archivo del proyecto. Esto puede causar problemas. Por ejemplo, si llama a la tarea varias veces en el mismo archivo de proyecto. Aquí está el código mejorado:

using System.Xml; 
using Microsoft.Build.Evaluation; 
using Microsoft.Build.Utilities; 

namespace MSBuildTasks 
{ 
    public class GetAllProperties : Task 
    { 
    public override bool Execute() 
    { 
     using (XmlReader projectFileReader = XmlReader.Create(BuildEngine.ProjectFileOfTaskNode)) 
     { 
     Project project = new Project(projectFileReader); 

     foreach (ProjectProperty property in project.AllEvaluatedProperties) 
     { 
      if (property.IsEnvironmentProperty) continue; 
      if (property.IsGlobalProperty) continue; 
      if (property.IsReservedProperty) continue; 

      string propertyName = property.Name; 
      string propertyValue = property.EvaluatedValue; 

      // Do your stuff 
     } 

     return true; 
     } 
    } 
    } 
} 
Cuestiones relacionadas