我有一个问题,即ItemGroup没有更新,因此试图复制不再存在的文件,这会引发错误:
<ItemGroup>
<Others Include=".\Folder\**\*" />
</ItemGroup>
现在当我删除Folder
中的文件时,它仍然会尝试复制它,Visual Studio仍然会在文件列表中显示它。
如果某些文件发生变化或者更好的话,Visual Studio强制重新加载项目是有意义的:静默更新。
答案 0 :(得分: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 -->
答案 1 :(得分:0)
这是msbuild的工作原理。它不会无理由地重新评估ItemGroup,并且所有全局范围的评估都将在任何目标运行之前发生。当目标执行时,将评估目标范围的项目。
您可以在复制前使用简单的条件检查 - 例如条件='存在(...)'在您的itemgroup元素上。或者,如果它在您的控制中 - 使用其他名称重新创建项目组,并仅包括当前退出的项目。两种方式都是简单而有效的方案。 如果您要添加有关您的脚本的更多详细信息或您想要实现的目标 - 这将有助于我们为您提供更具体的答案。