gpt4 book ai didi

visual-studio - Visual Studio Post-Build 事件 - 如果文件位于子文件夹中,如何将文件复制到输出(bin)目录(仅当较新时)

转载 作者:行者123 更新时间:2023-12-05 00:59:31 26 4
gpt4 key购买 nike

如何将所需的二进制文件(如dll、图标、工具、doc)复制到bin文件夹的目标目录中?

有一个明显的集成可能性:包含与源文件一样的文件,并在“复制到输出目录”的文件属性中标记为“始终复制”或“复制较新”。

但这只有在二进制文件包含在主项目文件夹中时才有效。如果你整理一下,把这些文件放在一个子文件夹中只是为了和源文件区分开来,那个子文件夹是在目标目录1:1创建的,而资源文件不在目标根目录下。

相关问题: VS PostBuild Event - Copy file if it exists

最佳答案

回答我自己的问题以分享我的知识。

假设您要复制 VS 项目的子文件夹“RuntimeEnv”中的所有文件:

在任何项目文件的构建属性下都有一个“构建事件”选项卡,其中包含预构建和构建后命令行可能性,可以在不设置 TFS 构建定义的情况下包含此类副本或类似构建要求。

在那里,您可以包含类似批处理的命令,并可以访问一些预构建变量。例如,请参阅问题中的链接。

copy 没有提供足够的功能。在下文中,我提到了 xcopy 和 robocopy 的解决方案

由于我更喜欢​​ robocopy.exe,因为它非常快速、可靠并且是一个仅复制较新文件 (/XO) 的内置选项,因此我使用以下命令而不是简单的“复制”命令:

robocopy.exe /XO "$(ProjectDir)RuntimeEnv" "$(TargetDir)." >nul 2>&1
exit 0

这里有两个专业的robocopy:

  1. “。”在 "$(TargetDir)"之后是必要的,因为 robocopy不喜欢以反斜杠结尾的路径,这里就是这种情况。

  2. 最后一行是必要的,因为 robocopy 以返回码退出 包含复制的文件数,因此“0”与 按预期成功。

可以添加一些 MSBuild 目标行来更改预期的返回码,但在 Post-Build 事件中这样做是最简单的。

HTH。

附:正如 Hans Passant 在评论中指出的那样,xcopy/D 是一个更简单的解决方案。它是 - 如果 robocopy 没有其他属性或参数有用,这可能是首选。

这样就可以了:

xcopy.exe /D /Y "$(ProjectDir)RuntimeEnv\*.*" "$(TargetDir)"

xcopy 的输出行不会正常干扰,并提示构建后发生的情况 - 否则您也可以添加 >nul 2>&1

关于visual-studio - Visual Studio Post-Build 事件 - 如果文件位于子文件夹中,如何将文件复制到输出(bin)目录(仅当较新时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53449893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com