如何在自定义任务中访问当前项目上下文
本文关键字:项目 上下文 访问 自定义 任务 | 更新日期: 2023-09-27 18:33:31
如何在 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 ...
}
}
但这似乎很麻烦。如何才能访问从中调用我的任务的项目?
你不能。
MSBuild 是专门设计的,以便单个任务只能访问显式传递给任务的参数,而不能访问其他参数。这使得 MSBuild 文件更易于阅读,因为您知道每个任务仅受调用此任务时指定的内容的影响。
您拥有的代码不是创建项目的副本,而是创建新实例,因此不应期望属性相同。例如,当前正在执行的项目的实例(从中调用任务)的属性可以从命令行重写或在生成项目的过程中进行更改,而新创建的项目在第一个 MSBuild 引擎通过文件后将具有属性的默认值。