如何访问MSBuild';对自定义任务进行编码时的属性列表?

如何访问MSBuild';对自定义任务进行编码时的属性列表?,msbuild,msbuild-task,Msbuild,Msbuild Task,我需要编写一个自定义任务来打印所有已定义的属性(非保留属性)。所以在我的C代码中,我想访问MSBuild引擎的属性列表,但我不知道如何访问。请帮助。使用.NET 4: 使用Microsoft.Build.Evaluation; 使用Microsoft.Build.Utilities; 命名空间MSBuildTasks { 公共类GetAllProperties:任务 { 公共重写bool Execute() { 项目=新项目(BuildEngine.ProjectFileOfTaskNode);

我需要编写一个自定义任务来打印所有已定义的属性(非保留属性)。所以在我的C代码中,我想访问MSBuild引擎的属性列表,但我不知道如何访问。请帮助。

使用.NET 4:

使用Microsoft.Build.Evaluation;
使用Microsoft.Build.Utilities;
命名空间MSBuildTasks
{
公共类GetAllProperties:任务
{
公共重写bool Execute()
{
项目=新项目(BuildEngine.ProjectFileOfTaskNode);
foreach(项目中的ProjectProperty evaluatedProperty.AllEvaluatedProperties)
{
如果(!evaluatedProperty.IsEnvironmentProperty)&&
!evaluatedProperty.IsGlobalProperty&&
!evaluatedProperty.IsReservedProperty)
{
字符串名称=evaluatedProperty.name;
字符串值=evaluatedProperty.EvaluatedValue;
}
//做你的事
}
返回true;
}
}
}

前面的示例将锁定您的项目文件。这可能会引起问题。例如,如果在同一项目文件中多次调用该任务。下面是改进的代码:

使用System.Xml;
使用Microsoft.Build.Evaluation;
使用Microsoft.Build.Utilities;
命名空间MSBuildTasks
{
公共类GetAllProperties:任务
{
公共重写bool Execute()
{
使用(XmlReader projectFileReader=XmlReader.Create(BuildEngine.ProjectFileOfTaskNode))
{
项目=新项目(projectFileReader);
foreach(project.AllEvaluatedProperties中的ProjectProperty属性)
{
如果(property.IsEnvironmentProperty)继续;
如果(property.IsGlobalProperty)继续;
如果(property.IsReservedProperty)继续;
字符串propertyName=property.Name;
字符串propertyValue=property.EvaluatedValue;
//做你的事
}
返回true;
}
}
}
}