MSBuild非常适合检测某个给定文件何时需要重新构建,因为它已经更改。它是否有可能读取文件的内容以确定它依赖于什么? (我正在考虑// references
或using
或@import
语句。
我有一个用于较少文件的功能构建目标(一种方便的方式来重用我编写的NancyFX静态资源约定构建器)。但是当我从我真正感兴趣的文件上游更改文件时,没有任何反应,因为MSBuild不知道依赖项。
您可以指定更复杂的依赖关系,如MSBuild中那样吗?
答案 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无法跳过此目标。这将导致所有构建的开销很小,但通常可以忽略不计。