如何在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 ...
}
}
但这似乎很麻烦。如何才能访问调用我的任务的项目?
答案 0 :(得分:5)
你做不到。 MSBuild是专门设计的,因此单个任务只能访问您明确传递给任务的参数,而不能访问任何其他任务。这使得MSBuild文件更易于阅读,因为您知道每个任务仅受您在调用此任务时所指定的内容的影响。
您拥有的代码不是创建项目的副本,而是创建新实例,因此您不应期望属性相同。例如,当前正在执行的项目的实例(从中调用您的任务)可以从命令行覆盖属性,或者在构建项目的过程中更改属性,而新创建的项目在首先具有属性的默认值MSBuild引擎传递文件。