5

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

我目前可以通过以下方式从当前项目文件中获取新的项目实例:

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

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

4

1 回答 1

5

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

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

于 2012-05-07T03:22:58.890 回答