MSBuild和跳过目标“&书信电报;TargetName>&引用;因为它没有输出

MSBuild和跳过目标“&书信电报;TargetName>&引用;因为它没有输出,msbuild,Msbuild,我以前对MSBuild做过一些尝试,但这是我第一次尝试部分构建。我有一切事情要做,但没有我想要的那么好。我无法回避这个信息: 跳过目标“BuildLocalizerSetting”,因为它没有输出。 尽管目标已声明其输出,但输出规范仅引用空属性和/或空项列表。 如果我从目标中删除Inputs属性,一切正常。我怀疑这与缺少变换有关,但指定变换实际上是不可能的 我的设置与典型的构建场景略有不同。我有一个清单文件,其中包含一个应该编译的文件列表。也就是说,我从一个场景开始,一个输入文件在一个项目组中

我以前对MSBuild做过一些尝试,但这是我第一次尝试部分构建。我有一切事情要做,但没有我想要的那么好。我无法回避这个信息:

跳过目标“BuildLocalizerSetting”,因为它没有输出。
尽管目标已声明其输出,但输出规范仅引用空属性和/或空项列表。

如果我从目标中删除
Inputs
属性,一切正常。我怀疑这与缺少变换有关,但指定变换实际上是不可能的

我的设置与典型的构建场景略有不同。我有一个清单文件,其中包含一个应该编译的文件列表。也就是说,我从一个场景开始,一个输入文件在一个项目组中生成一个可能很长的项目列表

我已经构建了一个用于解析清单文件的自定义任务,它似乎很好地完成了这项任务。尽管我确实遇到了一个障碍,
TaskItem
不允许设置某些众所周知的元数据,如:“Filename”、“Extension”、“ModifiedTime”等。通过在自定义的
TaskItem
类中实现
ITaskItem
,问题很快得到了解决。我知道脏检查的工作应该是正常的,因为MSBuild确实检测到这些项已被修改。但现在我想知道由于该实现,我是否有可能在某些奇怪的平台上发生构建错误?

但最重要的是,为什么MSBuild不能接受输入已更改,然后得出输出也已更改的结论?


我发现的每个示例都假设输入和输出之间存在一对一的关系,或者多对一的关系,但在我的场景中,我从一到多,可以这样做吗?

您是否未在
目标上设置
输出
?您可以尝试在某处使用
来查看它是否为空。您应该将多个输出放入
输出中,MSBuild将检测到任何输出都比一个输入清单文件旧,因此需要重新生成。或者,您可以将清单文件和所有输入放入
输入
中,将
输出
中的所有输出以及
输出
中任何早于清单的文件或任何输入都将导致重建。