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

2024-01-04

如何在 MSBuild 中的自定义任务中访问当前项目上下文?起初,它看起来好像是 GlobalProjectCollection 参考项目集合 http://msdn.microsoft.com/en-us/library/microsoft.build.evaluation.projectcollection.aspx将允许访问,但这似乎是空的,至少在从命令行运行 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 ...
    }
}

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


你不能。 MSBuild 经过专门设计,以便各个任务只能访问您显式传递给该任务的参数,而不能访问其他任何内容。现在您知道每个任务仅受调用该任务时指定的内容影响,这使得 MSBuild 文件更易于阅读。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问自定义任务中的当前项目上下文? 的相关文章

随机推荐