visual-studio - VS 2012 : Post Build xcopy error 2

标签 visual-studio msbuild visual-studio-2012 xcopy post-build-event

我想让 VS 将构建过程后创建的 .lib 文件复制到特定文件夹。 所以我进入项目配置、构建后事件,并输入以下命令:

if exist $(TargetPath)
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

但是,在我单击“构建”后,该过程并没有复制,而是失败了,并且收到以下错误:

error MSB3073: The command "if exist C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

:VCEnd" exited with code 2.

我还想知道错误消息的命令字符串中的 :VCEnd <- 也许这就是原因?如何解决这个问题?

任何帮助和提示都会很高兴:)...

部分解决方案:

编辑:看起来重命名部分(Inc.libz.lib)会带来麻烦,当 xcopy 询问这是文件还是目录时...当我只是将原始命名的文件复制到目录而不是复制重命名时,它就可以工作

最佳答案

Xcopy documentation说如下:

指定目标是文件还是目录 如果目标不包含现有目录且不以反斜杠 (\) 结尾,则会显示以下消息:

Does destination specify a file name 
or directory name on the target 
(F = file, D = directory)? 

如果您想要将一个或多个文件复制到另一个文件中,请按 F。如果要将一个或多个文件复制到目录,请按 D。

您可以使用/i 命令行选项来抑制此消息,这会导致 xcopy 在源是多个文件或目录时假定目标是一个目录.

您需要相反的开关,但没有这样的开关。

此处提出解决方案:https://stackoverflow.com/a/4283533/532647 .

建议在 xcopy 命令前加上 echo f | 前缀,它基本上执行以下操作:模拟用户按 fxcopy 询问时键入。

所以你的命令应该是这样的:

if exist $(TargetPath)
echo f | xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

Operator | 只是将 echo f (== f) 的输出通过管道传输到 xcopy 命令中,并且它在适当的时候阅读。有关输出重定向的更多信息,请参见:http://ss64.com/nt/syntax-redirection.html .

更新: 作为戈弗特points out ,此 hack 在本地化版本的 Windows 下不起作用。 然而,另一个黑客将起作用:

xcopy D:\file.zip c:\renamedFile.zip*

在目标文件名后附加星号*使xcopy不会询问目标是文件还是目录。

关于visual-studio - VS 2012 : Post Build xcopy error 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014763/

相关文章:

visual-studio - VS2015 MSB3884警告: Could not find rule set file

android - 带有 Visual Studio 的 Xamarin 未检测到模拟器的 CPU/ABI 系统镜像,即使系统镜像已安装

c# - Windows Phone 7 的哪个程序集包含 EventProgress?

visual-studio-2010 - 解决不正确的项目引用 GUID

MSBuild 使用 %(RecursiveDir) 作为文件名的一部分

c++ - 其中 ( new int*) 指向

c++ - GCC 与 Windows SDK?

visual-studio-2012 - 尝试在命令实用程序中使用命令 tfpt searchcs 搜索变更集给我 TF30012 错误

c++ - 使用 cmake 在调试构建期间为单个项目指定发布

c# - 将数组传递给自定义 MSBuild 任务