如何在自定义任务中访问当前项目上下文?

时间:2012-05-06 22:58:49

标签: c# .net msbuild

如何在MSBuild中的自定义任务中访问当前的Project上下文?起初好像ProjectCollection上的GlobalProjectCollection引用允许访问,但这似乎是空的,至少从命令行运行MSBuild时。

我现在可以通过以下方式获取基于当前项目文件的新Project实例:

List projectAssemblies = new List();
using (XmlReader projectFileReader =
    XmlReader.Create(this.BuildEngine.ProjectFileOfTaskNode))
{
    Project project = new Project(projectFileReader);
    foreach (ProjectItem item in project.AllEvaluatedItems)
    {
      ... woo hoo ...
    }
}

但这似乎很麻烦。如何才能访问调用我的任务的项目?

1 个答案:

答案 0 :(得分:5)

你做不到。 MSBuild是专门设计的,因此单个任务只能访问您明确传递给任务的参数,而不能访问任何其他任务。这使得MSBuild文件更易于阅读,因为您知道每个任务仅受您在调用此任务时所指定的内容的影响。

您拥有的代码不是创建项目的副本,而是创建新实例,因此您不应期望属性相同。例如,当前正在执行的项目的实例(从中调用您的任务)可以从命令行覆盖属性,或者在构建项目的过程中更改属性,而新创建的项目在首先具有属性的默认值MSBuild引擎传递文件。