开发者

How to access the MSBuild 's properties list when coding a custom task?

开发者 https://www.devze.com 2022-12-29 10:21 出处:网络
I need to write a custom task that print all the defined properties (the non-reserved ones). So in my C# 开发者_如何学Gocode, I wanna access to the properties list of MSBuild engine and I don\'t know

I need to write a custom task that print all the defined properties (the non-reserved ones). So in my C# 开发者_如何学Gocode, I wanna access to the properties list of MSBuild engine and I don't know how. Please help.


The previous example will lock you project file. This may cause problems. For example if you call the task several times in the same project file. Here is improved code:

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


Using .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;
        }
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号