输出参数“CopiedFiles”复制任务返回指定要复制的所有文件,即使它在给定 SkipUnchangedFiles=“true”的情况下不复制任何内容。

发布于 2024-11-05 22:26:23 字数 653 浏览 0 评论 0原文

CopiedFiles 参数返回所有要复制的文件。但考虑到 SkipUnchangedFiles 设置为 true 并且 ttask 本身没有复制任何内容,如命令行上所示(没有复制消息)。那么为什么 CopiedFiles 不为空呢?

我需要仅使用实际复制的文件(因为它们已更改)填充 CopiedFiles 参数,以便进一步将这些文件复制到其他文件夹中。这是为了维护最新的发布文件夹,并仅提取那些实际需要传播到 UAT/生产服务器上的文件。

为了便于参考,我正在使用的复制任务代码如下:

<Copy SkipUnchangedFiles="true"
            SourceFiles="@(cfile)"
                DestinationFiles="@(cfile->'$(PublishDir)\%(Identity)')">

        <Output
                    TaskParameter="CopiedFiles"
                    ItemName="Changed" />

</Copy>

<Message Text="changed:@(Changed)" Importance="high" />

复制任务中是否存在错误,或者这是预期的行为。

The CopiedFiles parameter is returning all the files that were intended to be copied. But given the fact that SkipUnchangedFiles is set to true and ttask itself is not copying anything as can be seen on command line (no copying message). Why not, then, CopiedFiles is empty?

I need to have CopiedFiles parameter be populated only with files that were actually copied (because they were changed) in order to further copy these files into some other folder. This is to maintain an up-to-date release folder as well as to extract only those files which actually need to be propogated onto UAT/production server.

For reference sake, the copy task code I'm using is given below:

<Copy SkipUnchangedFiles="true"
            SourceFiles="@(cfile)"
                DestinationFiles="@(cfile->'$(PublishDir)\%(Identity)')">

        <Output
                    TaskParameter="CopiedFiles"
                    ItemName="Changed" />

</Copy>

<Message Text="changed:@(Changed)" Importance="high" />

Is there a bug in the copy task or this is the intended behavior.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一念一轮回 2024-11-12 22:26:23

您所看到的行为是设计使然的。 MSBuild 使用任务输出跟踪文件依赖关系。如果不这样做,则在大多数情况下,任何依赖 @(Changed) 项数组作为输入的内容都无法完全处理所需的所有文件。出于同样的原因,它甚至会跟踪在目标中创建的属性和项目,这些属性和项目在输入和输出是最新时甚至不会执行。考虑使用附加输出参数 CopiedFilesCopiedByTask 创建一个您自己的不同复制任务(此命名反映了已失效的 CreateProperty 任务中 ValueSetByTask 的命名和行为)。

The behavior you are seeing is by design. MSBuild keeps track of file dependencies using task outputs. If it were to do otherwise, anything that relied on the @(Changed) item array as an input would not fully process all of the files it needed in most cases. It will even keep track of properties and items created within targets that don't even execute when Inputs and Outputs are up-to-date, for the same reason. Consider making a different Copy task of your own with an additional output parameter, CopiedFilesCopiedByTask (this naming mirrors the naming and behavior of the ValueSetByTask in the otherwise defunct CreateProperty task).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文