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

boj*_*ais 5 .net c# msbuild

如何在MSBuild中的自定义任务中访问当前项目上下文?起初,似乎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 ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

sev*_*tov 5

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

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