2010-05-05 5 views

risposta

3

Utilizzando .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

L'esempio precedente si blocca si proietta file. Ciò potrebbe causare problemi. Ad esempio se si chiama l'attività più volte nello stesso file di progetto. Ecco il codice migliorato:

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; 
     } 
    } 
    } 
} 
Problemi correlati