我有一个目标" B"这取决于目标" A"。目标" A"创建一个项目,目标B具有Inputs
作为其输出(使用为目标中的项目创建的自定义元数据进行转换" A")。
<Target Name="A" Condition="$(Configuration) == 'Debug'">
<ItemGroup>
<ConfigTemplates Include="@(ContentWithTargetPath)" Condition="'%(Extension)' == '.template'">
<Original>%(FullPath)</Original>
<Destination>$(ProjectDir)$(OutputPath)%(TargetPath)</Destination>
</ConfigTemplates>
</ItemGroup>
</Target>
<Target Name="B"
AfterTargets="AfterBuild"
DependsOnTargets="A"
Condition="$(Configuration) == 'Debug'"
Inputs="@(ConfigTemplates)"
Outputs="@(ConfigTemplates->'%(Destination)')">
...
</Target>
这很好用,它完全支持增量构建(是一个&#39;源&#39;更改目标&#34; B&#34;被执行,否则被跳过)。
然而,只要我创建一个目标&#34; C&#34;这也取决于目标&#34; A&#34;,突然瞄准&#34; B&#34;总是被跳过,因为它没有输出&#34;。
<Target Name="C"
AfterTargets="AfterBuild"
DependsOnTargets="A"
Condition="$(Configuration) == 'Debug'">
...
</Target>
为什么会出现这种情况?
这引出了一个更普遍的问题:这是为多个任务动态提供项目的正确方法吗?
编辑:
我试图通过删除DependsOnTargets并将BeforeTargets="B;C"
放在目标&#34; A&#34;上来扭转它。但结果是一样的。
编辑: 重要我发现问题是由Visual Studio执行的重建。显然在重建期间,此特定配置会导致&#34;没有输出&#34;目标&#34; B&#34;。是因为在重建目标期间&#34; C&#34;来到目标&#34; B&#34;之前,以某种方式&#39;无效&#39; ConfigTemplates?
答案 0 :(得分:1)
提示1:尝试为您的防病毒添加例外。我注意到其中一些(作为我的Avast!)曾经出于某种原因阻止Visual Studio构建。
提示2:如果您正在使用&#34; A&#34;输出&#34; B&#34;和&#34; C&#34;,尝试添加
"BeforeTargets="C"
到&#34; B&#34;,以确保它以正确的顺序构建。根据您的描述,似乎&#34; C&#34;以某种方式执行&#34; B&#34;。