정의 된 모든 속성 (예약되지 않은 속성)을 인쇄하는 사용자 지정 작업을 작성해야합니다. 그래서 내 C# 코드에서 MSBuild 엔진의 속성 목록에 액세스하려는 및 어떻게 모르겠다. 도와주세요. .NET 4를 사용사용자 지정 작업을 코딩 할 때 MSBuild의 속성 목록에 액세스하는 방법?
5
A
답변
3
는 :
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
앞의 예는 파일을 프로젝트 잠 깁니다. 이로 인해 문제가 발생할 수 있습니다. 예를 들어, 동일한 프로젝트 파일에서 여러 번 작업을 호출하는 경우. 개선 된 코드는 다음과 같습니다.
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;
}
}
}
}