MSBuild Copy 失败并出现奇怪的错误消息

Posted

技术标签:

【中文标题】MSBuild Copy 失败并出现奇怪的错误消息【英文标题】:MSBuild Copy fails with a strange error message 【发布时间】:2018-03-02 12:58:48 【问题描述】:

我完全被困住了,需要你的帮助)))

MSVS 跨平台工具链包含一个名为 Android.Common.targets 的 msbuild 脚本,其中有一个名为 CopyAntPackageContentToOutput 的目标,问题是当这个脚本执行时(在 Marmalade SDK 本机调试构建期间)- 复制任务无法将多个 .jar 文件移动到中间目录并打印:

Task Parameter:
1>                         SourceFiles=
1>                             c:\code\projects\develop+jf\marmalade\extensions\nsfirebase\sdk\libs\android\firebase-messaging-cpp\classes.jar
1>                                     CopyToOutputDirectory=Always
1>                                     Link=libs\classes.jar
1>                                     OriginalItemSpec=c:\code\projects\develop+jf\marmalade\extensions\nsfirebase\sdk\libs\android\firebase-messaging-cpp\classes.jar
1>                                     TargetPath=libs\classes.jar
1>                             c:\code\projects\develop+jf\marmalade\extensions\androidsupport\sdk\support-core-ui\classes.jar
1>                                     CopyToOutputDirectory=Always
1>                                     Link=libs\classes.jar
1>                                     OriginalItemSpec=c:\code\projects\develop+jf\marmalade\extensions\androidsupport\sdk\support-core-ui\classes.jar
1>                                     TargetPath=libs\classes.jar

(……等等,只好把原木剪掉一点)

然后是错误信息:

1>C:\Program Files (x86)\MSBuild\Microsoft\MDD\Android\V140\Android.Common.targets(344,5): error MSB3094: "DestinationFiles" refers to 1 item(s), and "SourceFiles" refers to 39 item(s). They must have the same number of items.

我知道 msbuild 可能会失败,因为我有多个具有相同名称 classes.jar.jar 文件,但是如何在不重命名文件的情况下解决这个问题?

【问题讨论】:

【参考方案1】:

但是如何在不重命名文件的情况下解决这个问题?

问题似乎是SourceFiles 包含多个文件但复制到一个目标。

由于不想重命名源文件,可以尝试修改复制目标CopyAntPackageContentToOutput不使用递归复制复制到同一个文件夹:

<Target Name="CopyFiles">  
    <Copy  
        SourceFiles="@(MySourceFiles)"  
        DestinationFiles="@(MySourceFiles->'c:\MyDestinationTree\%(RecursiveDir)%(Filename)%(Extension)')"  
    />  
</Target>  

来源:https://msdn.microsoft.com/en-us/library/3e54c37h.aspx

有关更多信息,请参阅similar issue。

希望这会有所帮助。

【讨论】:

以上是关于MSBuild Copy 失败并出现奇怪的错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Bamboo 随机运行不同版本的 msbuild.exe 并构建失败

Linux上的JetBrains Rider EAP - 解决方案加载失败:未找到MsBuild

尽管数据有效,但 Redshift 上的 COPY 总是失败并出现时间戳错误

使用 MSBuild 发布 VSTO 加载项会出现错误:“SignFile”任务意外失败。 System.ArgumentNullException:值不能为空

自定义 MsBuild 任务因程序集加载错误而失败

TeamCity/.sqlproj 通过 MSBuild 构建——失败