gpt4 book ai didi

msbuild - 为什么 MSBuild 在 Visual Studio 重建期间突然说我的 没有输出?

转载 作者:行者123 更新时间:2023-12-02 03:28:51 25 4
gpt4 key购买 nike

我有一个依赖于目标“A”的目标“B”。目标“A”创建了一个项目,目标 B 将其作为其输入并用作其输出(使用为目标“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>

这工作正常,它完全支持增量构建(执行“源”更改目标“B”,否则跳过)。

但是,一旦我创建了一个也依赖于目标“A”的目标“C”,目标“B”突然总是被跳过,因为它“没有输出”。

<Target Name="C"
AfterTargets="AfterBuild"
DependsOnTargets="A"
Condition="$(Configuration) == 'Debug'">
...
</Target>

为什么会这样?

这引出了一个更普遍的问题:这是为多个任务动态提供项目的正确方法吗?

编辑:我试图通过删除 DependsOnTargets 并将 BeforeTargets="B;C" 放在目标“A”上来扭转局面。但结果是一样的。

编辑:重要 我发现问题是由 Visual Studio 执行的重建。显然,在重建过程中,此特定配置会导致目标“B”“没有输出”。是不是因为在重建过程中目标“C”出现在目标“B”之前,并且以某种方式“使”ConfigTemplates“无效”?

最佳答案

提示 1:尝试为您的防病毒软件添加异常(exception)。我注意到其中一些(如我的 Avast!)用于阻止 Visual Studio 出于某种原因进行构建。

提示 2:如果您对“B”和“C”使用“A”输出,请尝试添加

"BeforeTargets="C"

到“B”,以确保它以正确的顺序构建。根据您的描述,“C”似乎在“B”之前以某种方式执行。

关于msbuild - 为什么 MSBuild 在 Visual Studio 重建期间突然说我的 <Target> 没有输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28724407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com