我如何自定义任务中访问当前项目环境?(How do I access current Project

2019-09-17 02:01发布

我如何在MSBuild的自定义任务中访问当前项目环境? 起初,它看来好像对GlobalProjectCollection参考ProjectCollection将允许访问,但是这似乎是空的,从命令行运行的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 ...
    }
}

但它只是似乎是一个很大的麻烦。 我如何才能获得访问从我的任务就是调用这个项目?

Answer 1:

你不能。 MSBuild的专门设计,使个人的任务只能访问您明确传递给任务的参数,而不是其他。 这使得MSBuild的文件更容易阅读,现在你知道每个任务只受你的​​specidied当你叫这个任务。

你的代码是不是创建项目的副本,它正在创造一个新的实例,所以你不应该指望性质是相同的。 例如,当前正在执行的项目的实例(从那里你的任务是从所谓的)可能具有命令行重写或沿着你的项目的构建方式改变的属性,而新创建的项目将第一后有属性的默认值MSBuild引擎通过文件。



文章来源: How do I access current Project context within a custom Task?
标签: c# .net msbuild