定義済みのすべてのプロパティ (予約されていないもの) を出力するカスタム タスクを作成する必要があります。したがって、私の C# コードでは、MSBuild エンジンのプロパティ リストにアクセスしたいのですが、その方法がわかりません。助けてください。
3185 次
2 に答える
7
前の例では、プロジェクト ファイルがロックされます。これにより、問題が発生する場合があります。たとえば、同じプロジェクト ファイルでタスクを数回呼び出すとします。改善されたコードは次のとおりです。
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;
}
}
}
}
于 2010-11-25T21:43:29.983 に答える
3
.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;
}
}
}
于 2010-05-05T12:22:43.597 に答える