0

我遇到的问题是 ItemGroup 没有更新,因此尝试复制不再存在的文件,这会引发错误:

  <ItemGroup>
    <Others Include=".\Folder\**\*" />
  </ItemGroup>

现在,当我删除 中的文件时Folder,它仍会尝试复制它,Visual Studio 仍会在文件列表中显示它。如果某些文件发生更改,或者更好的是:静默更新,Visual Studio 会强制重新加载项目是有道理的。

4

2 回答 2

0

如果我理解正确:

<ItemGroup>
    <Others Include=".\Folder\**\*" />
</ItemGroup>
<RemoveFile ... >
<CopyFile...> <!-- throws an error -->

解决方案:

<ItemGroup>
    <Others Include=".\Folder\**\*" />
</ItemGroup>
<RemoveFile ... >
<ItemGroup> <!-- refresh Others collection -->
    <Others Include=".\Folder\**\*" />
</ItemGroup>
<CopyFile...> <!-- should be ok now -->
于 2013-09-12T09:23:53.453 回答
0

这就是 msbuild 的工作方式。它不会无缘无故地重新评估 ItemGroup,并且所有全局范围的评估都将在任何目标运行之前发生。目标范围内的项目将在目标执行时进行评估。

您可以在复制之前使用简单的条件检查 - 例如Condition='Exists(...)'在您的 itemgroup 元素上。或者,如果它在您的控制范围内 - 使用另一个名称重新创建 itemgroup 并仅包含当前退出的项目。两种方式都是简单有效的场景。如果您要添加有关您的脚本或您想要实现的目标的更多详细信息 - 这将有助于我们为您提供更具体的答案。

于 2013-09-12T11:14:29.197 回答