在MSBuild中从文件中读取依赖项

时间:2014-09-05 15:00:20

标签: msbuild

MSBuild非常适合检测某个给定文件何时需要重新构建,因为它已经更改。它是否有可能读取文件的内容以确定它依赖于什么? (我正在考虑// referencesusing@import语句。

我有一个用于较少文件的功能构建目标(一种方便的方式来重用我编写的NancyFX静态资源约定构建器)。但是当我从我真正感兴趣的文件上游更改文件时,没有任何反应,因为MSBuild不知道依赖项。

您可以指定更复杂的依赖关系,如MSBuild中那样吗?

1 个答案:

答案 0 :(得分:2)

如果您有要处理的输入文件列表,以及相关的依赖文件列表,例如此项目定义:

<ItemDefinitionGroup>
  <XFiles>
    <OutputFile>$(OutDir)%(RelativeDir)%(Filename).xprocessed</OutputFile>
    <Dependency>%(RelativeDir)%(Filename)-SupportFile.xdep</Dependency>
  </XFiles>
</ItemDefinitionGroup>

您可以指定目标将在目标标题中输出的文件的依赖关系,如下所示:

<Target Name="ProcessXFilesAndDependencies"
        Inputs="@(XFiles);@(XFiles->'%(Dependency)')"
        Outputs="@(XFiles->'%(OutputFile)')">

  <!-- process stuff -->

</Target>

这将考虑文件的状态和构建的依赖文件。

如果我没有弄错的话,以这种方式设置目标会导致在所有情况下对其进行评估。由于输入和输出文件之间没有1:1的关系(输出文件总是会少一些),MSBuild无法跳过此目标。这将导致所有构建的开销很小,但通常可以忽略不计。